FIR滤波器原理和调用Xilinx IP核滤除带外信号

1、有限冲击响应滤波器介绍

有限冲击响应滤波器(FIR Filter)是数字信号处理工程师的必备技能,在工程应用中FIR Filter相对于IIR Filter来说易于实现,其具有较好的幅频特性外,更重要的是FIR Filter还具有线性相位特性。对于因果的FIR系统,离散输入信号x(n)经过该系统后的输出为y(n),y(n)表示如下。

FIR滤波器原理和调用Xilinx IP核滤除带外信号

其中h(k)是滤波器序列,M是滤波器系数的长度,k的取值为0~M-1。在实际应用中,一般认为x(n)的也是从零开始。将上式看作是x(n)与单位脉冲响应h(k)的直接卷积,因此FIR Filter的核心思想就是卷积运算,继续了解卷积的时域计算方法,不难想象出FIR滤波器的原理。

既然了解FIR Filter的关键是卷积,直接来看一个简单的卷积计算的例子,定义一个输入序列,x(n)=5,8,10,22,37,77,98,36,56,9,再定义一个滤波器系数序列h(k)=0.5,1,1,1,0.5

卷积计算过程为y(0) = h(0)*x(0) + h(1)*0+ h(2)*0+ h(3)*0+ h(4)*0

y(1) = h(0)*x(1) + h(1)*x(0)+ h(2)*0+ h(3)*0+ h(4)*0

y(2) = h(0)*x(2) + h(1)*x(1)+ h(2)*x(0)+ h(3)*0+ h(4)*0

……

y(13) = h(0)*0 + h(1)*0+ h(2)*0+ h(3)*0+ h(4)*x(9)

2、Filter Solutions生成滤波器抽头系数

上一篇文章中混频之后的信号是1Mhz和9Mhz的符合信号,此处设计需要保留1Mhz,滤除9Mhz信号,因为信号动态范围是48db,那么1Mhz和9Mhz的动态范围各自是24db,要想抑制9Mhz的高频分量,设计的滤波器抑制能力至少达到24dB。所以在9Mhz位置需要是有至少-24db的衰减,在1Mhz位置通带尽量平滑,并接近于0db即没有增益没有衰减。这样才能满足设计要求。

首先需要借助滤波器工具生成符合指标要求的滤波器抽头系数,常用的滤波器生成工具有Filter Solutions、matlab软件自带的fdatool工具箱等。本次设计借助Filter Solutions软件来设计滤波器参数。

打开Filter Solutions滤波器设计软件,进行如下设置,系数长度选择33,足以达到设计要求

FIR滤波器原理和调用Xilinx IP核滤除带外信号

33Taps指的是fir滤波器阶数,具有33个系数。1mhz是指的通带带宽,也就是从中心频率下降3dB时的频点位置。我们使用数字离散滤波器参数求取,Filter Class选择低通滤波,绘制幅频响应时最低频率50k最高15Mhz,只要能看到1Mhz和9Mhz即可,采样率50Mhz,

滤波器结构是FIR,FIR Type选择汉明窗。

点击打开频率响应

FIR滤波器原理和调用Xilinx IP核滤除带外信号

FIR滤波器原理和调用Xilinx IP核滤除带外信号

在横坐标1Mhz位置添加mark,在9Mhz位置添加Mark,鼠标移动到位置右键即可添加,再点击右键取消mark。可以看到1Mzh的位置也有差不多2.47个db的衰减,而9Mhz位置有-72.95db的衰减,这样足以滤掉9MHz的频率分量。

关闭当前图形界面回到主界面。点击综合滤波器

FIR滤波器原理和调用Xilinx IP核滤除带外信号

FIR滤波器原理和调用Xilinx IP核滤除带外信号

点击Vec按钮

FIR滤波器原理和调用Xilinx IP核滤除带外信号

复制参数为数组,黏贴出来如下:

NUM = [2.31e-03, 2.875e-03, 4.12e-03, 6.174e-03, 9.117e-03, 1.297e-02, 1.767e-02, 2.311e-02,

2.909e-02, 3.539e-02, 4.17e-02, 4.774e-02, 5.32e-02, 5.779e-02, 6.125e-02, 6.342e-02, 6.415e-02, 6.342e-02, 6.125e-02, 5.779e-02, 5.32e-02, 4.774e-02, 4.17e-02, 3.539e-02, 2.909e-02, 2.311e-02, 1.767e-02, 1.297e-02, 9.117e-03, 6.174e-03, 4.12e-03, 2.875e-03, 2.31e-03]

这些就是滤波器参数,抽头系数,用于做滤波器设计,提供给vivado FIR IP CORE使用。

3、vivado调用FIR滤波器IP核

在上篇文章基础上,打开vivado2018 软件工程,调用FIR compiler ip

FIR滤波器原理和调用Xilinx IP核滤除带外信号

打开fir compiler配置界面,配置如下:将上一节获得的33阶抽头系数黏贴过来,去除方括号,只要内部数据。

2.31e-03, 2.875e-03, 4.12e-03, 6.174e-03, 9.117e-03, 1.297e-02, 1.767e-02, 2.311e-02,

2.909e-02, 3.539e-02, 4.17e-02, 4.774e-02, 5.32e-02, 5.779e-02, 6.125e-02, 6.342e-02, 6.415e-02, 6.342e-02, 6.125e-02, 5.779e-02, 5.32e-02, 4.774e-02, 4.17e-02, 3.539e-02, 2.909e-02, 2.311e-02, 1.767e-02, 1.297e-02, 9.117e-03, 6.174e-03, 4.12e-03, 2.875e-03, 2.31e-03

FIR滤波器原理和调用Xilinx IP核滤除带外信号

设置采样率和系统时钟

FIR滤波器原理和调用Xilinx IP核滤除带外信号

在Implementation设置栏中,将参数量化小数位宽降低为10位,可以看到频率响应,红色线和蓝色线不重合,因为量化造成的误差使得滤波器期和理想状态有了差别。红色为理想状态,蓝色为量化的实际状态。

FIR滤波器原理和调用Xilinx IP核滤除带外信号

设置为19位(最大设置值)时几乎与理想状态重合,理解量化后的误差对性能的影响。输入信号的位宽默认16位,有符号数。

Detailed Implementation和Interface两个设置栏保持默认设置即可。

FIR滤波器原理和调用Xilinx IP核滤除带外信号

FIR滤波器原理和调用Xilinx IP核滤除带外信号

最终点击OK完成配置

FIR滤波器原理和调用Xilinx IP核滤除带外信号

连接后整体框图:

FIR滤波器原理和调用Xilinx IP核滤除带外信号

4、modelsim仿真设计

仿真结果如图:滤除9Mhz保留1Mhz

FIR滤波器原理和调用Xilinx IP核滤除带外信号