clc;
clear all;
close all;
mt=3;
mr=3;
for n=1:3 %n=1对应SISO,n=2对应等功率算法,n=3对应注水算法
ESNO=-5:5:30;
for m=1:length(ESNO)
esno=ESNO(m);
esno=10^(esno/10);
sum1=0;
sum2=0;
sum3=0;
for z=1:1000
if(n==1)
H=randn/sqrt(2)+sqrt(-1)*randn/sqrt(2);
sum1=sum1+log2(1+esno*((abs(H))^2));
else
hr=randn(mr,mt)/sqrt(2);
hi=randn(mr,mt)/sqrt(2);
h=hr+j*hi;
a=eig(h*(h')); % 特征值
a=real(a);
a=a(find(a>0));
r=length(a);
if(n==2)
cx=0;
for g=1:r
c1=log2(1+esno*a(g)/mt);
cx=cx+c1;
end
sum2=sum2+cx; %等功率核心算法结束
else %注水算法
a=sort(a); %升序
for p=1:r
sum=0;
for x=p:r
sum=sum+1/(a(x));
end
aver=mt/(r-p+1)*(1+sum/esno); %求水平线
y=aver-mt/(esno*a(p));
if(y>0)
break;
end
end
for x=p:r
y(x)=aver-mt/(esno*a(x));
end
c=0;
for x=p:r
c=c+log2(1+a(x)*y(x)*esno/mt);
end
sum3=sum3+c; %注水核心算法结束
end
end
end
cequ1(m)=sum1/1000;
cequ2(m)=sum2/1000;
cequ3(m)=sum3/1000;
end
if(n==1)
plot(ESNO,cequ1,'s-.','Color','r');
hold on;
end
if(n==2)
plot(ESNO,cequ2,'s-.','Color','k');
hold on;
end
if(n==3)
plot(ESNO,cequ3,'s-.','Color','m');
hold on;
end
end
legend('SISO 1X1','MIMO_(power) 3X3','MIMO_(water) 3X3',4);
xlabel('信噪比(dB)');
ylabel('平均信道容量');
title('等功率与注水算法的对比');
- 1
- 2
前往页