利用赛灵思FGPA实现降采样FIR滤波器

2020-02-23 10:38发布

过去半年有几位客户请我帮助他们设计和实现数字下变频器所用的降采样(即“抽取”)滤波器,这种滤波器在软件无线电与数据采集类应用中都很常见。这项工作即便对于经验丰富的设计师也不是一件小事。事实上,仅仅算出在FGPA中实现滤波器所需要的资源可能就是一个很大的问题。虽然MATLAB®(MathWorks 开发)具有用于滤波器设计与分析 (FDA) 的绝妙工具箱,但是它提供太多滤波器设计方法,会让新用户无从下手。另外,您必须能够根据DSP理论解释MATLAB命令产生的结果,仅仅这一点就需要研究。抛开理论的细枝末节,让我们开始围绕上述问题探讨降采样有限脉冲响应 (FIR) 滤波器的设计与实现。本辅导资料实际上旨在向您介绍一种简便、易于理解的流程——从滤波器系数生成到FGPA目标器件中抽取滤波器的实现。所需工具只有MATLAB较新版本(本人仍在使用R2008a)及其FDA工具箱、以及ISE® 11.4套件提供的赛灵思CORE GeneratorTM工具。这些工具是设计多速率FIR滤波器的必备工具。特别是我们将探讨固定降采样速率变化的两个实例:整数值与有理值。您应当能够把我们在本辅导资料介绍的MATLAB指令和CoreGen图形用户界面 (GUI) 设置应用到您的设计当中。为了说明公用逻辑块 (CLB) Slice 、18KB内存RAM块(BRAM) 和DSP48乘法累加 (MAC) 单元等方面的资源占用情况,我们将采用 XC6VLX75T-2ff484 作为目标 FPGA 器件。整数倍降采样器假设基带中进行解调后按250MHz速率传输带宽只有2.5MHz的信号。我们必须过滤从2.5MHz到 250MHz 的所有频率,因为它们不传输任何有用信息;这正是我们准备设计和实现的低通 FIR 滤波器的目的。根据尼奎斯特定理,输出数据速率是信号带宽的两倍;因此,我们需要按照M=50的整数倍对其执行降采样。我将介绍两种采用多级滤波方法的可行备选实现方案:第一种方法采用三个串联的 FIR 抽取滤波器,而第二种方法则同时采用级联积分梳状 (CIC) 滤波器与FIR滤波器。以下是用于设计理想滤波器的MATLAB代码。我们假设通带和阻带频率的衰减分别为0.1dB和100dB。

假设FPGA时钟频率Fclk=Fs_in,那么在Virtex®-6器件中我们需要多少个DSP48 MAC单元?它是用于按M进行降采样的滤波器。根据FIR Complier 5.0数据手册 (fir_compiler_ds534.pdf) 详细阐述的理论,我们可以把DSP48 MAC分成M个相位,因此引入“多相”这一术语。由于每个相位都是按更低的输出频率 Fs_out 进行处理,因此可以按时分复用方式共享DSP48 MAC。以下理论计算表明,FIR-Compiler在通过多相分解方式实现滤波器时采用最小的22个MAC单元(total_num_MAC_ref )。滤波器长度是2100 (total_num_coeff),填写0成为M的整数倍。请注意:此方案考虑系数对称性。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
20条回答
GoldSunMonkey
2020-02-24 04:30

图6说明FIR-Compiler GUI第一个页面的设置。其它三个页面本人采用与第一个整数降采样应用例子相同的参数。布局布线后的总体FGPA资源占用情况如下:

Slice触发器数量:547 个
Slice LUT数量:451个
占用 Slice数量:153个
DSP48单元数量:13
BRAM单元数量:6个




图 6. 25/6有理数降采样。用于参考单级滤波器的FIR-Complier 5.0 GUI设置第 1 页(共 4 页)。

多级方法

FIR-Complier已经为这种多相L/M=6/25滤波器生成了非常小的内核。不过,我们需要再次采用多级方法,因为这种方
法使我们能够进一步节约DSP48与BRAM。在手动设计多级系统时, 如本例所示,所有滤波级都必须采用与参考滤波器相同的通带频率 (Fpass)。

各级通带纹波均相等,是由参考滤波器通带纹波除以级数算出。各级的差异是阻带频率。第一级无需在Fstop截止,因
为转换带宽会变得太急促(太多系数);现实中我们所需要的只是让第一级在Fstop1=Fs_in/M1- Fs_in/(2M/L)截止。实际上Fs_in/M1与其所有倍数此时都是放置所有复本的新采样频率,而Fs_in/(2*M1)是Fs_in/M1中第一个复本的带宽的一半。以下是相关MATLAB代码。







由于第一级是M1=4整数降采样器, 因此其FIRCompiler GUI设置与图1所示非常相似。唯一不同的参数是COE文件名(即dec_L1_M4_rad10.coe)、抽取率值(M1=4)、输入采样频率 (50 MHz) 和时钟频率 (150 MHz)。另一方面,第二级采用 L2/M2=24/25 有理数速率变化,因此,FIR-Compiler设置与图6所示大同小异。此处COE文件名为dec_L24_M25_rad10.coe,插值速率值设为L2=24,而输入采样频率为12.5 MHz。


一周热门 更多>