从多项式到神经网络:DPD算法演进史及其在RRU中的工程实现
当你在享受流畅的5G高速下载或高清视频通话时,可能不会想到,支撑这一切的基站射频单元(RRU)内部,正进行着一场精密的“信号整形手术”。功率放大器(PA)作为信号发射前的最后一道关口,其固有的非线性特性就像一面哈哈镜,会让原本清晰的信号波形产生畸变,导致频谱泄露和信号质量下降。数字预失真(DPD)技术,正是矫正这面“镜子”的关键算法。它并非一成不变,其核心算法在过去二十年间,经历了一场从经典数学工具到现代人工智能方法的深刻演进。对于通信设备制造商和网络运营商的技术决策者而言,理解这段演进史,不仅仅是回顾技术发展,更是为下一代RRU的硬件选型、算法部署和性能权衡,寻找最坚实的决策依据。今天,我们就深入这场算法变迁的脉络,并聚焦于如何在资源受限的RRU硬件平台上,将这些精妙的数学与AI模型转化为稳定可靠的工程现实。
1. DPD算法演进的三级跳:从数学近似到数据驱动
DPD技术的核心目标始终如一:构建一个与功率放大器非线性特性“相反”的数字函数,对输入信号进行预处理,使得经过PA放大后的输出信号无限逼近理想的线性放大结果。然而,如何描述并逆向这个复杂的非线性函数,不同时代给出了截然不同的答案。
1.1 奠基时代:多项式模型的简洁与局限
在DPD技术的早期,工程师们从经典的数学工具箱中找到了武器——多项式模型,尤其是基于Volterra级数的记忆多项式。其思想直观而优美:将PA这个“黑盒”的非线性输入输出关系,用一个高阶多项式来近似。
# 一个简化的记忆多项式DPD模型示例(无记忆项)
def memory_polynomial_pd(x, coefficients):
"""
x: 输入信号(复数)
coefficients: 多项式系数,例如 [a1, a3, a5, ...] 对应奇数阶非线性项
"""
y = np.zeros_like(x, dtype=complex)
# 假设只考虑奇数阶非线性项(1, 3, 5阶)
for k, coeff in enumerate(coefficients):
order = 2*k + 1 # 奇数阶
y += coeff * x * np.abs(x) ** (order - 1)
return y
注意:实际工程中的记忆多项式模型复杂得多,会包含不同时延(记忆深度)的交叉项,以刻画PA的动态非线性特性。
这种方法的优势在于其数学透明和计算高效。系数可以通过最小二乘法等经典算法直接求解,在早期的FPGA或DSP上易于实现。我曾在一个旧款RRU项目中,仅用数百个逻辑单元和乘法器就实现了一个7阶的记忆多项式DPD,成功将ACLR改善了15dB以上。
然而,多项式模型的**“天花板”**也很明显:
- 模型失配:对于具有强记忆效应或复杂非线性轨迹的宽带PA(如GaN PA),多项式模型往往力不从心,需要极高的阶数才能勉强拟合,而这会带来数值不稳定问题。
- 参数冗余:高阶多项式包含大量交叉项,许多项对模型精度的贡献微乎其微,却占用了宝贵的计算资源。
下表对比了多项式模型在不同场景下的典型表现:
| 场景特征 | 多项式模型适用性 | 典型性能提升 (ACLR) | 资源消耗评估 |
|---|---|---|---|
| 窄带信号,记忆效应弱 | 优秀 | >20 dB | 极低 |
| 中等带宽(<40MHz),记忆效应中等 |
299



被折叠的 条评论
为什么被折叠?



