tag 标签: cfr

相关博文
  • 热度 30
    2014-6-26 02:59
    4068 次阅读|
    11 个评论
            CFR(Crest Factor Reduction),俗称削峰,就是降低信号峰均比的一种算法。现在业界比较流行的、易于实现的CFR算法是PC-CFR。PC-CFR的核心思想是:用频率响应在待削峰信号频带内的滤波器的冲击响应,直接去对消信号峰值的最大点,随着主要矛盾的解决、次要矛盾也就相应解决了。         今天终于调试通过CFR,CFR的时延尽可能的少了,CFR模块都没复位信号(个人觉得一个工程里面99%的复位信号都是可以省略的,如果全面考虑这点,会给整个设计腾出时序余量)。         因为原有的CFR模块的时延比较大,看别人的程序、理解别人的程序是比较痛苦的一件事,还有乘法器、RAM、CORDIC等调用了IP,通用性不够好,所以决定自己写一个。   第一步就是分析XILINX的PC-CFR,System Generator搭建的 IP (pc_cfr_virtex5_v1_1.mdl)。不清楚PC-CFR算法是不是XILINX最早提出来的,反正个人觉得ALTERA的CFR算法肯定是参考XILINX写的呵呵,感觉XILINX在无线通信这块还是要较ALTERA强一些。pc_cfr_virtex5_v1_1.mdl一同有8个子模块:         1.cordic_mag_sin_cos模块:采用cordic算法计算信号的模值,信号的正弦、余弦值。模块的时延是10个信号采样周期。         2.peak_scale模块:计算信号峰值与削峰门限差值的正弦、余弦值。模块的时延是3个信号采样周期。         3.peak_detect模块:找峰值,要等到信号模值下降到门限下面才能确定前面的峰值是真正的峰值,而且超过门限的一批信号中,如果有多于一个的山峰,那么最大的那个峰才判定为真正的峰值。模块的时延是3+peak_delay个信号采样周期,peak_delay由peak_detect模块给出。         4.peak_align模块:峰值延时模块,让找到的峰值有固定35个信号采样周期的延时。模块的时延是32-peak_delay个信号采样周期,peak_delay由peak_detect模块给出。所以峰值的固定延时等于3+peak_delay+32-peak_delay=35个个信号采样周期         5.peak_scale_delay模块:peak_scale延时模块。模块的时延是35个信号采样周期,因为由前面可知信号的峰值也是延迟35个信号采样周期才给出的。         6.c_pulses模块:四个CPG模块采用时分复用的方式工作。PC-CFR滤波器的冲击响应与信号峰值去对消的时候,滤波器的IQ信号大小是受信号峰值与门限的距离决定的,本模块实现滤波器与信号峰值与门限的差值相乘。模块的时延是6个信号采样周期。         7.data_in_delay模块:输入信号要经过延时与滤波器相应点对齐了之后再相减,才能消去相应的峰值。延时包括两块:一是滤波器的延时(如果PC-CFR滤波器的阶数为N,则延时(N-1)/2个信号采样周期),二是前面几个模块处理的延时一共54个信号采样周期(10(cordic_mag_sin_cos)+3(peak_scale)+35(peak_delay)+6(c_pulses))。         8.subtract模块:经过延时的信号与经过缩放的PC-CFR滤波器相减。   分析完XILINX的PC-CFR IP 之后,就开始动手自己的PC-CFR。方案基本参考XILINX算法(必须的呵呵,本人也不可能提出更牛逼的算法),有两个地方做了修改:         1.XILINX的算法各个处理模块的时延都是跟信号采样周期有关系的,要想减少时延,必须在信号高速率下面做CFR,带来的问题就是滤波器的阶数要相应的增加(原因就不说了,做这块的都清楚哈)。而本人经过仿真,内插的过程中信号的峰值是不会再生的。所以CFR建议还是在信号低速率下面做(可以减少滤波器的阶数,可以让CFR的工作时钟工作在低速率下面从而容易满足时序要求),然后再对信号进行内插。我的设计上面的处理模块的延时都是跟CFR的工作时钟相关的,就是如果信号的采样率没变,而工作时钟提高的话,处理模块的时延就相应的减少了。         2.XILINX的算法找峰值模块,要等到信号模值下降到门限下面才能确定前面的峰值是真正的峰值,找到峰值有个固定的35个信号采样周期的延时,这一块的延时还是满大的。本人的设计里面信号峰值出现信号开始下降沿的时候,等N个信号采样周期没有出现更大的峰值的时候确认峰值有效 ,N可设置范围2~128。经过测试N设置为2 ,CFR就能正常工作了。所以这块就减少了33个信号采样周期的延时。   总结:做设计不仅要清楚要做什么,还必须知道为什么要这么做。做FPGA、做逻辑,画的时序图跟仿真出现的结果和你想要的结果是一样的,才OK了。如果FPGA硬件跑出来的结果跟预想的不一样,千万不要一开始就怀疑人家芯片、软件的问题(虽然Xilinx、Altera有时候还是有bug呵呵),一般情况都是自己设计的问题。没有无缘无故的问题,有果必有因,不要放过任何一个问题,把在做设计的过程中所有的问题、现象都搞清楚了才能慢慢成为高手。    
  • 热度 20
    2014-2-8 22:05
    2308 次阅读|
    1 个评论
    基于 FPGA 的 CFR 的设计 KevinWan   降低 PAPR 的目的是:一是降低数字信号处理时的位宽,减少资源开销和设计复杂度;另一个是减小功放等模拟器件的动态范围,从而避免信号的非线性变化引起的误码率等一系列性能下降。 削波采用传统的削幅滤波算法,根据 CORDIC 算法计算出的幅度因子,加窗处理得到 ERRER 信号,把原始信号延时与 ERRER 信号相减得到 CFR 输出信号,从而达到削波的效果。下图为 CFR 模块系统框图: CFR 是为了降低峰均比,下图是功放非线性失真和功放理想输出的频谱对比图:                           图 1 :功放非线性失真和功放理想输出的频谱对比图 高峰均比的信号对功放的影响: 带内的影响: EVM 较高 降低接收机的性能 带外的影响: 增加 ACPR 降低相邻信道接收机的性能 CF 定义为信号幅度峰值同信号功率均方值之比。 降低 PAPR 的目的是:一是降低数字信号处理时的位宽,减少资源开销和设计复杂度;另一个是减小功放等模拟器件的动态范围,从而避免信号的非线性变化引起的误码率等一系列性能下降。   图 2 : CFR 系统框图 图显示第一级削波时域效果图,对峰值比较大的信号,平滑地消减峰值幅度。图为第二级削波时域图。 图 3 :第一级削波时域波形对比图 图 4 :第二级削波时域波形对比图   图为经过 CFR 前后的输出频谱对比图,经过 CFR 在带外的低噪会高些,也就是带外的频谱泄露,但泄露的并不严重,可以满足系统的要求。 图 5 :削波前的频域和削波后的频域对比 对于 WCDMA 信号,削波可以达到以下指标: EVM 10% Output PAR 7db PAR reduction = 2db at probality   下图是 WCDMA 三载波经过 CFR 和未经过 CFR 频谱对比图,可以看出经过 CFR ,在带外有一些频谱泄露,但 ACLR=-60dBc ,依然满足系统要求。 图 6 : WCDMA 三载波 CFR 前后的对比图 下图是 CDMA 四载波和经过 CFR 滤波器前后的频谱对比图,可以看出经过 CFR 而没有滤波器的,在带外频谱泄露比较严重,不能满足系统的要求,但经过 CFR Filtering , ACLR 能满足系统要求。 图 7 : CDMA 四载波 CFR 前后和 CFR 滤波器的对比图 下图是 WCDMA 三载波经过 CFR 和未经过 CFR 的 CCDF 对比图,一般看在 e-4 处, PAPR 的改善程度, WCDMA 经过 CFR 改善 PAPR 4DB 左右。 图 8 : WCDMA 三载波 CCDF 对比图 代码采用 Verilog 设计,采用多级串联的方式