搞通信系统的人,迟早都要跟CFR打交道。CFR这三个字母,全称是Crest Factor Reduction,中文叫信号削峰,或者叫峰值因子降低。从名字就能看出来,这活儿干的就是把信号的高峰值给“削”下去。我在做基站发射链路调试的时候,第一次看到频谱仪上那根高耸的谱线和邻道泄漏的杂散,才真正明白为什么每一代通信系统都绕不开这个模块。这篇算是基础篇,先把CFR是什么、解决什么问题、核心指标有哪些、以及最常见的几种实现思路讲清楚。
1. CFR到底是什么,为什么每个基站发射链路都需要它
1.1 从功放效率说起:信号质量与功耗的死结
任何一台发射机,最关键的器件就是末端的功率放大器(PA)。PA要同时干两件事:第一,把信号放大到足够的发射功率;第二,尽量不把信号“整坏”,也就是保证线性度。但这两件事天然矛盾,PA在线性区工作时,效率低得可怜,一大半的直流功率都变成了热量散发热量,只有一小部分变成射频输出功率;而一旦你把输入功率推高,让PA接近饱和区,效率倒是上来了,可放大出来的信号就开始出现严重的非线性失真,邻道泄漏猛增,信号误差向量幅度(EVM)急剧恶化。
那这个矛盾跟信号峰值有什么关系?关系大了。现代通信信号,尤其是OFDM体制的4G LTE和5G NR信号,都是由大量子载波叠加而成的。多个子载波在某一个瞬间相位对齐叠加,就会形成一个很高的瞬时峰值。这个峰值的功率,比信号的平均功率高出很多。我们用峰均比描述这种现象,英文是PAPR。拿一个20MHz带宽的LTE信号举例,99.9%概率处的PAPR通常在10到11dB左右,也就是说,信号峰值功率可以达到平均功率的10倍以上。
问题就在这:为了保证峰值不被“削平”失真,功放必须工作在一个很大的回退状态下,也就是把工作点压低,留出足够的峰值余量。回退越大,功放效率越低。为了放大一个效率很高的信号,结果功放本身工作在低效率状态,这本身就是巨大的浪费。基站里的功放是大功率器件,一个扇区的射频功耗可能高达几十瓦到上百瓦,如果效率提升10%,整站功耗能省下一大截。CFR就是来解决这个矛盾的:在信号进入功放之前,先把信号的高峰值压下来,降低PAPR,缩小峰均比,让功放可以更从容地工作在靠近饱和区的位置,同时又不至于因为峰值太大而过早失真。我刚接触这个点的时候,直观类比就是:信号像一辆满载货物的卡车,货物顶端有几根特别高的柱子,CFR就是把这几个柱子的尖尖锯掉一点,让货物整体高度更平均,这样卡车(功放)就能用更小的“余量”稳定跑起来。
1.2 CFR在发射链路中的位置和作用
在典型的数字发射链路里,CFR模块通常放在信源编码和DAC之间,具体点说,是在基带信号成型滤波之后、数字预失真(DPD)之前。它的输入是IQ两路数字基带信号,输出也是IQ两路数字基带信号,核心工作就是把信号的PAPR降下来。
之所以放在DPD之前,原因是DPD负责对功放的非线性做反向补偿,它需要看到的是一个“好处理”的信号。如果信号峰值过高,DPD本身的迭代稳定性和收敛精度都会受影响,而且CFR削峰产生的误差信号,也会跟着DPD一起被放大,如果DPD处理不好,削峰省的那么一点功率,反而会在DPD这一环损失掉。所以CFR和DPD是配合关系:CFR先降低信号的峰均比,DPD再把功放的线性区“延长”,两者一前一后,共同保证“高效率+低失真”两个目标都能满足。
在4G/5G基站里,CFR一般有两种形态:一种是用专用芯片实现,比如很多射频收发芯片或DPD芯片里集成了硬件CFR模块,另一种是放在FPGA里,用逻辑资源和DSP算法实现软件化CFR。做算法或者做系统集成的工程师,接触后者会更多一些。无论哪种形态,基本原理都是相通的。我先把这个基本功打牢,后面看芯片手册里的寄存器配置、看FPGA里的IP核配置,才能知其然也知其所以然。
2. CFR要关注的几个核心指标,别只看PAPR降了多少
2.1 峰均比和CCDF曲线:评估信号“峰值特性”的标尺
CFR最直接的成效,就是信号峰均比的变化。但实际工程里,我们很少只说一个简单的PAPR数值,而是用CCDF曲线(互补累积分布函数)来完整描述信号的峰值统计特性。横轴是某个门限相对平均功率的dB数,纵轴是“信号功率超过这个门限的概率”。
为什么不能只看单个PAPR值?因为信号峰值是随机出现的,不同概率下的“最大峰值”完全不是一回事。比如某个信号99%概率处的PAPR是8dB,而99.999%概率处的PAPR可能是11dB,这就意味着每十万个采样点里,会有一个瞬时功率比平均功率高11dB的样本。这个高概率尾巴上的峰值,才是真正考验后级功放的东西。
所以看CFR效果,标准动作就是看CCDF曲线。削峰前后对比,曲线会明显向左边“塌陷”——同一概率处的PAPR更低了,尤其那个高概率处的长尾巴会被压住。曲线压得越低越平坦,说明信号峰值被管理得越彻底。同时要注意,CCDF曲线在极低概率处的“回弹”,也就是高概率处压下去了,但极端概率处又冒出来了,这种现象往往意味着削峰过程中又产生了新的峰值,需要警惕。
2.2 频谱模板和ACPR:不能让削峰把邻道干扰搞大了
削峰的本质是一种非线性操作,它对信号做的处理,不可避免地会产生额外失真。最直接的后果之一,就是频谱再生。因为削峰把信号的瞬时包络强行压缩,相当于在时域上对幅度做了非线性处理,频域上自然会扩展出新的频率分量。如果这些分量落到相邻信道里,就会形成邻道泄漏,对应的指标就是ACPR(邻信道功率比)。
ACPR这个指标是发射机硬性要求,3GPP规范里对LTE和NR都有明确限值。CFR做得不好,最典型的表现就是ACPR恶化。一个写得不讲究的硬削波,可以让原本-45dBc以下的ACPR直接恶化成-35甚至-30dBc,这在无线接入网里是绝对不能接受的,因为相邻信道的用户会被你干扰到。
所以在设计和调CFR时,削峰门限也好,削峰滤波器也好,都必须同时考虑频谱约束。基本原理是:让削峰生成的误差信号尽量被限制在信号本身带宽内,或者按预先设计的频谱模板整形,把误差信号的带外分量尽可能地抑制掉。一句话,CFR不是光看PAPR降了多少,而是要在“PAPR降低幅度”和“ACPR恶化程度”之间取得一个可用的平衡点。这个平衡点,说穿了就是系统指标允许你牺牲多少带外性能来换效率。
2.3 EVM:削峰削得狠了,信号质量就毁了
除了带外指标,CFR对带内信号质量的影响同样致命。EVM(误差矢量幅度)衡量的是实际信号与理想信号之间的误差大小,直接反映解调端能不能正确解码。LTE和NR对EVM的要求相当严格,比如64QAM一般是8%,256QAM则要控制在3.5%左右,5G NR里高阶调制的要求更苛刻。
为什么CFR会影响EVM?因为削峰不可能只削“峰值”,它也会同时给带内信号本身引入失真。你的削峰门限设得越低,使劲压峰值,信号被“修理”的幅度就越大,带内误差自然就大。这是一个绕不开的物理约束:任何非线性处理都是对信号的损害,CFR只是把这损害控制在系统可容忍的EVM余量之内。
因此CFR的本质就是一场精细的权衡游戏。你要在三个约束之间找到交集:允许的PAPR降低(关乎效率)、允许的ACPR恶化(关乎合规和干扰)、允许的EVM恶化(关乎解调质量)。这三个约束围出来的区域,就是CFR可调参数的有效范围。实际调的时候你会发现,门限往下压一点点,EVM和ACPR可能就崩了,只能慢慢往前试探,一点一点找那个临界点。
2.4 算法时延和硬件资源
CFR不是一个简单的时域限幅,它牵涉检测、滤波、迭代、补偿等多个环节,这些环节都会引入处理时延。在基站发射链路里,时延是全局参数。DPD需要同步对齐输入和反馈信号,CFR引入的额外时延如果处理不当,会影响DPD的训练和对齐。而且CFR处理多载波聚合信号时,还要考虑不同载波之间的时延一致性,不能让某个载波比其他载波晚了几十个采样点。
硬件资源方面,FPGA实现CFR要消耗DSP slice和Block RAM,处理多通道信号时资源占用还会成倍上涨。不同CFR算法的资源开销差异很大,硬削波几乎不占什么资源,但性能很差;带限削波算法复杂,需要多个滤波器组,资源消耗一下子上来。做系统方案选型的时候,这是必须考虑的实际因素。
3. 主流的CFR实现方法:从简单粗暴到精细加工
3.1 硬削波(Hard Clipping):最朴素,但副作用也最明显
硬削波的做法非常直接:设定一个门限电平,信号包络超过门限的部分直接砍掉。等效于在时域上对信号乘以一个时变增益函数,超过门限的采样点被压缩回门限,没超过的采样点原样保留。这个操作在数字域实现简单到令人发指,一个比较器加一个乘法器就能跑。
但它的代价是削波产生的失真遍布整个频带,因为时域的“一刀切”等效于在频域引入了很宽的误差谱,带外噪声急剧上升。硬削波对信号包络的瞬间“切硬”也会造成频谱效率的严重下降。所以硬削波很少作为独立的CFR方案在基站里用,它更多是作为其他CFR算法的基线参考,或者在指标很宽松的场合做个保底方案。
3.2 峰值对消法(Peak Cancellation):工程中应用最广的方案
峰值对消法是工程实践中用得最普遍的方法,也就是常见Pulse Cancellation方案。它的思路很聪明:先检测出信号中超过门限的各个峰值位置和幅度,然后为每一个峰值生成一个对应的、经过成形的“削峰脉冲”,把这个脉冲从原信号里减掉。由于减掉的这个脉冲的形状和谱特性是预先设计好的,所以削峰过程对信号频谱的影响可以有效控制。
关键就在那个削峰脉冲的波形上。脉冲必须跟信号本身的频谱特性匹配,才能把削峰导致的带外泄漏控制住。最常见的做法是用一个与发射信号同带宽的带限脉冲,理想的削峰脉冲形状是sinc函数形式。实际工程里要加窗函数做截断,不然无限长的sinc没法实现,所以峰值对消法里的滤波器设计是个技术活。
实现流程大致是:先对信号求模值,检测超出预设门限的峰值;对每个峰值点计算超出门限的差值;根据每个峰值的幅度和位置,缩放一个预先设计好的削峰脉冲,并把缩放后的脉冲从原信号中减去。这样处理后,原峰值的尖尖被脉冲“抵消”掉了。理想情况下,只需要减一次,峰值就被压到门限以下了。但真实信号中可能有密集出现的峰值,前一个峰值削完,脉冲的“旁瓣”又会在邻近位置叠出一个新峰值,所以实际实现里通常要迭代多次,或者用多级级联的结构。关于迭代的细节,我放到后面实操部分细讲。
3.3 峰值加窗(Peak Windowing):另一种折中思路
峰值加窗法是对硬削波的优化。硬削波是一旦超过门限就一刀切,加窗法则是用一条平滑的窗函数曲线,去乘信号的包络,让包络“柔和地”降到门限附近,而不是生硬地切断。这样可以显著减少频谱再生,代价是削峰的精度会差一些,因为窗函数的下降沿有一定坡度,会在门限附近产生一些过冲或回落不彻底的现象。
算法上,峰值加窗需要计算一个比例因子:对于超过门限的采样点,用门限除以实际包络值得到该点需要的缩放比例;然后把这个比例序列用窗函数平滑一下,再把平滑后的缩放系数乘到信号上。这里的“平滑”就是窗函数的作用,窗函数形状选得好,带外频谱就好;选不好,效果又退回硬削波。常用窗函数有汉宁窗、高斯窗等,窗长决定了平滑的范围和时域失真程度,是一个可调参数。峰值加窗的优点是实现复杂度低、时延小、功耗低,适合一些对资源敏感的场景;缺点是削峰后的PAPR通常比峰值对消法偏高一些。
3.4 噪声成形(Noise Shaping)与更高级的迭代方案
噪声成形法是更精细的一类方法。它的核心思想是:把削峰造成的误差信号看成“噪声”,然后设计一个噪声传递函数,把这部分误差“推向”不敏感的区域,比如带外或者带内允许的方向。
具体做法一般是在峰值对消的基础上增加噪声成形滤波器。先把削峰产生的误差信号分离出来,然后让误差信号通过一个滤波器做整形再叠加回信号。这个滤波器的频率响应根据频谱模板设计,能够将误差信号集中到指定频段,从而规避EVM和ACPR最敏感的频段。在一些CFR IP核里看到的“频谱整形削峰”,实质上就是这种原理的实现。
高级方案还有基于多次迭代优化的方法,每次迭代在时域修正峰值,在频域约束频谱模板,交替投影。这类算法迭代收敛后能逼近理论最优的CCDF曲线,在同等EVM和ACPR约束下能达到更低的PAPR。通常软硬件联合仿真阶段用这类算法做性能评估,实际硬件实时处理时,受限于时延和资源,多数还是采用加窗或峰值对消的优化版本。
下面是三种常见方法的一个快速对比,方便直观感受差异:
| 实现方法 | 核心思路 | PAPR抑制能力 | 频谱/ACPR影响 | 实现复杂度 | 适用场景 |
|---|---|---|---|---|---|
| 硬削波 | 超门限直接限幅 | 很高 | 频谱严重再生 | 极低 | 指标宽松/基线参考 |
| 峰值加窗 | 平滑系数乘包络 | 中等 | 频谱再生较小 | 低 | 资源敏感/对EVM要求不苛刻 |
| 峰值对消/噪声成形 | 设计脉冲抵消+误差整形 | 高 | 可控,按模板整形 | 较高 | 基站等高性能发射机 |
4. 搞CFR必须知道的几个重要细节和工程坑
4.1 削峰门限不是越低越好
削峰的门限设多少,直接决定了功放能拿到多大峰值余量。很多刚接触CFR的工程师容易产生执念:拼命想把PAPR压到最低。压到5dB甚至4dB,听起来很有成就感,但一看EVM,3%没了。如果系统要求EVM不超过3.5%,余量几乎被吃光了,这还没算上DPD误差、射频链路误差、时钟抖动那些预算,整个链路稍微有点波动,EVM就直接爆表。
所以工程上设置门限的首要依据,是给后续环节留足余量。比如后级功放允许的输入峰值回退是7dB,那么CFR把PAPR压到7.5dB左右就够了,没必要为了多压那0.5dB而牺牲EVM和ACPR。每一分“多余的削峰”都是在白白浪费信号质量,而它换来的效率提升可能微乎其微。这个观念理顺了,再去调参数就不会误入歧途。
4.2 削峰后的再增长现象
削峰是在基带数字域做的,但信号最终要经过DAC、射频调制、功放等一系列环节,这些环节都不是理想的无失真链路。DAC的零阶保持效应、抗混叠滤波器的群延迟波动、功放的相位失真,都会导致信号包络在某些时刻出现“再增长”,也就是削峰压下去的峰值又长回来了。CFR压到7dB,经过DAC和射频链路送到功放输入端,实际峰值可能在7.5甚至8dB。如果这块余量没预留够,功放照样会失真,等于削了个寂寞。
做系统设计时,要么在CFR的门限设置上留出再增长的余量,要么在链路里加上针对性的峰均比补偿环节。具体留多少,取决于DAC的过采样率、链路的滤波特性、功放的非线性程度。我见过有的系统直接预留1dB左右的余量,这是一种稳妥但不那么精细的办法。
4.3 多载波和多通道场景下的特殊问题
现代基站几乎都是多载波和多通道。如果CFR处理的是多个载波聚合的信号,削峰脉冲的带宽必须覆盖所有载波的合成带宽,否则某些子载波上的峰值会漏掉。载波之间的相对时延对削峰效果也有影响,不同载波数据通过不同路径到达CFR模块时,如果时延不一致,会导致合成信号包络严重失真。
多通道(比如Massive MIMO的32通道、64通道)发射机里,每个通道都有独立的发射链路,如果每个通道各自独立做CFR,各通道的削峰噪声是互不相关的,在波束赋形方向上不会叠加,但通道间的一致性要求就更难保证。如果各通道共用同一个CFR参数或者共享削峰误差信号,可以改善一致性,但对硬件同步设计提出了很高要求。这一块在4G时代还没那么凸显,到了5G大规模天线系统里,就变成必须仔细考量的关键点了。
4.4 与DPD的配合关系
CFR和DPD是一前一后的搭档。CFR先削峰,DPD再矫正功放非线性。CFR造成的带内失真,DPD理论上也能矫正一部分,但DPD主要针对的是功放的非线性特性,不是信号的任意失真。如果CFR把EVM吃掉了2%,剩下的EVM预算给DPD不切实际,DPD能修正的EVM通常也是有限的。所以做整机联调时,CFR和DPD要放在一起调,看联合效果,而不是各自单测都优秀就万事大吉。
实际操作中一个比较常见的坑是:DPD对削峰后信号的适应性问题。有些DPD算法对信号的幅度统计特性比较敏感,CFR把信号的PAPR压得很低之后,DPD的建模效果反而会变差,因为它见过的训练信号“峰值多样性”不够了。这时候要反过来适当放宽CFR的削峰强度,用牺牲一点效率来换取DPD的收敛和稳定。这种CFR和DPD之间的相互牵制,在联合调试时几乎必然遇到。
4.5 标准合规:ACPR、PAPR、时延指标要一起过
最后提醒一点:任何CFR方案单独说性能多好,都没意义,必须把整套发射机拉到协议标准的框架下去验证。3GPP对不同带宽配置、不同调制阶数、不同频段都有明确的ACPR限值,EVM限值也有严格表格。CFR的设计和调试从一开始就要把标准指标当成硬约束,在满足这些硬约束的前提下,再追求提高效率、降低功耗。否则方案做得再漂亮,指标过不了标准,也是白费。
比如5G NR里,不同子载波间隔、不同信道带宽下的ACPR测量带宽和偏移位置不一样,CFR的频谱整形设计需要针对实际的频谱模板来做,不能拿一个模板打天下。这也是为什么那些用FPGA做CFR的团队,经常需要预留一些滤波器的可配置参数,方便适配不同运营商、不同频段、不同带宽的场景。
5. 一次CFR联调的真实体验:从指标崩溃到收敛的调试过程
5.1 我遇到的一次典型EVM和ACPR双恶化
讲一个我实际调试中遇到的例子。某一次项目联调,设备在实验室单测时各项指标都还行,一旦接到真实负载环境,ACPR突然从-48dBc恶化到-38dBc,EVM也从2.5%飙到5.5%,双双不达标。第一反应是怀疑功放有问题,但换了功放后结果依旧。后来测试锁定在CFR环节,把CFR功能关掉后,ACPR恢复到-46dBc,EVM回到2.2%,基本排除功放问题。问题果然出在CFR跟其他模块的交互上。
我当时的排查思路是:先确认CFR的削峰量到底有多狠,再看看削峰误差信号有没有被后面链路异常放大。最后定位到是CFR模块里的削峰脉冲滤波器系数,跟整条链路的群延迟特性不匹配,削峰脉冲的旁瓣刚好落在信号带外的敏感频段,和射频链路的非线性相互作用,把带外杂散放大了。后来重新设计了削峰脉冲的频谱整形滤波器,把旁瓣抑制再压低了一截,ACPR和EVM才双双回到指标以内。
5.2 调试顺序和工具建议
CFR调试必须有一个清晰的顺序,否则面对一堆耦合的关联参数,容易越调越乱。我一般按这个顺序来:
第一步,先在纯数字仿真环境里验证CFR算法的频谱模板是否达标。用Matlab或Python生成标准测试激励,跑CFR模型,看CCDF曲线、ACPR和EVM,确认算法层面没有问题。
第二步,上FPGA或芯片,接信号发生器产生标准信号,经过CFR后直接看输出的频谱和EVM。这一步先把CFR单独隔离开来验证,不接功放和射频链路。
第三步,接上射频链路但不开启DPD,确认CFR+射频链路联合工作正常,确认再增长现象是否被控制在预期范围内,必要时调整门限余量。
第四步,开启DPD,做CFR+DPD+功放的联合调测。这一阶段通常需要来回调整CFR门限和DPD系数,把ACPR和EVM调到最优平衡。
工具方面,频谱仪看ACPR,矢量信号分析仪看EVM和CCDF,FPGA里的在线逻辑分析仪抓削峰前后的IQ数据做离线对比。这三样是最基本的“三件套”。如果调试中遇到削峰脉冲滤波器系数问题,每次改完都要重新抓数据回放一遍,确认时域波形和频域谱都干净。
5.3 几个可以抄的“避坑”经验
关于CFR的调试,我踩过不少坑,在这里总结几个特别有代表性的:
第一个,CCDF曲线看概率时要看准位置,99.9%和99.99%处的表现可能差异很大。有些CFR方案会把99.9%处做得很好,但99.99%处出现明显的上翘尾巴,在功放的深度饱和区造成偶发失真。调的时候要保证目标概率点都要达标,不能只看某一个点。
第二个,按削峰门限上留出来的余量,不要在理想条件下卡得刚刚好。理想环境里一切正常,但温度变化、驻波变化、功放老化后,再增长量和非线性都会偏移,门限的余量就是你应对这些偏移的安全垫。宁可让PAPR稍微高一点,也要保住EVM和ACPR的可靠性。
第三个,CFR的增益补偿要小心。削峰操作本质上是在“降低”信号的平均功率或峰值功率,如果不做增益补偿,削峰前后信号功率会不一致,导致后级功放的激励电平变化,发射功率不准。补偿增益的计算要用信号有效值来算,不是简单地用峰值差去补。如果补偿增益设得过大,又可能造成新的数字削顶,形成“补偿后重新超门限”的怪圈。
第四个,做多通道系统时,CFR模块的复位和启动时序要同步。如果不同通道在不同时刻开始削峰,会在起始瞬间产生很大的通道间相位差,造成波束指向错误或杂散。这一块虽然不起眼,但在大规模天线系统里出现概率极高。
最后分享一点心得
CFR这个东西,说简单可以很简单,不就是限幅和滤波嘛;说复杂也真的复杂,牵涉信号统计特性、系统指标预算、数字滤波设计、射频链路非线性、多通道一致性、协议合规要求,哪一个环节考虑不到位,都会在实际指标上还账。我个人做下来最大的体会是:CFR从来不是孤立优化的,它不是把一个信号PAPR压得越低越好,而是要放到完整发射链路里去寻找平衡点。每一次调CFR参数,本质上都是在系统预算的各个项之间做权衡,这比单看某一个指标有意义得多。
如果你刚开始接触这个方向,建议先把本文里的基础概念吃透,然后找一个信号仿真工具,自己生成一个OFDM信号,分别用硬削波和峰值对消处理一下,亲眼看看时域波形和频域谱的变化,很快就能建立起直观感觉。下一篇我们找时间展开讲峰值对消法的滤波器设计和参数计算,以及多级CFR的具体实现细节。