m通过平均功率分配法和注水功率分配法分别计算MIMO信道容量matlab仿真

1.算法描述

       根据不同的传输信道类型,可以在无线系统中使用相应的分集方式。目前,主要的分集方式包括时间分集(不同的时隙和信道编码)、频率分集(不同的信道、扩频和OFDM)以及空间分集等。多天线系统利用的就是空间方式,而MIMO作为典型的多天线系统,可以明显提高传输速率。而在实际的无线系统中,可以根据实际情况使用一种或者多种分集方式。       

 

       研究 MIMO 系统时,通常假设接收端已知信道矩阵,但发射端不确定,此时发射端应采用等功率分配算法。然而我们可以通过在接收端发射检测序列来估计信道矩阵,再通过可靠的反馈信道将估计的信道状态信息(CSI)发送到发射端,发射端就可以采用合适的功率分配算法,最大程度上提高MIMO 系统的信道容量。因此,功率分配算法的研究对MIMO 系统的信道容量的提高有着重要的意义。不同功率分配系统下的信道容量和性能存在着差异。

 

 

 

 

注水算法功率分配:

 

      注水算法是根据某种准则,并根据信道状况对发送功率进行自适应分配,通常是信道状况好的时刻,多分配功率,信道差的时候,少分配功率,从而最大化传输速率。实现功率的注水分配,发送端必须知道CSI。当接收端完全知道信道而发送端不知道信号时,发送天线阵列中的功率平均分配是合理的。当发送端知道信道,可以增加信道容量。

 

      功率分配技术能有效提高认知网络传输链路的信道容量,而注水算法利用凸优化的思想能实现功率分配最优化.针对认知网络中使用注水算法分配信道功率时未考虑邻近认知信道干扰的情况,对认知网络中邻近认知信道干扰对授权信道的影响进行研究,提出了基于注水算法的两种降低邻近认知信道干扰的功率分配的次优化方案.性能分析和仿真结果表明,认知网络中认知信道干扰对授权信道的影响不容忽略,合理调整注水算法的参数能够降低邻近认知信道干扰,达到传输容量的最大化.

 

 

 

 

 

 

 

 

综上所述,算法实现流程如下:

 

采用计算机编程实现注水算法。

二:实验数据及具体步骤

求解 MIMO 信道容量最大化问题( 4)的步骤如下:

1)随机产生 H ,每个信道系数服从均值为 0,方差为 1 的高斯分布(对 Rayliegh 分布)

2) 奇异值分解 H UDV= H (利用 matlab SVD 函数)

3)计算 Λ = D DH

4)注水法求解问题( 9

5)计算 = H

 

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

 

 

 

 

 

 

 

3.MATLAB核心程序

 

for ij = 1:4  %不同天线数量的循环测试
    ij
    Tnum   = NTs(ij); %选择不同的天线
    Rnum   = NRs(ij); %选择不同的天线
    corrs  = 0.6*ones(Rnum,Tnum);%相关系数
    corrs  = corrs+0.4*eye(Rnum,Tnum);
    corrs1 = corrs^0.5;
 
    for i = 1:length(SNR0)%信噪比循环
	    pp = 10^(SNRsets(i)/10);%噪声功率
        for nL= 1:Lens
            H = corrs1*(randn(Rnum,Tnum)+sqrt(-1)*randn(Rnum,Tnum))/sqrt(2);%基于相关系数的矩阵H
            if Tnum<Rnum
               Capacity(i,nL) = log2(real(det(eye(min(Tnum,Rnum))+pp*H'*H/Tnum)));%功率分配
            else
               Capacity(i,nL) = log2(real(det(eye(min(Tnum,Rnum))+pp*H*H'/Tnum)));%功率分配 
            end
        end
        tempC = sort(Capacity(i,:));%信道容量排序
    end
    
    for i = 1:length(SNR0) %信噪比循环
	    pp = 10^(SNRsets(i)/10);%噪声功率
        for nL= 1:Lens
            H = (randn(Rnum,Tnum)+sqrt(-1)*randn(Rnum,Tnum))/sqrt(2);%矩阵H
            if Tnum<Rnum 
               Capacity1(i,nL) = log2(real(det(eye(min(Tnum,Rnum))+pp*H'*H/Tnum)));%功率分配 
            else
               Capacity1(i,nL) = log2(real(det(eye(min(Tnum,Rnum))+pp*H*H'/Tnum))); %功率分配 
            end
        end
        tempC1 = sort(Capacity1(i,:));%信道容量排序
    end 
   
    figure(1); 
    plot(tempC,(1:Lens)/Lens,'-','color',color{ij}) %画图
    hold on 
    plot(tempC1,(1:Lens)/Lens,'--','color',color{ij}) %画图
    hold on 
end 

 

  

 

posted @ 2023-03-11 20:29  我爱C编程  阅读(90)  评论(0编辑  收藏  举报