注水算法是根据某种准则,并根据信道状况对发送功率进行自适应分配,对于具有较大(或较小)SNR的子载波,注水算法为其分配更多(或更少)的比特和功率,由此实现信道容量的最大化。而实现功率的“注水”分配,发送端必须知道CSI。
考虑具有Nuesd个子载波的OFDM系统,每个子载波间隔为△f。第k个子载波fk的信道容量为
其中,H[k]、P[k]和N0分别是第K个子载波的频率响应、发射功率和噪声方差。自拿到总容量为所有单个子载波容量之和。
如果Nuesd足够大,即△f足够小,以至于小于相干带宽,那么对于每个子载波k,可以认为H[k]是恒定不变的。换句话说,对于每个子载波k,SNR可以被近似为常数。给定子载波的SNR,对不同的子载波分配不同的功率,可以使系统的总容量最大化。
以上描述可以表示成最优化问题来求解,而该问题是一个凸优化问题,可以用拉格朗日方法来求解
即得到的结果为
根据这一结果,说明,除非P*[k]<0,子载波没有分配到功率;否则,每个子载波的功率和噪声信号比(NSR)之和都是相等的,即P*[k]+N0/|H[k]|2=1/λ=常数。根据这一算法,具有较大的SNR的子载波将被分配更多的发射功率。下图给出了上式中最优功率分配的示意图。
以子载波编号k为自变量的NSR N0/|H[k]|2可以被看一个不规则水箱的底部。如果向水箱中每个子载波注入P个单位的水,那么子载波n的水深为子载波获得的功率,1/λ为水面高度。因为通过向水箱中注水对这个算法进行描述,所以它被称为注水算法。如果水箱的底部高于水面,那么一定不会向子载波分配功率。实际上,这相当于条件差的信道不能传输数据。
注水算法代码如下:
由结果可以看出,用注水算法分配得到的信道容量比平均分配得到的信道容量要大,但是如前面解释的,通过将SNR考虑在内,能否最大化信道容量和最优化分配给每个子载波的发射功率和比特。这意味着,注水算法要求发射机能够完全知道每个子载波的信道状态信息。发射机和接收机必须通过反馈回路交换信道质量信息。然而,这些通常很难做到,尤其是在快时变的移动环境中。