用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))

来自专栏专业知识

1 传统注水(water filling)算法

注水(water filling)算法是一种功率分配算法,为信道条件更好的用户分配更多的功率。

优化目标:

分配 每个 用户的功率 使得总的信道容量最大

其中 代表噪声, 代表第i个用户的信道增益,信道条件越好,增益越大

限制条件:

所有用户的功率和不能 超过总的功率限制

( 为基站的总功率)

求解方法:

这是 一个等式约束问题,可以用拉格朗日乘子法求解

结果:

因为功率不能为负数,所有每个用户的功率为

就是注水面,通过代入功率的限制条件可以得到 μ的表达式

总结:

如图所示, 就是注水面,用户2的“水面高度”是 ,分配给用户2 的功率就是 ,同理,分配给用户3的功率就是阴影部分的高度。(红色的 是水面高度差,下一部分用到)

2 几何注水算法(geometric water- fifilling (GWF))

传统的注水算法先要得到注水面 μ,然后通过 得到每个用户的功率

几何注水法不需要知道注水面

这里就不详细推导了

总结下来就是:

1:得到最差用户的功率(图中的 )

2:用最差用户的功率加上水面高度差就能得到各个用户的功率

例如用加上用户3与用户2之间的水面高度差就能得到用户2 的功率( )

其中,水面高度差:

同理

具体如何找到最差的用户以及如何得到最差用户的功率,有兴趣的话可以 看看下面的文章。

P. He, L. Zhao, S. Zhou and Z. Niu, "Water-Filling: A Geometric Approach and its Application to Solve Generalized Radio Resource Allocation Problems," in IEEE Transactions on Wireless Communications, vol. 12, no. 7, pp. 3637-3647, July 2013, doi: 10.1109/TWC.2013.061713.130278

基本原理:

1、信噪比(即信号功率谱与噪声功率谱之和)为常数时,系统才能达到总信道容量最大的要求;

2、当SNR很大时,Pi等功率分配,注水算法功效消失;

3、在功率分配的问题中,只有满足注水定理时,才能达到信道容量最大化;

4、也就是说信噪比大的信道分得的功率多,信噪比小的信道分得的功率少;

5、使用拉格朗日乘子分配信道功率Pi使得信道容量最大。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存