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系统原理、应用及仿真》一书