MIMO系统平均容量与中断容量仿真
(1)发送端已知状态信息与发送端未知信道状态信息时,MIMO系统平均容量随信噪比变化曲线仿真
(2)发送端已知状态信息与发送端未知信道状态信息时,MIMO系统中断容量随信噪比变化曲线仿真
(3)发送端已知状态信息与发送端未知信道状态信息时,MIMO系统中断容量随天线数变化曲线仿真
clear all;
close all;
clc;
M=1000;%循环次数
Nt=[2:2:8];%发送端天线个数
SNR=[0:2:20];%信噪比,单位为dB
figure(1);
title('MIMO系统平均容量 vs SNR','fontsize',18);
xlabel('SNR[dB]','fontsize',18);
ylabel('容量(bps/Hz)','fontsize',18);
grid on;
hold on;
figure(2);
title('MIMO系统10%中断容量 vs SNR','fontsize',18);
xlabel('SNR[dB]','fontsize',18);
ylabel('中断容量(bps/Hz)','fontsize',18);
grid on;
hold on;
for n=1:length(Nt)
N=Nt(n);
for m=1:M
H=(randn(N,N)+1i*randn(N,N))/sqrt(2);%产生瑞利信道
for snr_idx=1:length(SNR)
rho=10^(SNR(snr_idx)/10);
%发送端未知信道状态信息情况下,MIMO系统平均容量,参见式(4-10)
CU(m,snr_idx)=log2(real(det(eye(N)+rho*H*H'/N)));
%发送端已知信道状态信息情况下,MIMO系统平均容量,参见式(4-16)
[gamma,eigs]=pwr_modes(H,rho);
%计算式(4-16)中的gamma和奇异值
CK(m,snr_idx)=sum(log2(real(1+eigs.*gamma*rho/N)));
end
end
C_unknown(:,n)=mean(CU)';%对M个未知CSI的MIMO系统容量取均值
C_known(:,n)=mean(CK)';%对M个已知CSI的MIMO系统容量取均值
%统计中断容量
for snr_idx=1:length(SNR)
[cdf_u,co_u]=hist(CU(:,snr_idx),100);
cdf_u=cumsum(cdf_u);
idx_ten_percent=find(abs(cdf_u-100) == min(abs(cdf_u-100)));
C_unknown_outage(snr_idx,n)=co_u(idx_ten_percent(1));
[cdf_k,co_k]=hist(CK(:,snr_idx),100);
cdf_k=cumsum(cdf_k);
idx_ten_percent=find(abs(cdf_k-100) == min(abs(cdf_k-100)));
C_known_outage(snr_idx,n)=co_k(idx_ten_percent(1));
end
figure(1);
plot(SNR,C_unknown(:,n),'k-');
plot(SNR,C_known(:,n),'k-.');
figure(2);
plot(SNR,C_unknown_outage(:,n),'k-');
plot(SNR,C_known_outage(:,n),'k-.');
if n==1
figure(1);
text(15,10,'2*2','FontSize',18);
text(15,19,'4*4','FontSize',18);
text(15,27,'6*6','FontSize',18);
text(15,36,'8*8','FontSize',18);
figure(2);
text(15,8,'2*2','FontSize',18);
text(15,17,'4*4','FontSize',18);
text(15,25,'6*6','FontSize',18);
text(15,34,'8*8','FontSize',18);
end
end
figure(1);
legend('\fontsize{16}未知CSI','\fontsize{16}已知CSI');
figure(2);
legend('\fontsize{16}未知CSI','\fontsize{16}已知CSI');
hold off;
figure(3);
plot(Nt,C_unknown(6,:),'k-');
hold on;
plot(Nt,C_known(6,:),'k-.');
title('MIMO系统信道容量 vs 天线','fontsize',18);
xlabel('天线数','fontsize',18);
ylabel('容量(bps/Hz)','fontsize',18);
legend('\fontsize{16}未知CSI','\fontsize{16}已知CSI');
grid on;
%计算gamma和奇异值子程序,子程序名称:pwr_modes.m
function [g,l]=pwr_modes(H,rho)
%输入参数:H为信道矩阵,rho为信噪比
%输出参数:g为gamma值,l为奇异值eigs
%这部分程序参看注水算法
N_tilde=size(H,1);
l_tilde=real(eig(H*H'));
l=l_tilde(find(l_tilde~=0));%返回矩阵或向量中非零元素的索引值
N=length(l);
mu=(N_tilde+sum(N_tilde./(rho*l)))/N;
g=mu-N_tilde./(rho*l);
while(length(find(g<=0))~=0)
l=l(find(g>0));
N=length(l);
mu=(N_tilde+sum(N_tilde./(rho*l)))/N;
g=mu-N_tilde./(rho*l);
end
参考《MIMO-OFDM系统原理、应用及仿真》一书