注水法比特功率分配介绍及MATLAB实现

一、注水原理

在OFDM 系统中,信道的带宽为 W W WHz, H ( f ) H\left( f \right) H(f) 表示该信道的传输函数,信道内存在加性高斯白噪声,噪声功率谱密度为 N ( f ) N\left( f \right) N(f) 。该系统有 N N N个子信道,每个子信道的带宽为 Δ f = B / N \Delta f=B/N Δf=B/N,而且 ∣ H ( f ) ∣ 2 / N ( f ) {{\left| H\left( f \right) \right|}^{2}}/N\left( f \right) H(f)2/N(f)的值在子信道频带内近似为常量。信号的总发射功率为 P T {{P}_{T}} PT ,发送信号的功率谱密度为 S x ( f ) {{S}_{x}}\left( f \right) Sx(f) ,即:
P T = ∫ f 0 f 0 + B S x ( f ) d f {{P}_{T}}=\int_{{{f}_{0}}}^{{{f}_{0}}+B}{{{S}_{x}}\left( f \right)df} PT=f0f0+BSx(f)df
其中, f 0 {{f}_{0}} f0 为第一个子信道的起始频率。

由香农定理可以知道信道的容量为
C = ∫ f 0 f 0 + B log ⁡ 2 [ 1 + S x ( f ) ∣ H ( f ) ∣ 2 N ( f ) ] d f C=\int_{{{f}_{0}}}^{{{f}_{0}}+B}{{{\log }_{2}}\left[ 1+\frac{{{S}_{x}}\left( f \right){{\left| H\left( f \right) \right|}^{2}}}{N\left( f \right)} \right]}df C=f0f0+Blog2[1+N(f)Sx(f)H(f)2]df

在发射功率的约束下,实现信道容量的最大化,可以利用变分法将其变换为
∫ f 0 f 0 + B { log ⁡ 2 [ 1 + S x ( f ) ∣ H ( f ) ∣ 2 N ( f ) ] + λ S x ( f ) } d f → max ⁡ \int_{{{f}_{0}}}^{{{f}_{0}}+B}{\left\{ {{\log }_{2}}\left[ 1+\frac{{{S}_{x}}\left( f \right){{\left| H\left( f \right) \right|}^{2}}}{N\left( f \right)} \right]\text{+}\lambda {{S}_{x}}\left( f \right) \right\}}df\to \max f0f0+B{log2[1+N(f)Sx(f)H(f)2]+λSx(f)}dfmax
其中 λ \lambda λ为拉格朗日算子,经过变分法求解得到
S x ( f ) = { K − N ( f ) ∣ H ( f ) ∣ 2         f ∈ B 0                        f ∉ B {{S}_{x}}\left( f \right)=\left\{ \begin{aligned} & K-\frac{N\left( f \right)}{{{\left| H\left( f \right) \right|}^{2}}}\ \ \ \ \ \ \ f\in B \\ & 0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ f\notin B \\ \end{aligned} \right. Sx(f)=KH(f)2N(f)       fB0                      f/B
其中 K = P T B + 1 B ∫ B N ( f ) ∣ H ( f ) ∣ 2 d f K=\frac{{{P}_{T}}}{B}+\frac{1}{B}\int_{B}^{{}}{\frac{N\left( f \right)}{{{\left| H\left( f \right) \right|}^{2}}}df} K=BPT+B1BH(f)2N(f)df
上式的物理意义是:当信噪比 ∣ H ( f ) ∣ 2 / N ( f ) {{\left| H\left( f \right) \right|}^{2}}/N\left( f \right) H(f)2/N(f)较大时,信道对应的分配功率应该较大,反之,信道对应的分配功率也应该较小,或者关闭部分信噪比极低的信道
下面是注水算法的简单示意图
在这里插入图片描述
从上图中也可以看出,当信道情况比较好的时候分配的功率比较多,信道情况比较差的时候分配的功率比较少,下面我们也可以给出一个仿真的例子。参数设置如下:

参数名称参数值
信道个数8
总发射功率10
噪声功率2,3,4,1,3,4,3,2

在这里插入图片描述
也可以看出上述的情况和给出的示例图的结果是一致的。
那么在具体的例子中应该如何去使用呢?下面给出一个关于比特和功率分配的注水算法的例子。
首先介绍一下算法的原理。

比特功率分配的理想注水算法的原理

对于单用户的功率分配,注水算法的求解的目标为
min ⁡ p n     ∑ n = 1 N log ⁡ 2 ( 1 + p n g n Γ )    s . t .    ∑ n = 1 N p n ≤ P T , p n ≥ 0 , n = 1 , ⋯   , N \underset{{{p}_{n}}}{\mathop{\min }}\,\ \sum\limits_{n=1}^{N}{{{\log }_{2}}}\left( 1+\frac{{{p}_{n}}{{g}_{n}}}{\Gamma } \right)\ \ s.t.\ \ \sum\limits_{n=1}^{N}{{{p}_{n}}}\le {{P}_{T}},\quad {{p}_{n}}\ge 0,n=1,\cdots ,N pnmin n=1Nlog2(1+Γpngn)  s.t.  n=1NpnPT,pn0,n=1,,N

其中 g n = ∣ h n ∣ 2 / σ n 2 g_{n}=\left|h_{n}\right|^{2} / \sigma_{n}^{2} gn=hn2/σn2表示第 n n n个子信道的信道增益噪声比。 Γ {\Gamma} Γ为信噪比间隙,采用QAM调制时,其表达式为
Γ = 1 3 [ Q − 1 ( B E R 4 ) 2 ] \Gamma =\frac{1}{3}\left[ {{Q}^{-1}}{{\left( \frac{BER}{4} \right)}^{2}} \right] Γ=31[Q1(4BER)2]
其中, Q ( x ) = 1 2 π ∫ x + ∞ e − t 2 / 2 d t Q\left( x \right)=\frac{1}{\sqrt{2\pi }}\int_{x}^{+\infty }{{{e}^{-{{t}^{2}}/2}}}dt Q(x)=2π 1x+et2/2dt,但是一般不用此公式计算,而是采取其近似公式
Γ = − ln ⁡ ( 5 B E R ) 1.5 \Gamma =-\frac{\ln \left( 5BER \right)}{1.5} Γ=1.5ln(5BER)
若不考虑 p n {{p}_{n}} pn的正负性的限制,那么对于上式,利用拉格朗日乘数法进行求解,可以得到
L = ∑ n = 1 N log ⁡ 2 ( 1 + p n g n Γ ) + λ ( P T − ∑ n = 1 N p n ) L=\sum\limits_{n=1}^{N}{{{\log }_{2}}\left( 1+\frac{{{p}_{n}}{{g}_{n}}}{\Gamma } \right)}+\lambda \left( {{P}_{T}}-\sum\limits_{n=1}^{N}{{{p}_{n}}} \right) L=n=1Nlog2(1+Γpngn)+λ(PTn=1Npn)
由于 p n {{p}_{n}} pn 相当于变量,那么关于 L L L p n {{p}_{n}} pn求导可以得到
∂ L n ∂ p n = 1 ln ⁡ 2 g n Γ 1 1 + p n g n Γ − λ = 0 \frac{\partial {{L}_{n}}}{\partial {{p}_{n}}}=\frac{1}{\ln 2}\frac{{{g}_{n}}}{\Gamma }\frac{1}{1+\frac{{{p}_{n}}{{g}_{n}}}{\Gamma }}-\lambda =0 pnLn=ln21Γgn1+Γpngn1λ=0
对其进行化简可以得到
p n + Γ g n = 1 λ ln ⁡ 2 = k {{p}_{n}}+\frac{\Gamma }{{{g}_{n}}}=\frac{1}{\lambda \ln 2}=k pn+gnΓ=λln21=k
对上式两边进行求和可以得到注水的常量
K = 1 N ( P T + Γ ∑ n = 1 N 1 g n ) K=\frac{1}{N}\left( {{P}_{T}}+\Gamma \sum\limits_{n=1}^{N}{\frac{1}{{{g}_{n}}}} \right) K=N1(PT+Γn=1Ngn1)
那么每个子载波的功率为
p n = K − Γ g n , n = 1 , 2 , ⋯   , N {{p}_{n}}=K-\frac{\Gamma }{{{g}_{n}}},n=1,2,\cdots ,N pn=KgnΓ,n=1,2,,N
上述求解过程并没有考虑 p n {{p}_{n}} pn出现负值的情况,在某些信道具有严重的频率选择性衰落时,那么 p n {{p}_{n}} pn是可能出现负值的。若 p n < 0 {{p}_{n}}<0 pn<0,那么其对应的一定是 g n {{g}_{n}} gn最小的子信道,此时系统的总功率不能满足所有子信道的分配,应该放弃信道状况最差的信道,不给其分配功率,那么此时需要重新计算注水线,直至所有的信道分配的功率非负,其具体步骤可以总结为:
1)将子信道增益进行排序, g 1 > g 2 > ⋯ > g N {{g}_{1}}>{{g}_{2}}>\cdots >{{g}_{N}} g1>g2>>gN
2)初始化可用的子信道数目, N ∗ = N {{N}^{*}}=N N=N
3)计算注水常量, K = ( P T + Γ G ) / N K=\left( {{P}_{T}}+\Gamma G \right)/N K=(PT+ΓG)/N G = ∑ n = 1 N 1 g n G=\sum\limits_{n=1}^{N}{\frac{1}{{{g}_{n}}}} G=n=1Ngn1
4)计算第 N ∗ {{N}^{*}} N个子信道分配的功率, p N ∗ = K − Γ / g N ∗ {{p}_{{{N}^{*}}}}=K-\Gamma /{{g}_{{{N}^{*}}}} pN=KΓ/gN
5)若 p N ∗ ≤ 0 {{p}_{{{N}^{*}}}}\le 0 pN0,则 G = G − 1 / g N ∗ G=G-1/{{g}_{{{N}^{*}}}} G=G1/gN N ∗ = N ∗ − 1 {{N}^{*}}={{N}^{*}}-1 N=N1 K = ( P T + Γ G ) / N ∗ K=\left( {{P}_{T}}+\Gamma G \right)/{{N}^{*}} K=(PT+ΓG)/N
6)计算最终的功率分配和比特分配
p n = { K − Γ / g n     n = 1 , 2 , ⋯   , N ∗ 0                 n = N ∗ + 1 ⋯   , N {{p}_{n}}=\left\{ \begin{aligned} & K-\Gamma /{{g}_{n}}\ \ \ n=1,2,\cdots ,{{N}^{*}} \\ & 0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ n={{N}^{*}}\text{+}1\cdots ,N \\ \end{aligned} \right. pn={KΓ/gn   n=1,2,,N0               n=N+1,N b n = log ⁡ 2 ( 1 + p n g n Γ ) {{b}_{n}}={{\log }_{2}}\left( 1+\frac{{{p}_{n}}{{g}_{n}}}{\Gamma } \right) bn=log2(1+Γpngn)
接下来,可以对上述过程进行仿真,这里给出仿真的条件

参数名称参数值
信道个数64
误比特率(BER) 10 − 3 {{10}^{-3}} 103
总发射功率1
信道类型瑞利衰落信道
平均信噪比20dB

实验的结果如下:
在这里插入图片描述

可以看出信道质量好的子信道分配较多的功率和比特,信道差的子信道分配较少的功率和比特,这也和注水的原理相一致。

实验一代码:

clc;
close all;
clear; 
%% 初始化
Ptsum=10;                               %总传输功率
noise=[2 3 4 1 3 4 3 2];             %噪声功率
N= length(noise) ;                    %信道个数
[noise_sorted,index]=sort(noise); 
for p=length(noise_sorted):-1:1 
    T_P=(Ptsum+sum(noise_sorted(1:p)))/p; 
    Input_Power=T_P-noise_sorted; 
    Pt=Input_Power(1:p); 
    if(Pt(:)>=0)
        break 
    end 
end 
power_alloc=zeros(1,N); 
power_alloc(index(1:p))=Pt;                                %分配的功率
capacity=sum(log2(1+power_alloc./noise));   %信道容量
for ii =1:length(noise) 
    g(ii,:)=[noise(ii),power_alloc(ii)]; 
end 
bar(g,'stack'); 
legend ('Noise Level','Power Level') 
ylabel('Noise & Power Level','fontsize',12) 
xlabel('Number of Channels (N)','fontsize',12) 
title('Power Allocation for Waterfilling Alogorithm','fontsize',12) 

实验二代码:

clear;
close all;
clc;
%% 初始化参数
N_subc=64;                              %子载波数目
BER=1e-3;                                %目标误比特率
gap=-log(5*BER)/1.5;                %信噪比间隙(dB)常量,采用QAM调制时的近似表达式
P_av=1/N_subc;                        %每个子载波的平均功率
Ptsum=P_av*N_subc;                 %总发射功率
SNR_sub=20+20*(rand(1,N_subc)-0.5);   %平均信噪比20dB
noise=P_av./10.^(SNR_sub./10);             %每个子信道的噪声功率
%% 仿真瑞利衰落
hn=random('rayleigh',1,1,N_subc);         %子载波增益
gn=hn.^2./noise;
%% 初始化可用子载波数
N=length(N_subc);
%% 初始化分配的功率
[gain_sorted,dt]=sort(gap./gn);                 %对增益进行排序
for p=length(gain_sorted):-1:1 
    T_P=(Ptsum+sum(gain_sorted(1:p)))/p;   %计算注水线
    Input_Power=T_P-gain_sorted;                 %进行功率分配
    Pt=Input_Power(1:p); 
    if(Pt(:)>=0)                                     %所有子信道的功率都大于0,分配完毕
        break 
    end 
end 
power_alloc=zeros(1,N); 
power_alloc(dt(1:p))=Pt;                        %注水法分配的功率
bit_alloc=log2(1+power_alloc./noise);    %注水法分配的比特
%% 绘图
figure(1);
subplot(311)
stem(SNR_sub);
ylabel('SNR average(dB)')
set(gca,'ytick',[-10:10:30])
subplot(312);
stem(power_alloc);
ylabel('Power allocation(W)')
ylim([0 0.03])
subplot(313);
stem(bit_alloc);
ylabel('Bit allocation(bit)')
ylim([0 12])

参考文献:

[1]蒋留兵,杨昌昱,李卓伟,韦洪浪,许腾飞.基于注水原理的快速功率和比特分配算法[J].微电子学与计算机,2014,31(03):86-88+93.
[2]赵新凤. OFDM系统动态资源分配算法研究[D].山东大学,2011.
[3]张冬梅,徐友云,蔡跃明.OFDMA系统中的功率与比特高效分配算法[J].通信学报,2008(04):108-113.
[4]张莉. OFDM自适应资源分配算法研究[D].南京航空航天大学,2006.

  • 14
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值