您的位置:首页 > 编程语言 > MATLAB

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

2015-06-24 21:41 2241 查看
一:实验内容

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: