MIMO信道容量及注水算法---------Matlab

一:实验内容 
MIMO 信道容量; 

注水算法原理; 

采用计算机编程实现注水算法。 
二:实验数据及具体步骤 
求解 MIMO 信道容量最大化问题( 4)的步骤如下: 
1)随机产生 H ,每个信道系数服从均值为 0,方差为 1 的高斯分布(对 Rayliegh 分布) 
2) 奇异值分解 H UDV= H (利用 matlab SVD 函数) 
3)计算 Λ = D DH 
4)注水法求解问题( 9) 
5)计算 = H 

R VXVx ,根据( 3)计算容量(或者根据问题( 9)的最优值确定最大容量)。


clc;
nt=[2,4,8];      %发射天线的数目
nr=[2,4,8];      %接收天线的数目
Pt_db=[0:5:30];  %信噪比(单位dB)
PT=10.^(Pt_db/10);   %信噪比的单位转换
for i=1:3
    for j=1:length(Pt_db)
         Cn=[];
        for k=1:1000                      %仿真时的抽样数量
            H=(randn(nr(i),nt(i))+sqrt(-1)*randn(nr(i),nt(i)))/sqrt(2);  %瑞利衰落信道矩阵 
            [U,D,V]=svd(H);
            A=D'*D;
            r=rank(H);
            a=1./diag(A);
            s=0;
            b=sort(a);
            for m=1:(r-1)
                s=s+m*(b(m+1)-b(m));
               if s>PT(j)
                   v=b(m+1)-(s-PT(j))/m;
                   break;
                end
            end
            if s<PT(j)
               v=b(r)+(PT(j)-s)/r;
            end 
            for n=1:r
               x(n)=max(v-a(n),0);
            end
            x=x(1:r);
            X=diag(x);
            Rx=V*X*V';
            I=diag(ones(1,nr(i)));
            c=log(det(I+H*Rx*H'));
            Cn=[Cn,c];           
        end
        y(j)=real(sum(Cn)/1000);
    end
    plot(Pt_db,y);
    hold on;
    xlabel('Pt_db');
    ylabel('容量,单位为bps');
    title('MIMO信道容量及注水算法');
end
    
    
   





猜你喜欢

转载自blog.csdn.net/CSDNJay/article/details/46627431
今日推荐