基于MATLAB计算MIMO信道容量(附完整代码与分析)

目录

一.介绍

二. 代码

三. 运行结果及分析

3.1  MIMO信道容量:固定发射天线数为4

3.2 MIMO信道容量:固定接收天线数为4

3.3 AWGN信道与瑞利信道容量

四. 总结


一.介绍

本文章将在MATLAB环境中分析MIMO信道容量,AWGN信道容量,瑞利信道容量和Alamouti码(空时块码)信道容量。

AWGN: Additive White Gaussian Noise 加性高斯白噪声

有关MIMO信道容量的具体解释,可参看此文章:

MIMO系统信道容量分析_mimo信道容量_唠嗑!的博客-优快云博客

二. 代码

本节代码包含一个主运行文件;四个计算信道容量文件;两个函数文件

(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
在该模拟环境下,同一个SNR信噪比下,AWGN信道容量更高,AWGN信道模型优于瑞利信道模型。
3.4 空时编码信道容量

 

空时编码分为空时块码空时格码。哈佛大学教授Tarokh率先提出空时格码,结构复杂度很高。随后Alamouti提出空时块码,结构复杂度很低,但却性能也更好,该文章也被评为近50年最优秀的57篇文章之一,极大影响了MIMO技术。

空时块码(Alamouti 码):

2 根发射天线, 1 根接收天线的 MIMO (最简单的空时块码模型);
当信噪比 SNR 1 增加到 31dB 时,信道容量也从 0.9261 增加到 9.55 bits/s/Hz;
空时块码信道模型优于 AWGN 和瑞利信道模型。

四. 总结

依据经典信息论, SISO 信道的自由度只有时间和频率两个维度, MIMO 引入多天线,扩展信道的自由度,包含时间、频率和空间三个维度,从而提升了 MIMO 的容量。

SISOSingle Input Single Output 单输入单输出系统

评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唠嗑!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值