clear
j=sqrt(-1);%平方根函数即虚数iMr=[1246];Mt=[1246];
LRT=length(Mr);%取Mr的长度SNR=0:20;%信噪比范围0~20Lsnr=length(SNR);%SNR的长度testnum=2^(12);
forln=1:LRT;%for循环范围1到LRT
mR=Mr(ln);%接收天线数量.mT=Mt(ln);%发送天线数量.
Forlm=1:Lsnr;
snr=10^(SNR(lm)/10);forll=1:testnum,
H_matrix=(randn(mT,mR)+j*randn(mT,mR))/sqrt(2);%H复矩阵
%randn产生标准正态矩阵
M_Channl=H_matrix*H_matrix';%信道是H与H的转置相乘[Vect,D]=eig(M_Channl);%求M的全部特征值构成VECT,M
%的特征向量构成D的列向量
F_matrix=eye(size(D))+snr*D./mT;%size()获取矩阵的行数和列%数eye()主对角线为1其他为0的矩阵
G_mt(ll)=sum(log2(diag(F_matrix)));end
C_mt(ln,lm)=sum(G_mt)/testnum;endend
Q(1,:)=C_mt(3,:);savecapacityQ;
figure(1);%产生一副图片
plot(SNR,C_mt(1,:),'k-*','LineWidth',2);holdon;%不覆盖原图
plot(SNR,C_mt(2,:),'k-p','LineWidth',2);
plot(SNR,C_mt(3,:),'k-h','LineWidth',2);plot(SNR,C_mt(4,:),'k-v','LineWidth',2);
xlabel('信噪比\\rho(dB)','FontSize',14);%横坐标字体14ylabel('遍历容量C(bit/s/Hz)','FontSize',14);
legend('N_T=N_R=1','N_T=N_R=2','N_T=N_R=4','N_T=N_R=6');holdoff
发送端已知信道参数仿真程序代码
clear
M=4;j=sqrt(-1);
testnum=2^(12);SNR=0:20;
Lsnr=length(SNR);fornl=1:Lsnr;
snr=10^(SNR(nl)/10);forK=1:testnum,
T=randn(M,M)+j*randn(M,M);
T=T/sqrt(2);I=eye(M);
eigen=eig(T*T');%extracteigenvaluesgamma=zeros(M,1);gamma=watfill(snr,T,M);
a=I+(snr/M)*diag(gamma).*diag(eigen);a=det(a);
y(K)=log2(a);end
a_var(nl)=sum(y)/testnum;end
loadcapacityQ;
b_var=Q;figure(1);
plot(SNR,b_var,'k-','LineWidth',2);holdon;
plot(SNR,a_var,'k-*','LineWidth',2);grid
xlabel('信噪比\\rho(dB)','FontSize',14');ylabel('遍历性容量[bit/s/Hz]','FontSize',14);legend('unknown','known');axis([020,030]);holdoff
注水算法子函数:
function[y_outU_out]=watfill(snr,H,M)
[UHeigvalue]=eig(H);
[eigenDxD]=sort(diag(-eigvalue));
eigen=-eigenD;
forrn=1:M;
ifabs(eigen(rn))<=0.001;
rx(rn)=
0.0;
elserx(rn)=end
eigen(rn);
end
R_matrix=diag(rx);UH=UH(:,xD);r=rank(R_matrix);rou=M/snr;formk=1:r;
consta=rx(mk);p=1;
temp2=0.0;
fornk=1:r-p+1,
constb=rx(nk);
ifconstb~=0.0;
temp1=1/constb;
temp2=temp2+temp1;temp1=0.0;else
temp1=0.0;
temp2=temp2+temp1;end
ifr-p+1~=0,
const=mRT/(r-p+1);
mu=const*(1+temp2/snr);else
mu=0;endend
constc=mu-rou/consta;
ifconstc<0
constc=0;
p=p+1;mu=0;else
mu=0;
end
gamma(mk)=constc;end
LG=length(gamma);
y_out=[gammazeros(1,M-LG)];U_out=UH;
因篇幅问题不能全部显示,请点此查看更多更全内容