close all
clc
nt_V = [1 2 3 2 4]
nr_V = [1 2 2 3 4]
N0 = 1e-4
B = 1
Iteration = 1e2% must be grater than 1e2
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)
[S V D] = svd(H)
landas(:,j) = diag(V)
[Capacity(i,j) PowerAllo] = WaterFilling_alg(Pt,landas(:,j),B,N0)
end
end
f1 = figure(1)
hold on
plot(SNR_V_db,mean(Capacity'),notation(k,:),'color',color(k,:))
clear landas
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)
grid on
set(f1,'color',[1 1 1])
xlabel('SNR in dB')
ylabel('Capacity bits/s/Hz')
function [Capacity PowerAllo] = WaterFilling_alg(PtotA,ChA,B,N0)
%
% WaterFilling in Optimising the Capacity
%===============
% Initialization
%===============
ChA = ChA + eps
NA = length(ChA)% the number of subchannels allocated to
H = ChA.^2/(B*N0) % the parameter relate to SNR in subchannels
% assign the power to subchannel
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))
注水算晌告法是根据某种准则,并根据信道状况对发送功率进行自适应分配,通常是信道状况好的时刻,多分配功册谨陆率,信道差的时候,少分配功率,从而最大化传输速率。实州顷现功率的“注水”分配,发送端必须知道CSI。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)