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/γᵢ > μ),那这个地方就不注水(不分配功率)。
我画个图帮你理解:
你看,信道好的子信道(地势低)分配了更多功率(水深),信道差的(地势高)分配较少,而有些信道(地势高于水面)干脆不分配。
3.4 单用户场景:具体怎么算?
单用户场景是最简单的。假设有 4 个子信道,信道增益噪声比分别为:
| 子信道 | γᵢ (dB) | 1/γᵢ (线性) |
|---|---|---|
| 1 | 10 | 0.1 |
| 2 | 5 | 0.316 |
| 3 | 0 | 1.0 |
| 4 | -5 | 3.162 |
总功率 P_total = 1W。我们需要找到水位线 μ,使得所有分配功率之和等于总功率。
计算步骤:
- 假设所有子信道都注水:Pᵢ = μ - 1/γᵢ
- 求和等于总功率:Σ(μ - 1/γᵢ) = P_total
- 解出 μ:μ = (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 的余量。
个人习惯:做系统级仿真时,我会先用注水算法算一遍理论上限,再用实际算法对比。这样能快速定位算法损失在哪里。
好了,单用户注水算法就讲到这里。核心就一句话:把功率往好信道上倾斜,直到所有「水深」加地势高度相等。这个思想在多用户场景中同样适用,只是约束条件更复杂了。