MIMO功率分配算法注水原理.docx
《MIMO功率分配算法注水原理.docx》由会员分享,可在线阅读,更多相关《MIMO功率分配算法注水原理.docx(11页珍藏版)》请在冰豆网上搜索。
MIMO功率分配算法注水原理
1.1功率注水算法
注水算法是根据某种准则,并根据信道状况对发送功率进行自适应分配,通常是信道状况好的时刻,多分配功率,信道差的时候,少分配功率,从而最大化传输速率。
实现功率的“注水”分配,发送端必须知道CSI。
当接收端完全知道信道而发送端不知道信号时,发送天线阵列中的功率平均分配是合理的。
当发送端知道信道,可以增加信道容量。
考虑一个
维的零均值循环对称复高斯信号向量
,r为发送信道的秩。
向量在传送之前被乘以矩阵
(
)。
在接收端,接受到的信号向量y被乘以
。
这个系统的有效输入输出关系式由下式给出:
其中
是
维的变换的接受信号向量,
是协方差矩阵为
的零均值循环对称复高斯
变换噪声向量。
向量
必须满足
已限制总的发送能量。
可以看出
,i=1,2,…,r
MIMO信道的容量是单个平行SISO信道容量之和,由下式给出
其中
(i=1,2,…,r)反映了第i个子信道的发送能量,且满足
。
可以在子信道中分配可变的能量来最大化互信息。
现在互信息最大化问题就变成了:
最大化目标在变量
中是凹的,用拉格朗日法最大化。
最佳能量分配政策
注水算法:
Step1:
迭代计数p=1,计算
Step2:
用μ计算
,i=1,2,…,r-p+1
Step3:
若分配到最小增益的信道能量为负值,即设
,p=p+1,转至Step1.
若任意
非负,即得到最佳注水功率分配策略。
1.2发送端知道信道时的信道容量
%inthisprogrameahighlyscatteredenviromentisconsidered.The
%CapacityofaMIMOchannelwithnttransmitantennaandnrrecieve
%antennaisanalyzed.Thepowerinparallelchannel(after
%decomposition)isdistributedaswater-fillingalgorithm
clearall
closeall
clc
nt_V=[12324];
nr_V=[12234];
N0=1e-4;
B =1;
Iteration=1e2;%mustbegraterthan1e2
SNR_V_db=[-10:
3:
20];
SNR_V =10.^(SNR_V_db/10);
color=['b';'r';'g';'k';'m'];
notation=['-o';'->';'<-';'-^';'-s'];
for(k=1:
5)
nt=nt_V(k);
nr=nr_V(k);
for(i=1:
length(SNR_V))
Pt=N0*SNR_V(i);
for(j=1:
Iteration)
H=random('rayleigh',1,nr,nt);
[SVD]=svd(H);
landas(:
j) =diag(V);
[Capacity(i,j)PowerAllo]=WaterFilling_alg(Pt,landas(:
j),B,N0);
end
end
f1=figure
(1);
holdon
plot(SNR_V_db,mean(Capacity'),notation(k,:
),'color',color(k,:
))
clearlandas
end
f1=figure
(1)
legend_str=[];
for(i=1:
length(nt_V))
legend_str=[legend_str;...
{['nt=',num2str(nt_V(i)),',nr=',num2str(nr_V(i))]}];
end
legend(legend_str)
gridon
set(f1,'color',[111])
xlabel('SNRindB')
ylabel('Capacitybits/s/Hz')
注水算法子函数
function[CapacityPowerAllo]=WaterFilling_alg(PtotA,ChA,B,N0);
%
%WaterFillinginOptimisingtheCapacity
%===============
%Initialization
%===============
ChA=ChA+eps;
NA=length(ChA); %thenumberofsubchannelsallocatedto
H=ChA.^2/(B*N0); %theparameterrelatetoSNRinsubchannels
%assignthepowertosubchannel
PowerAllo=(PtotA+sum(1./H))/NA-1./H;
while(length(find(PowerAllo<0))>0)
IndexN=find(PowerAllo<=0);
IndexP=find(PowerAllo>0);
MP=length(IndexP);
PowerAllo(IndexN)=0;
ChAT=ChA(IndexP);
HT=ChAT.^2/(B*N0);
PowerAlloT=(PtotA+sum(1./HT))/MP-1./HT;
PowerAllo(IndexP)=PowerAlloT;
end
PowerAllo=PowerAllo.';
Capacity =sum(log2(1+PowerAllo.'.*H));
注意:
是
的奇异值,所以对H奇异值分解后要平方ChA.^2
1.3发送端不知道信道时的信道容量
功率均等发送,信道容量的表达式为
clearall
clc
nt_V=[12324];
nr_V=[12234];
N0=1e-4;
B=1;
Iteration=1e2;%mustbegraterthan1e2
SNR_V_db=[-10:
3:
20];
SNR_V =10.^(SNR_V_db/10);
color=['b';'r';'g';'k';'m'];
notation=[':
o';':
>';'<:
';':
^';':
s'];
for(k=1:
length(nt_V))
nt=nt_V(k);
nr=nr_V(k);
for(i=1:
length(SNR_V))
Pt=N0*SNR_V(i);
for(j=1:
Iteration)
H=random('rayleigh',1,nr,nt);
Capacity(i,j)=log2(det(eye(nr)+Pt/(nt*B*N0)*H*H'));
end
end
f2=figure
(2);
holdon
plot(SNR_V_db,mean(Capacity'),notation(k,:
),'color',color(k,:
))
clearlandas
end
f2=figure
(2)
legend_str=[];
for(i=1:
length(nt_V))
legend_str=[legend_str;...
{['nt=',num2str(nt_V(i)),',nr=',num2str(nr_V(i))]}];
end
legend(legend_str)
gridon
set(f2,'color',[111])
xlabel('SNRindB')
ylabel('Capacitybits/s/Hz')
1.4已知信道和未知信道容量比较
clearall
closeall
clc
nt_V=[12 3 2 4];
nr_V=[12 2 3 4];
N0=1e-4;
B =1;
Iteration=1e2;%mustbegreaterthan1e2
SNR_V_db=[-10:
3:
20];
SNR_V =10.^(SNR_V_db/10);
color=['b';'r';'g';'k';'m'];
notation=['-o';'->';'<-';'-^';'-s'];
notation_uninf=[':
o';':
>';'<:
';':
^';':
s'];
for(k=1:
length(nt_V))
nt=nt_V(k);
nr=nr_V(k);
for(i=1:
length(SNR_V))
Pt=N0*SNR_V(i);
for(j=1:
Iteration)
H=random('rayleigh',1,nr,nt);
[SVD]=svd(H);
landas(:
j) =diag(V);
Capacity_uninf(i,j)=log2(det(eye(nr)+Pt/(nt*B*N0)*H*H'));
[Capacity(i,j)PowerAllo]=WaterFilling_alg(Pt,landas(:
j),B,N0);
end
end
f1=figure
(1);
holdon
plot(SNR_V_db,mean(Capacity'),notation(k,:
),'color',color(k,:
))
holdon
plot(SNR_V_db,mean(Capacity_uninf'),notation_uninf(k,:
),'color',color(k,:
))
clearlandas
end
gridon
set(f1,'color',[111])
xlabel('SNRindB')
ylabel('Capacitybits/s/Hz')
f1=figure
(1)
legend_str=[];
for(i=1:
length(nt_V))
legend_str=[legend_str;...
{['nt=',num2str(nt_V(i)),',nr=',num2str(nr_V(i))]}];
end
legend(legend_str)
gridon
set(f1,'color',[111])
xlabel('SNRindB')
ylabel('Capacitybits/s/Hz')
由图形中可以看出:
1.在小信噪比时,相同信噪比下利用CSI的功率注水算法获得容量优于未知CSI的平均功率分配算法;相同容量下已知CSI信噪比比未知CSI时的信噪比小3dB.
2.当信噪比增大到一定程度时,功率注水算法所获得的信道容量将收敛到平均功率分配的信道容量。