用MATLAB实现注水算法、平均功率分配算法与约束注水 算法系统吞吐量的比较

用MATLAB实现注水算法、平均功率分配算法与约束注水 算法系统吞吐量的比较,第1张

clear all

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。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8247649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存