3. 注水算法原理:数学推导、物理意义与单用户场景

好,我们进入功率分配的核心算法——注水算法。说实话,我第一次接触这个名字时,还以为是给水管注水。后来才发现,这名字起得真形象。

3.1 为什么要用注水算法?

先问个问题:给定总发射功率,怎么分给各个子信道最划算?

你可能会想,平均分不就行了?嗯,我刚开始也这么想。但实际项目中,不同子信道的信道质量差异很大。有的信道信噪比高,有的低。这时候,把更多功率分配给信道质量好的子信道,能获得更高的总容量

说白了,就是「好钢用在刀刃上」。注水算法就是解决这个问题的数学工具。

核心思想:信道条件好的子信道多分配功率,信道条件差的少分配甚至不分配。

3.2 数学推导:从优化问题到注水公式

我们考虑一个单用户场景。假设有 N 个并行的子信道,每个子信道的信道增益为 |hi|2,噪声功率为 σ2

优化目标是:在总功率约束下,最大化总信道容量

数学上写出来就是:

max  Σ log₂(1 + Pᵢ · |hᵢ|² / σ²)
s.t. Σ Pᵢ ≤ P_total
     Pᵢ ≥ 0

这里 Pᵢ 是第 i 个子信道的分配功率。这是个典型的凸优化问题,用拉格朗日乘子法求解。

构造拉格朗日函数:

L = Σ log₂(1 + Pᵢ · γᵢ) - λ(Σ Pᵢ - P_total) + Σ μᵢ Pᵢ

其中 γᵢ = |hᵢ|² / σ² 是信道增益噪声比。对 Pᵢ 求偏导并令其为零:

∂L/∂Pᵢ = 1/(ln2 · (1/γᵢ + Pᵢ)) - λ + μᵢ = 0

根据 KKT 条件,当 Pᵢ > 0 时,μᵢ = 0。于是得到:

Pᵢ = 1/(λ · ln2) - 1/γᵢ

μ = 1/(λ · ln2),这就是我们常说的「水位线」。最终注水公式为:

Pᵢ = max(0, μ - 1/γᵢ)

个人经验:我在做 LTE 上行功率控制时,这个公式帮了大忙。但要注意,实际系统中 γᵢ 是估计值,不准的话注水效果会打折扣。

3.3 物理意义:为什么叫「注水」?

这个名字太形象了。你想象一个容器,底部高低不平——1/γᵢ 就是底部的「地势高度」。往容器里倒水,水面会保持水平,这个水平面高度就是 μ

每个位置的「水深」就是 Pᵢ = μ - 1/γᵢ。地势低的地方(信道好),水深(功率分配)就大;地势高的地方(信道差),水深就浅;如果地势高于水面(1/γᵢ > μ),那这个地方就不注水(不分配功率)。

我画个图帮你理解:

注水算法物理意义示意图 水面 μ 信道好 地势低 信道差 地势高 不注水 Pᵢ 子信道索引 i

你看,信道好的子信道(地势低)分配了更多功率(水深),信道差的(地势高)分配较少,而有些信道(地势高于水面)干脆不分配。

3.4 单用户场景:具体怎么算?

单用户场景是最简单的。假设有 4 个子信道,信道增益噪声比分别为:

子信道 γᵢ (dB) 1/γᵢ (线性)
1 10 0.1
2 5 0.316
3 0 1.0
4 -5 3.162

总功率 P_total = 1W。我们需要找到水位线 μ,使得所有分配功率之和等于总功率。

计算步骤:

  1. 假设所有子信道都注水:Pᵢ = μ - 1/γᵢ
  2. 求和等于总功率:Σ(μ - 1/γᵢ) = P_total
  3. 解出 μ:μ = (P_total + Σ(1/γᵢ)) / N

代入数据:

Σ(1/γᵢ) = 0.1 + 0.316 + 1.0 + 3.162 = 4.578
μ = (1 + 4.578) / 4 = 1.3945

检查每个子信道:

P₁ = 1.3945 - 0.1 = 1.2945
P₂ = 1.3945 - 0.316 = 1.0785
P₃ = 1.3945 - 1.0 = 0.3945
P₄ = 1.3945 - 3.162 = -1.7675  → 小于0,不分配

子信道 4 的 1/γᵢ > μ,所以不分配功率。需要重新计算:

去掉子信道4,N = 3
Σ(1/γᵢ) = 0.1 + 0.316 + 1.0 = 1.416
μ = (1 + 1.416) / 3 = 0.8053

P₁ = 0.8053 - 0.1 = 0.7053
P₂ = 0.8053 - 0.316 = 0.4893
P₃ = 0.8053 - 1.0 = -0.1947 → 小于0,也不分配

再去掉子信道 3,N = 2:

Σ(1/γᵢ) = 0.1 + 0.316 = 0.416
μ = (1 + 0.416) / 2 = 0.708

P₁ = 0.708 - 0.1 = 0.608
P₂ = 0.708 - 0.316 = 0.392

最终结果:

子信道 γᵢ (dB) 分配功率 (W)
1 10 0.608
2 5 0.392
3 0 0
4 -5 0

避坑指南:我曾经在项目中直接套用公式,没检查负功率,结果仿真结果完全不对。记住,注水算法必须迭代计算,每次去掉不满足条件的子信道,直到所有分配功率都为正。

3.5 注水算法的物理洞察

从上面的例子能看出几个规律:

  • 信道质量差异越大,注水效果越明显。如果所有信道质量一样,注水就退化成平均分配。
  • 总功率越大,水位线越高,更多信道能被「淹没」(获得功率分配)。
  • 噪声功率越大,1/γᵢ 越大,信道更难被注水。

嗯,这里要注意:注水算法给出的是理论最优解。实际系统中,信道估计误差、功率控制精度、调度延迟都会影响性能。我一般会在理论值基础上加 1-2 dB 的余量。

个人习惯:做系统级仿真时,我会先用注水算法算一遍理论上限,再用实际算法对比。这样能快速定位算法损失在哪里。

好了,单用户注水算法就讲到这里。核心就一句话:把功率往好信道上倾斜,直到所有「水深」加地势高度相等。这个思想在多用户场景中同样适用,只是约束条件更复杂了。


专注资料整理