基于MATLAB计算MIMO信道容量(附完整代码与分析)
本文章将在MATLAB环境中分析MIMO信道容量,AWGN信道容量,瑞利信道容量和Alamouti码(空时块码)信道容量。AWGN:加性高斯白噪声MIMO系统信道容量分析_mimo信道容量_唠嗑!的博客-CSDN博客二. 代码本节代码包含一个主运行文件;四个计算信道容量文件;两个函数文件(1)main.m文件主运行文件clear;clc;close all;%--------------接收天线变
目录
一.介绍
本文章将在MATLAB环境中分析MIMO信道容量,AWGN信道容量,瑞利信道容量和Alamouti码(空时块码)信道容量。
AWGN: Additive White Gaussian Noise 加性高斯白噪声
有关MIMO信道容量的具体解释,可参看此文章:
MIMO系统信道容量分析_mimo信道容量_唠嗑!的博客-CSDN博客
二. 代码
本节代码包含一个主运行文件;四个计算信道容量文件;两个函数文件
(1)main.m文件
主运行文件
clear;
clc;
close all;
%--------------Main--------------%
c_3d = zeros(10,10);
%--------------接收天线变化--------------%
N = 4;%发射天线
cap = zeros(1,20);
%SNR为5dB
SNR = 5; %SNR in dB
for i = 1:1:20
cap(1,i) = mimo_capacity(N,i,SNR);
end
figure
plot(1:1:20,cap,'b')
title('发射天线数目为4的情况')
xlabel('接收天线数目')
ylabel('信道容量 bits/s/Hz')
hold on
%SNR为10dB
SNR = 10;
for i = 1:1:20
cap(1,i) = mimo_capacity(N,i,SNR);
end
%figure
plot(1:1:20,cap,'r')
hold on
%SNR为15dB
SNR = 15;
for i = 1:1:20
cap(1,i) = mimo_capacity(N,i,SNR);
end
%figure
plot(1:1:20,cap,'g')
hold on
SNR = 20;
for i = 1:1:20
cap(1,i) = mimo_capacity(N,i,SNR);
end
%figure
plot(1:1:20,cap,'m')
legend('5db','10dB','15dB','20db')
%--------------发射天线变化--------------%
M = 4;%发射天线
cap = zeros(1,20);
%SNR为5dB
SNR = 5; %SNR in dB
for i = 1:1:20
cap(1,i) = mimo_capacity(i,M,SNR);
end
figure
plot(1:1:20,cap,'b')
title('接收天线数目为4的情况')
xlabel('发射天线数目')
ylabel('信道容量 bits/s/Hz')
hold on
%SNR为10dB
SNR = 10;
for i = 1:1:20
cap(1,i) = mimo_capacity(i,M,SNR);
end
%figure
plot(1:1:20,cap,'r')
hold on
%SNR为15dB
SNR = 15;
for i = 1:1:20
cap(1,i) = mimo_capacity(i,M,SNR);
end
plot(1:1:20,cap,'g')
hold on
SNR = 20;
for i = 1:1:20
cap(1,i) = mimo_capacity(i,M,SNR);
end
%figure
plot(1:1:20,cap,'m')
legend('5db','10dB','15dB','20db')
%--------------三维图展示MIMO----------------%
SNR = 15;
for i = 1:1:10
for j = 1:1:10
c_3d(i,j) = mimo_capacity(i,j,SNR);
end
end
figure
mesh(1:1:10,1:1:10,c_3d)
title('3-dimension visual')
%---------------AWGN SISO信道--------------%
cap_awgn = zeros(1,31);
for SNR = -10:1:20
cap_awgn(1,SNR+11) = awgn_capacity(SNR);
end
figure
plot(1:1:31,cap_awgn)
title('awgn信道容量')
xlabel('SNR in dB')
ylabel('信道容量 bits/s/Hz')
%---------------Raly SISO信道--------------%
c = zeros(1,31);
for SNR = 0:1:30
c(1,SNR+1) = ralychannel(SNR);
end
figure
plot(1:1:31,c)
title('瑞利信道容量')
xlabel('SNR in dB')
ylabel('信道容量 bits/s/Hz')
%--------------Alamouti---------------%
c = zeros(1,31);
for SNR = 0:1:30
c(1,SNR+1) = alamouti(SNR);
end
figure
plot(1:1:31,c)
title('Alamouti码 2发1收')
xlabel('SNR in dB')
ylabel('信道容量 bits/s/Hz')
(2)awgn_capacity.m文件
AWGN信道容量
function capacity = awgn_capacity(SNR)
SNR_D = 10^(0.1*SNR);
capacity = log2(1+SNR_D);
end
(3)ralychannel.m文件
瑞利衰落信道容量
function capacity = ralychannel(SNR)
h = raylrnd(1/sqrt(2),[1,1000000]);
c = zeros(1,length(h));
%SNR = 20;
for i = 1:1:length(h)
c(1,i) = log2(1+h(1,i)*SNR);
end
capacity = mean(c);
end
(4)mimo_capacity.m文件
MIMO信道容量
function cap = mimo_capacity(N,M,SNR)
SNR_D = 10^(SNR*0.1); %SNR in decimal
C = zeros(1,3000);
for i = 1:1:3000
H = generate_channel_matrix(N,M);
[U,S,V] = svd(H);
d = diag(S);
C_temp = zeros(1,length(d));
for j = 1:1:length(d)
C_temp(1,j) = log2(1+d(j,1)^2*SNR_D/N);
end
C(1,i) = sum(C_temp);
end
cap = mean(C);
(5)generate_channel_matrix.m文件
产生信道矩阵的文件
function H = generate_channel_matrix(N,M)
%N:发射天线个数
%M:接收天线个数
H = raylrnd(1/sqrt(2),M,N);
end
(6)demo.m
实验文件
c = zeros(1,31);
for SNR = 0:1:30
c(1,SNR+1) = alamouti(SNR);
end
plot(1:1:31,c)
三. 运行结果及分析
代码运行后一共有六个图,其中一个3D图,没什么好解释的,这里省去。重点分析其他五个跟信道容量相关的图。
3.1 MIMO信道容量:固定发射天线数为4
- 横向对比:当接收天线数增加时,信道容量整体呈现增加趋势;
- 拆分对比:固定发射天线数为4,接收天线数从1-4增加,信道容量显著增加。接收天线数继续增加时,信道容量增加的趋势相对降低;
- 纵向对比:同一组收发天线数时,当信噪比从5dB,10dB,15dB,20dB不断增加时,信道容量也会增加。
3.2 MIMO信道容量:固定接收天线数为4
• 横向对比 :当接收天线数增加时,信道容量整体呈现增加趋势;• 拆分对比 :固定发射天线数为 4 ,接收天线数从 1-4 增加,信道容量显著增加。接收天线数继续增加时,信道容量增加的趋势相对降低;• 纵向对比 :同一组收发天线数时,当信噪比从 5dB,10dB,15dB,20dB 不断增加时,信道容量也会增加。• 区别性:固定接收天线数为4,当发射天线数超过4以后,信道容量增加的幅度相比前一个3.1更加缓慢(图形更加接近一条水平线);• 解释 :该模拟信道环境下,接收天线相比发射天线变化,对信道容量的影响稍微大一些;
3.3 AWGN信道与瑞利信道容量
普通的AWGN信道模型:
• 单收发天线;• 当信噪比 SNR 从 1 增加到 31dB 时,信道容量也从 0.1375 增加到 6.658 bits/s/Hz 。
普通的瑞利信道模型:
• 单收发天线;• 当信噪比 SNR 从 1 增加到 31dB 时,信道容量也从 0 增加到 4.57 bits/s/Hz 。
空时编码分为空时块码和空时格码。哈佛大学教授Tarokh率先提出空时格码,结构复杂度很高。随后Alamouti提出空时块码,结构复杂度很低,但却性能也更好,该文章也被评为近50年最优秀的57篇文章之一,极大影响了MIMO技术。
空时块码(Alamouti 码):
• 2 根发射天线, 1 根接收天线的 MIMO (最简单的空时块码模型);• 当信噪比 SNR 从 1 增加到 31dB 时,信道容量也从 0.9261 增加到 9.55 bits/s/Hz;• 空时块码信道模型优于 AWGN 和瑞利信道模型。
四. 总结
SISO:Single Input Single Output 单输入单输出系统
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)