☰
RRU中的数字预失真:从多项式到神经网络的功放线性化演进
2026/10/3 14:57:21 网站建设 项目流程

1. RRU里为什么要装一个“反向失真”模块

1.1 功放非线性和记忆效应带来的问题

在基站侧的RRU(Remote Radio Unit,射频拉远单元)里,功率放大器(PA)是整个发射链路中最“不听话”的器件。它要在给定的直流功耗下,把几毫瓦甚至几十毫瓦的射频信号放大到几十瓦的输出功率,同时又不能把信号搞坏。

问题在于,功放天生是非线性的。输入功率较小的时候,它接近一个线性放大器,增益基本恒定;但一旦进入功率饱和区,增益就会压缩,甚至出现显著的相位偏移。这种失真反映在频域上,就是发射频谱的邻道泄漏比(ACPR)恶化,信号在邻频上长出“肩膀”;反映在时域上,就是调制信号的误差向量幅度(EVM)变差,星座点糊成一片。到了5G和5G-Advanced时代,信号带宽普遍是100MHz甚至200MHz起跳,调制阶数到64QAM/256QAM,功放对信号历史和热状态的“记忆效应”也变得更加明显。

记忆效应这词听着玄乎,其实很好理解:功放此刻的输出,不只是由此刻的输入决定,还和之前一段时间内的输入历史有关。这就像一个人喝了三杯咖啡之后打嗝——现在的嗝里有一部分反应的是五分钟前那杯咖啡的余味。射频器件里的电容充放电、自热效应、偏置网络的低频响应,都会造成这种记忆效应。对线性化系统来说,记忆效应意味着“只看当前瞬时输入做查表补偿”的老办法不够用了。

1.2 DPD的基本框图与根本任务

数字预失真(DPD,Digital Pre-Distortion)做的事情,是在数字域里人为构造一个“与功放失真特性相反的器件”放在功放前面。也就是说,让信号先经过一个预失真器,产生和功放失真镜像的畸变,然后一起进入功放,经过非线性放大后,输出端反而得到线性放大、没有失真的信号。

想象一下你对着一个哈哈镜讲话,声音会变得奇怪。DPD就是事先准备一个“反向哈哈镜”,让你的声音在经过正向哈哈镜之后,听起来重新恢复正常。基带侧对I/Q信号做处理,把这个反向特性掐在数字域,比在射频域用负反馈或者模拟预失真容易实现得多,精度也高得多。

一个典型的RRU里,DPD模块位于数字前端(DFE)的信号调理链路中,常见顺序是:削峰(CFR,Crest Factor Reduction)→ 数字预失真(DPD)→ DAC → 上变频 → 功放。CFR先把信号的峰均比(PAPR)压下来,因为峰均比太高会逼迫功放回退到低效率的工作点;DPD再把功放的非线性拉回来,让功放可以工作在更靠近饱和区的效率点。

1.3 线性化指标:ACPR、EVM,以及标准里到底卡多严

判断一个DPD做得好不好,业内看得最多的是两个指标:ACPR和EVM。

  • ACPR(邻道泄漏比):主信道信号功率与相邻信道泄漏功率的比值,单位dBc。3GPP对基站发射机的ACPR要求通常在-45dBc到-50dBc左右(取决于具体频段和信道带宽),这意味着邻信道泄漏的功率要比主信道低四个到五个数量级。
  • EVM(误差矢量幅度):发射信号与理想星座点之间的偏差,5G NR里256QAM通常要求EVM不劣于3.5%(不同调制阶数要求不同,QPSK能放宽到17.5%)。

不加DPD的时候,一个AB类功放在额定回退功率点附近,ACPR可能只有-30dBc到-35dBc,离标准差的这10到15dB,就是DPD的发挥空间。做得好,ACPR能压到-50dBc以下,同时功放平均输出功率可以比纯回退方案高出2~3dB——这意味着同样的功放,能多输出近一倍的功率,这对运营商来说就是实打实的覆盖和成本收益。

2. 多项式时代的建模逻辑:从Volterra到记忆多项式的妥协

2.1 Volterra级数:一个理论上完备但工程上不可用的大全套

最早被认真考虑用于功放行为建模的数学工具,是Volterra级数。它本质上是把线性系统的冲激响应概念推广到非线性系统:输出不再只是输入的一次卷积,而是输入多次幂的卷积组合。

一个离散Voterra模型的输出可以写成:

y(n) = h₀ + Σ h₁(i₁)·x(n-i₁) + ΣΣ h₂(i₁,i₂)·x(n-i₁)·x(n-i₂) + ΣΣΣ h₃(...)·x(n-i₁)·x(n-i₂)·x(n-i₃) + ...

每一阶对应一套多维卷积核。理论上,只要阶数取得够高、记忆深度取得够长,Volterra级数可以任意逼近一大类记忆非线性系统。但问题也出在这里:系数的数量随阶数和记忆深度指数爆炸。一个简单的三阶、每阶记忆深度10的模型,就有上千个系数需要估计。在实际系统的实时运行里,光是把这些系数落成硬件乘加运算,就足够把FPGA的DSP资源榨干,更别说系数的自适应辨识算法要在线迭代。

2.2 记忆多项式/GMP:把级数砍到能实时算

工程上的首个突破是“记忆多项式(MP,Memory Polynomial)”。它的思路很直接:只保留Volterra核中对角线附近的分量,即每一阶只用一个一维卷积序列来描述,模型简化为:

y(n) = Σ_{m=0}^{M} Σ_{k=1}^{K} a_{k,m} · x(n-m) · |x(n-m)|^{k-1}

其中M是记忆深度,K是非线性阶数,乘数项从原来的多维核退化成二维系数矩阵。好处一眼就能看出来:系数数量从指数级降到(M+1)×(K+1)级别。工程上常见的配置是K取5到11(只用奇数阶,因为偶数阶产生的频谱分量通常可以忽略),M取3到5,系数规模落在几十到一两百之间,实时处理完全可行。

再往前走一步,就是广义记忆多项式(GMP,Generalized Memory Polynomial)。MP只考虑“当前时刻输入”的历史项,忽略了“不同时刻输入之间的交叉记忆”,GMP在此基础上加了滞后项(lag)和超前项(lead),把模型扩展成:

y(n) = Σ_{m=0}^{M_a} Σ_{k=1}^{K_a} a_{k,m} x(n-m)|x(n-m)|^{k-1} + Σ_{m=0}^{M_b} Σ_{l=1}^{L_b} Σ_{k=2}^{K_b} b_{k,m,l} x(n-m)|x(n-m-l)|^{k-1} + Σ_{m=0}^{M_c} Σ_{l=1}^{L_c} Σ_{k=2}^{K_c} c_{k,m,l} x(n-m)|x(n-m+l)|^{k-1}

中间一项抓住历史输入对当前输出的交叉调制,后一项抓住超前项对当前输出的影响(通常和包络对齐、时延估计有关)。代价是系数数量比MP翻了大约二到四倍,但对功放记忆效应的拟合精度提升明显。做5G宽频段功放时,GMP几乎是多项式模型里的标配。

2.3 系数辨识的最小二乘玩法

系数怎么求出来?工程上最常用的是最小二乘(LS)估计。前提是要有一条反馈通路:DAC发射信号的同时,RRU内部的反馈ADC会耦合一部分功放输出信号回来,经过下变频、采样后得到y(n)。把DPD模型写成一个线性方程组Y = Φ·A,其中Φ是输入信号构成的回归矩阵(包含各阶非线性项和记忆项的基函数),A是待求解的系数向量。然后直接套用Moore-Penrose伪逆:

A = (ΦᴴΦ)⁻¹ · Φᴴ · Y

这套方法看着简单,但落地时会遇到两个工程问题。第一个是矩阵条件数:Φ的列向量之间如果有强相关性(比如高阶幂和包络信号之间接近线性相关),正规方程会病态,解出来的系数在数值上极不稳定。常见缓解办法是加Tikhonov正则化项,即求解:

min ||ΦA - Y||² + λ||A||²

λ选得太小,正则化不起作用;选得太大,模型误差变大。经验上λ取1e-5到1e-2之间,然后根据仿真对比EVM和ACPR来微调。第二个问题是自适应更新:功放的工作状态会随着温度、供电电压、平均功率变化而漂移,DPD系数必须在线跟踪。行业里的主流做法是间接学习架构(Indirect Learning Architecture),把反馈信号作为输入、发射信号作为期望输出,估算预失真器的系数,再周期性地把新系数同步到前向链路的DPD模块中。

2.4 多项式模型的边界

多项式模型统治了DPD领域将近二十年,但它有几个天生弱点。

第一个弱点是外推能力差。多项式拟合本质上是“在已知数据点之间插值”,一旦功放的工作状态偏离了训练数据覆盖的范围(比如温度骤变导致偏置点漂移),高阶多项式的拟合曲线就会剧烈振荡,预失真效果快速恶化。这就像用一段高次多项式去逼近一条缓变曲线,边界处的龙格现象会让曲线疯狂甩尾。

第二个弱点是高阶非线性与强记忆效应之间纠缠不清。功放越靠近饱和区、信号带宽越宽,模型的交叉项越复杂。要硬逼记忆多项式去拟合,阶数和记忆深度只能往上涨,系数规模的膨胀很快又回到Volterra那个“算不动”的老路上。

我在实际项目中遇到过一种典型场景:一个平均功率40W的氮化镓功率放大器配上200MHz带宽的OFDM信号,用GMP模型做DPD,K=9、M=5、lag/lead各3组,已经能压到-48dBc。但同一套系数从冷开机状态跑到功放外壳温度90°C时,ACPR悬崖式掉到-38dBc。加大正则化、提高更新频率,只是让训练数据覆盖范围变宽,并没有真正解决功放行为随环境变化这个物理问题。这也是后来神经网络方案最吸引人的地方:与其手工设计基函数去逼近未知特性,不如让模型自己去学。

3. 神经网络的介入:改方程还是改误差面

3.1 为什么传统多项式在高带宽和宽温下吃力

5G时代面对的场景,本质上把“功放行为复杂性”推到了一个多项式不好使的区间。一方面,200MHz带宽下,几十乃至上百个载波聚合让时域信号包络变化非常快,功放的瞬时热状态、偏置网络的有限带宽都成了不可忽略的记忆源;另一方面,为了效率,功放厂商越来越多采用Doherty架构,这种架构有两个(甚至三个)不同工作状态的放大单元叠加,拐点处的行为在数学上很尖锐,光靠多项式阶数堆上去效果很差。

这些年在实验室里不止一次看到过这样的现象:GMP模型系数数量已经加到三四百个,模型的ACPR预报精度还是上不去,而硬件资源几乎到头了。此时回头看神经网络方案,吸引人的地方恰恰是它不再要求工程师“猜”模型结构,而是把基函数的选择交给数据去学。

3.2 行为建模 vs 直接预失真:神经网络怎么“插入”链路

神经网络在DPD里的落地方式大致有三条路线。

路线一是替代行为模型:先离线训练一个神经网络,让它精确预测功放的输出ŷ(n),然后用这个模型去求预失真信号。你可以把它看作一个高精度的功放仿真器,用于在离线环境中做逆向求解,或者先生成预失真查找表,运行时查表输出。

路线二是直接学习逆模型:在间接学习架构下,把功放实际输出y(n)作为模型的输入,把原始发射信号x(n)作为期望输出,训练网络学习功放的逆特性,然后把这个逆模型直接放在前向链路里作为预失真器。这条路线工程上最直接,我见到的商用方案里也最多用这种。

路线三是神经网络的“混合联合”:用一个可微的深度网络作为功放模型,反向传播时同时调整预失真网络的参数,形成一个发射链路端到端优化的闭环。这条路线学术上很漂亮,但工程上受限于反馈通路的时延抖动和FPGA上的训练能力,目前跑通的生产级案例还不多。

3.3 MLP/LSTM/CNN在DPD里的实际分工

我梳理一下目前文献和实际板上应用里,几类神经网络分别扮演什么角色。

  • 前馈MLP(多层感知机):最常见的DPD网络结构。输入层通常是延时对齐后的I/Q样本向量(比如当前样本和过去3到5个样本),还可以把包络幅度、包络相位作为特征拼进去。隐藏层一到三层,每层几十个到一两百个神经元,激活函数用ReLU或tanh。它的优点是没有时序反馈结构,前向推理时延很低、流水线实现简单,适合硬件部署。
  • RNN/LSTM:核心卖点是对记忆效应的建模能力。功放的状态依赖过去的输入历史,这对RNN来说是天然的“时序记忆”。我在文献里见到过用LSTM网络把记忆深度做到20到30个样本,这对宽带信号里的长时记忆效应很有价值。缺点是训练复杂、推理时延偏高、反馈通路训练不稳定,生产环境里用得比MLP少,但作为行为模型做离线仿真很流行。
  • CNN(卷积神经网络):一般是把一维I/Q信号序列做成多个通道(时间×特征)再做卷积,用卷积核的尺度过粗粒度抓局部时序特征。严格来说,CNN在DPD上的效率不一定比MLP有优势,因为功放的记忆效应并不是平移不变的那种“空间局部性”。更多时候CNN被用于把输入信号预处理成一个多分辨率特征表示,再接全连接层。我没有把它当主力方案,但如果要做多载波、多频段场景的特征工程,CNN可以作为提取器用。

一个很直觉的对比是:多项式模型像“手写板”——工程师基于物理知识手动画出基函数族,再拟合系数;神经网络像“自动编码器”——框架给定,基函数是什么由数据决定。代价是网络训练的数据量、算力要求远高于最小二乘拟合。

3.4 数据驱动的训练流程和在线更新

无论选哪类网络,落地的训练流程都能总结成几步。

第一步,采集数据。从反馈ADC拿功放输出的I/Q样本,从发射链路拿预失真前的原始I/Q样本,两者要做严格的时间对齐(deskew)。对齐不准,后面的训练全白费。典型的做法是用相关法先粗对齐,再用小数倍时延估计精对齐,精度要到1/16采样周期量级。

第二步,构造样本集。把I/Q序列切成训练窗,每个样本的输入特征通常是带时延的I/Q向量(加上包络和相位特征更稳妥)。注意,如果直接用相邻样本切窗,会引入强相关性,训练集要打乱后分成训练/验证集,验证集用来监测过拟合。

第三步,选损失函数和优化器。做回归任务,均方误差(MSE)是最常见的选择。也可以用加权MSE,把信号包络的高峰值区域权重调高,因为峰值的失真贡献了ACPR里最关键的邻道分量。优化器选Adam或者RMSprop,学习率从1e-3量级起步,训练中逐步衰减。

第四步,在线更新策略。这里和多项式时代差异很大。多项式用LS辨识可以每个时隙(几毫秒到几十毫秒)直接更新;神经网络的在线训练代价太高,不能每个时隙全量重训。工程上普遍采用“离线训练+在线微调”的组合:先在产线和实验室积累大量不同温度、不同频点的数据,训练一个能覆盖范围较广的基模型;上线后只在温度漂移或功率跳变超过阈值的时刻,用一小批新数据做几步梯度微调,或者干脆在相邻工作点之间切换基模型参数。说白了,就是把NN当成一组“线性模型快照”的管理者,而不是试图在DSP上实时跑回来的训练过程。

4. 落到RFSoC/FPGA上的那些坑

4.1 实时性约束与硬件资源博弈

算法再好看,到了RRU里都得过一道“硬算力”的关。DPD的工作采样率通常是信号带宽的5倍左右——100MHz带宽的信号,DPD部分采样率常常跑到500MHz以上,每个采样点要在板卡上做完预失真计算加上系数管理,留给单样本的处理时延只有纳秒到微秒量级。

现在的商用RRU里,DPD大多跑在FPGA或者专用的DFE芯片上。以Xilinx的RFSoC、Versal ACAP系列为例,它们把ADC、DAC、数字前端加速器集成到一颗芯片上,方便在单芯片内完成DPD的闭环。Xilinx官方也有DPD IP核,传统上用的就是多项式/GMP结构,IP核里把矩阵求逆、系数更新、前向处理全部硬化。做硬件时你马上会感受到两个约束。

第一个是DSP资源。多项式DPD的乘加结构很规则,用DSP48E2这类硬核乘加器可以流水化地跑满。GMP的交叉项变多,DSP资源消耗成倍上涨,到了Versal平台上还有专门的AI引擎(AI Engine),可以用来做神经网络前向推理。AIE可以做高效矩阵运算,对MLP的推理非常合适,但要打通数据搬运和同步机制,比FPGA逻辑里写代码麻烦得多。

第二个是时延同步。DPD是一个闭环系统:发射信号经过预失真、功放、反馈ADC采回来,再辨识系数、更新前向链路的预失真参数。这条环路上任一环节的时延变化,都会让模型失配。

4.2 采样率、通道同步、反馈通路

反馈通路是整个DPD系统里最容易出问题的地方,没有之一。

一个典型的问题:DAC的发射通路上,信号经过模拟滤波器、上变频、驱动放大器再到功放输出,回程信号还要经过耦合器、衰减器、下变频到ADC,这条物理链路的时延不是整数个采样周期。做DPD训练时,预失真器输入样本x(n)和功放输出样本y(n)的时间差如果相差半个采样周期,相位误差就会直接损坏预失真效果。所以工程上必须有小数时延校准(fractional delay correction),做法是估计出时延偏差后用插值滤波器做补偿。

另一个坑是反馈ADC的启动和漂移。反馈ADC和DAC之间的时钟如果不是同源锁定的,采样时延会随时间漂移,导致训练出来的系数一会对一会不对。RRU设计里通常要求反馈ADC和发射DAC同源时钟,或者在每个DPD校准周期间隔内自动做一次时延重估。

还有一个常见的低级错误:没有做反馈信号和发射信号之间的功率归一化。反馈通路的耦合器和衰减器会在某种温度或频率下产生增益波动,训练数据里幅度如果偏了,LS或者NN训练出来的模型增益就不对。解决办法是做全通道的IQ增益/相位校准,把反馈信号归一化到与发射信号同等功率水平。

4.3 Xilinx DPD IP与自研神经网络实现的对比

这里插一段选型经验。如果你公司没有专门做算法IP的团队,而项目周期又紧,那么直接用FPGA厂商的DPD IP核是合理的。Xilinx DPD IP核心支持GMP/GMP-like架构,配合其本身在RFSoC内部的反馈校准、时延追踪等一套流程,开箱即用的效果比自研稳定很多。代价是IP核的可配置项有限,想上神经网络结构基本不可能。

如果决定自研神经网络DPD,我给你的建议是:

  • 先用CPU/GPU把算法完整跑通,再用Versal平台的AI Engine(AIE)做前向推理,主要理由是AIE支持的矩阵运算效率远高于FPGA可编程逻辑;
  • 把神经网络的前向推理做成多级流水线,训练更新放在空闲间隙,不要和前向处理抢资源;
  • 在FPGA的PMC(平台管理控制器)里单独留一片核间通信用的共享内存区,避免DPD数据通路和CPU控制通路抢占带宽引发时延波动。

为了方便对比,我把多项式方案和神经网络方案的关键差异整理成下表。注意这只是典型的工程配置,具体数字依实际功放和信号带宽变化:

维度GMP多项式方案MLP神经网络方案
系数/参数量几百个以内数十万到数百万个参数
训练开销LS拟合,毫秒级周期更新需大样本GN/GPU离线训练,在线只能微调
推理开销固定乘加,FPGA轻松矩阵乘加,需AIE或FPGA矩阵引擎
对带宽和记忆效应的适应性中等,配置复杂强,可处理长时记忆
对温度漂移的稳定时间依赖快速LS重估,短期尚可依赖基模型快照切换,物理上更接近状态切换
部署难度低,可买成熟IP高,无现成IP,需要自研推理加速链路

4.4 现场环境的温度漂移和自适应切回

前面提过,功放对温度特别敏感。基站在户外环境,夏天白天外壳温度能到70°C以上,冬天凌晨可以零下。如果DPD系数不更新,几个dB的ACPR劣化很常见。

多项式方案的处理方式是持续做在线LS重估,每隔一段时间用反馈数据算一次新系数。如果数据质量差(比如正好赶上信号功率太低),算法经常把系数带偏,工程上要去设置“合法性检查”,比如系数模值超过阈值就抛弃本轮的更新结果,等下一轮。

神经网络方案在这个问题上更麻烦:你不能在板卡上直接跑完整训练,但你可以把现场采集的数据周期性地送回服务器(或者用RRU本地的一块NPU做离线重训),然后在远程/本地生成的新模型基础上,把网络权重整体替换。替换的时候要做一个平滑过渡,避免预失真心跳突然改变导致功放信号产生瞬态失真。工程上常用“系数交叉淡化”——在一小段时间内,新旧模型各占50%、70%、90%地逐步切换。

我在项目里踩过的一个坑:本来是TDD制式的RRU,上下行间隙只有几十微秒,本来想利用这个间隙做模型切换。结果发现切换瞬间的瞬态杂散正好落在邻道,ACPR反而更差。后来改成“在时隙忙时段用多项式DPD稳住,在时隙边界的几个符号周期内做神经网络模型无缝切换”,才解决了这个瞬态毛刺问题。

5. 实测对照:多项式与神经网络的实际差别

5.1 实验室波形的ACPR对比

我做过一组对照测试,用的是一颗氮化镓Doherty功放,信号是100MHz带宽的5G NR TDD帧,平均功率回退8dB。测试条件保持同一台仪器、同一块RFSoC板卡,只切换DPD模型架构。

GMP模型的配置:K=9,M=5,lag和lead项各3组,系数约180个。在温度为25°C的恒温箱里,不加DPD时ACPR为-32dBc,GMP压到-50dBc,EVM从8%压到1.5%。

MLP模型的配置:输入用当前和过去各4个I/Q样本(共10维特征),两层隐藏层各64个神经元,ReLU激活,输出层2个神经元对应预处理后的I/Q信号。同样的测试条件下,MLP压到-52dBc,EVM到1.2%。

从ACPR的绝对数值看,MLP只是好了一点点。但真正拉开差距的场景是温度和电压变化:恒温箱从25°C升到85°C的过程中,GMP在40°C就出现ACPR劣化到-46dBc,到85°C时已经掉到-42dBc;而MLP在模型覆盖的温度区间内基本稳定在-50dBc附近,直到超过90°C才开始明显掉点。这说明神经网络模型的泛化能力在跨越工作点时确实更强,但也说明了它需要更完整的“工作状态覆盖”——你得预先在多个温度和功率点上都采过数据。

5.2 计算量、功耗、时延的账本

我再用一组实测数据来算笔账。同一个RFSoC平台上,GMP前向处理每采样点大约需要1200次乘法;MLP(两层各64神经元)前向处理每采样点大约需要1400次乘法,看起来差不多。但神经网络方案一旦涉及到在线验证和模型切换,就需要额外的存储资源(网络参数快照、中间激活缓存)和调度开销。实测下来,神经网络方案的整体功耗比GMP方案多了约15%,DSP利用率高了差不多20%。

时延方面,GMP的前向逻辑能做成绝对确定的流水线,端到端时延是几纳秒级别,几乎可以忽略。MLP在FPGA上用查找表和DSP阵列做矩阵乘法,时延也在几十纳秒量级,尚可接受。真正容易超时的反而是LSTM这类带反馈时序的网络,一个样本的推理依赖上一个样本的隐藏状态,流水线不好打,实际吞吐率可能只有MLP的一半。

所以我的看法是:如果目标是降低ACPR到某个指标线,神经网络并不比优化过的GMP有压倒性优势;神经网络的真实价值是在更宽的工作状态范围内保持稳定,或者说是减少现场人工校准的次数。

5.3 什么时候坚持用多项式,什么时候咬牙上神经网络

这个问题没有非此即彼的答案,我结合项目经验给一个选型建议:

  • 如果功放是单频段、信号带宽小于80MHz、工作温度变化有限(比如室内小站),GMP多项式完全够用,成本最低、成熟度最高、风险最小。别折腾神经网络。
  • 如果信号带宽超过160MHz,功放常年在接近饱和的工作点跑,且要求跨宽温范围稳定输出,那么神经网络的泛化能力值得投入。注意,我说的“投入”不只是算法团队写个Python模型,还包括硬件推理引擎、模型切换机制、产线标定流程的预算。
  • 如果项目周期很紧,评估一种折中路径:先用GMP做主力DPD上线验证硬件链路,同时在后台用离线采集的反馈信号训练神经网络行为模型,作为备用高阶方案。这样就算主链路出问题,前面所有采集链路、对齐流程、自适应调度框架都已经被验证过,换成神经网络时改动面最小。

5.4 工程建议与踩坑总结

最后把我在这个方向上踩过的坑和校验习惯列一下,希望你能少走点弯路。

第一个坑:数据对齐没做到位,训练出来的神经网络在验证集上表现很差。排查时先看反馈信号和发射信号的互相关峰是不是足够尖锐,峰值不尖锐说明时延估计有偏差,下面的所有步骤都是白费。

第二个坑:训练数据里没有覆盖功放的低功率状态。功放在低功率时接近线性,高功率时饱和,两个区域的特性差异很大。如果训练数据全是高功率满帧,模型对低功率回退区间的预测容易过度失真。合理做法是让训练集里包含不同平均功率、不同信号带宽、不同CCDF(互补累积分布函数)特性的数据块。

第三个坑:神经网络的泛化性并不意味着“一劳永逸”。我们一度以为训练好一个网络就能覆盖整个温度工作区,后来发现在某个特定频点附近的功放特性突然拐变了——那是一个不常被激励到的驻波点。解决办法是在产线标定时加入“频点扫描”流程,不同频点各存一份模型快照,现场按实际工作频点自动加载。

第四个坑:模型切换瞬态。神经网络的效果虽好,但切换时引起的瞬态失真比GMP系数更新更明显。GMP系数是连续估计的,天然有平滑的特点;神经网络权重是离散快照,切换动作本身就是一个阶跃扰动。建议在切换期间同步做一个2到3微秒的预失真系数线性插值,或者临时切回GMP模式,等信号稳定后再切到神经网络模式。

6. 围绕RRU的整链路实现:从算法仿真到版级验证

6.1 在MATLAB里先把闭环跑通

说完了算法本身,再讲讲我建议的工程推进路线。很多团队拿到这个需求后,直接跳到写FPGA代码,这是最危险的路径之一。神经网络DPD里面有大量的数据流、延迟对齐、系数更新策略问题,这些在FPGA里几乎是没法调试的——一个信号线接错了都能让你怀疑好几天。我的做法是先在MATLAB里建一个完整的闭环模型,把算法和“可观测性”先拉满。

闭环模型的组成大致如下:发射波形源(OFDM帧)、CFR、DPD模型、功放模型(用实测的S参数和功率扫描拟合)、反馈通道(加噪声、加时延、加IQ失衡),以及系数更新模块。这个模型一旦跑通,你就能在电脑上验证所有“边缘场景”:输入满帧、输入空闲时隙、温度跳变、时延漂移,都能在几分钟内跑完并检查ACPR/EVM。

在这个阶段,一个特别容易忽略但极其重要的点是反馈信号的“IQ失衡”建模。真实RRU的反馈通道,从耦合器、混频器到ADC,每一个环节都会引入增益不平衡和相位不平衡。如果你在MATLAB里不加入这个失真,直接训练神经网络,那么模型会把反馈通路的失真误判成功放的特性,现场一接上真实RRU就露馅。我的习惯是反馈通道默认加0.2dB增益不平衡、2°相位不平衡,再加一个轻微的直流偏置。

6.2 从模型到FPGA:先做半实物仿真,再上板

闭环模型通过后,下一步不是直接全量写RTL,而是先把关键部分做成半实物仿真。所谓半实物仿真,就是用一台上位机运行神经网络DPD的Python/C模型,真实功放的反馈数据通过FMC接口板卡传上来,在上位机完成训练和推理,再把生成好的预失真I/Q数据通过板卡回灌给DAC。

这一步能做很多事情:

  • 验证跨平台的数据类型精度:神经网络在PC上跑的是fp32,在FPGA上可能要用int16甚至int8定点化。通过半实物平台,你可以先固定PC端为定点化模型,看看性能和fp32的差距。
  • 验证模型切换和监控机制:在做主链路FPGA实现前,先在上位机模拟“时隙切换”“系数平滑过渡”“快照存储”等调度逻辑,逻辑没问题再固化到硬件。
  • 验证在线更新策略:实际上线后不可能把几万个训练样本全量传回服务器做重训,通常要设计滑窗缓存和触发重训的阈值条件。在上位机上把更新策略跑通,比直接上板调试成本低得多。

半实物仿真通过后,才建议进入真正的FPGA实现阶段。此时你已经把算法稳住了,剩下的是把矩阵乘法、激活函数、时间对齐模块、共享内存接口、流水控制状态机一一用RTL写出来。这个阶段的坑基本都是时序和资源问题,建议多利用厂商的HLS工具或者AI Engine编译器,把纯手写的RTL量压到最小。

6.3 RRU整机的产线标定与出厂一致性

无论你的DPD算法是GMP还是神经网络,产线标定都是一个“逃不掉的环节”。每台RRU出厂前,都要在固定的功放测试工位上完成一次标定,把DPD系数或者神经网络模型快照烧录进设备。这个过程中最麻烦的是“一致性”——同一型号的功放,个体之间存在一致性偏差(典型在±0.5dB增益、±2°相位),不能完全共用一套出厂标定数据。

神经网络方案在产线标定上比GMP有一个劣势:GMP的标定结果是一个小的系数矩阵,几百个浮点数,烧录非常轻量;神经网络的模型快照动辄几百KB到几MB,而且如果不同频点各存一份,总量会更大。好在现在的RRU普遍带有GB级存储器,这个容量本身不是瓶颈,瓶颈在于标定时间。

产线标定一台RRU的DPD参数,工时就是钱。GMP做一次LS标定,跑完一组多频点扫描大概几秒钟;神经网络要把多个工作点的数据都采集完,再送到训练服务器做离线训练,然后把生成的模型回传烧录,整个过程可能要等几分钟。为了压缩标定时间,一个可行做法是建立一个“预标定库”——在研发阶段把多个批次功放的通用模型训练好,产线只做一个快速的“针对每台的微调”,用几十秒的短数据做几步梯度下降。这样既保证个体匹配性,又不至于拖慢产线节拍。

这里还牵涉到一个出厂一致性的问题:神经网络模型的快照如果每台设备都不完全一样,那后续的软件升级、远程支持、设备故障分析都会变得复杂。我见过一个团队引入模型哈希校验机制——每次烧录前先对模型参数做哈希,和验算结果互相对比,确保存储链路不出错。听起来是个很不起眼的小细节,但能在现场排除很大一类“模型文件被截断”导致的功放门限告警。

6.4 从实验室到外场:远程监控与边界保护

DPD做进了RRU,不是上线就完事了。外场环境里,信号的业务模式、温度波动、供电质量,和实验室里的理想条件差异很大。神经网络方案尤其需要一套远程监控机制来兜底。

我会在RRU的固件里加两类保护逻辑。第一类是“模型失效检测”——持续监测DPD实际补偿后的ACPR和反馈信号与期望信号的误差,如果误差超过域值,自动切换回GMP模式或者上一个可靠的模型快照。这里的关键是ACPR估计本身要稳定,你不能在信号本身就是空闲时隙、瞬时功率很低的时候误触发切换。

第二类是“参数合法性检查”——和GMP时代检查系数模值同理,神经网络每个权重都应该在一个合理范围内。可以事先从训练数据的权重分布中算出均值±3σ的边界,现场如果发现某个权重超出边界,立即把整个模型标记为“可信度下降”,触发重新标定请求,而不是继续让劣化模型工作。

我自己在外场踩过的最深的一个坑,是和运营商网管系统的配合。DPD的工作状态(当前用GMP还是神经网络、ACPR多少、温度多少)如果能上报到网管平台,运维人员就能在故障前主动定位。然而这个上报周期往往是秒级甚至分钟级的,而DPD的失真劣化可能在几个符号周期内就产生干扰。所以远程监控的意义不在于实时控制,而在于故障根因分析和预防性维护——从现场的故障日志里发现“温度高的时候ACPR突然劣化”这种规律,才是它最大的价值。

7. 我个人在实际项目里的体会

做了这么多年RRU的线性化工作,我越来越觉得DPD这件事已经“从手艺活变成了数据活”。十几年前调DPD,老师傅看一眼频谱仪上的波形,就知道加几阶多项式、调哪个系数;现在面对200MHz带宽和GaN Doherty功放,哪怕是资深专家也不可能用手工调整去碰那几百个参数。算力上去了、数据多了、模型复杂了,反而要求工程师对信号处理和硬件实现有更全面的理解——你要懂功放物理特性,要懂算法收敛性,还得懂FPGA时序和产线节拍。

如果你正在评估要给自己的RRU换神经网络DPD,我最想说的建议是:不要被“AI”两个字吓到,也不要被“AI”两个字冲昏头脑。先拿GMP把链路跑通,再把采集的数据用Python快速验证一下神经网络的增益,然后一步步向硬件靠拢。很多项目死在“一步到位”上——直接在FPGA里写了一个庞大的神经网络推理引擎,结果链路数据对齐问题没解决,天天在那里调时序,算法本身的优势完全体现不出来。

最后再分享一个小习惯:我习惯在每次外场模拟测试后,把功放的AM/AM曲线和AM/PM曲线都打印出来看一眼。不管用的是什么模型,看到曲线在哪个功率点开始压缩、在哪个频点出现回滞,就能立刻判断DPD效果好不好,而不是等到报文里的ACPR指标下降之后才反应过来。这条经验帮我在不止一个项目里提前发现了问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询