FIR滤波器和IIR滤波器原理及

1.FIR数字滤波器

有限冲激响应(FIR)滤波器是对N个采样数据执行加权和平均的处理。处理过程公式为:

FIR滤波器和IIR滤波器原理及

如三抽头FIR滤波器结构:

FIR滤波器和IIR滤波器原理及

一个低通滤波器结构:

FIR滤波器和IIR滤波器原理及

设计滤波器就是选取合适的滤波器系数W,使滤波器达到设计的要求。

一阶微分滤波器结构:

FIR滤波器和IIR滤波器原理及

当低频通过时,因为相邻两个采样点对于低频来说,变化不大,所以差值基本为0,而对于高频来说,相邻采样点变化很大,输出幅度便会很大,所以一阶微分滤波器是高通。

线性相位与非线性相位:

如果滤波器的N个实值系数为对称或者反对称,那么为线性相位。即通过滤波器的所有频率分量具有相同的延迟。该延迟为群延迟,所以对称FIR具有相同的群延迟。

FIR滤波器的转置结构:

转置结构的公式:

FIR滤波器和IIR滤波器原理及

FIR滤波器和IIR滤波器原理及

不同点在于:

1.标准FIR寄存器是8位的,转置FIR寄存器是16位的。

2.标准FIR关键路径(x路径)上有四个寄存器,转置FIR没有,所以转置FIR工作速度更快。

资源消耗更多但是对于FPGA或者DSP来说,转置FIR更有优势。

2.IIR数字滤波器

无限冲激响应滤波器,可以看做是两个FIR滤波器构成,其中一个FIR在反馈回路中。

FIR滤波器和IIR滤波器原理及

IIR的优点是,同样的阶次,比FIR滤波效果好。缺点是,不稳定,存在相位失真,所以FIR更适合自适应滤波器。

公式为:

FIR滤波器和IIR滤波器原理及

具有N个前馈系数和M-1个反馈系数。结构如下:

FIR滤波器和IIR滤波器原理及

为了保证IIR滤波器的稳定性,需要极点均位于z平面的单位圆内。

3.DA FIR滤波器设计

分布式算术(DA)实现数字滤波器,通过System Generator实现移位寄存器,查找表,查找表加法器,缩放比例加法器,从而构造整个FIR滤波器。首先对对称系数FIR滤波器的表达式进行改写,使更适合用硬件实现。

FIR滤波器和IIR滤波器原理及

其中,W是滤波器系数,每一个抽样值用B位比特表示,XB-i为输入值的第B-i个比特位,共有N个采样值参与计算,N个采样值用移位寄存器实现。

移位寄存器:

FIR滤波器和IIR滤波器原理及

1.其中SineWave和Constant从Simulink Library库Simulink—>Source中拉取。SineWave设置为频率2*pi。

2.Gateway In起采样的作用,采样周期0.001,设置抽样值为定点数,比特数为8位,小数位为4位,有符号数。Gateway Out输出值,两者均在Xilinx Blockset—>Basic Elements中,Gataway In1设置抽样间隔0.001,比特数为1。

3.子系统由Xilinx Blockset—>Basic Elements Black Box实现,共七个Black Box,每个Black Box由VHDL描述其功能并用m文件定义接口,在这里Black Box设置为8位宽输出的D触发器,实现延迟0.001的效果,从而构成7个采样数值。最后包装为子系统。

4.System Generator,控制仿真,Timing设置为0.001抽样。

5.Scope从Sinks库中获得,设置输入为7,设置layout为7,进行仿真。

FIR滤波器和IIR滤波器原理及

这里验证设计的移位寄存器是否正确,从仿真结果中看到,是正确的,所以这个移位寄存器模块可以作为后面DA Filter设计了,所设计的子系统为模拟信号输入输出7个8位连续采样有符号值

查找表模块:

从公式中可以看到(W1*x1+W2*x2+......W7*x7),对于采样值的每一比特位只有0和1的取值,所以公式仅仅是滤波器系数的加和,例如7个采样值最高位为分别为(7—>1)1100000,则对应上式输出为W7+W6,所以查找表记录的是运算后的结果,但是对于7个比特组合方式太多,所以将7个比特值分为低4位和高3位,分别计算与权值的乘积加和,即分别用查找表实现x4x3x2x1对应的值与x7x6x5对应的值,之后相加。

使用BlackBox实现4比特输入查找表与3比特输入查找表,0000—>1111对应的输出乘积加和与000—>111对应的输出乘积加和。

FIR滤波器和IIR滤波器原理及

上图使用Counter计数器分别输出0-15与0-7验证查找表是否正确。这里查找表分别为3位输入与4位输入,输出23位乘积值(其中21位为小数并且为有符号数)。

查找表加法器模块:

这个模块就是将两个查找表模块的值加起来,实现(W1*x1+W2*x2+......W7*x7)。

FIR滤波器和IIR滤波器原理及

实现后的查找表加法器模块为23位有符号两输入,23位有符号输出。

缩放比例加法器:

最后就是分别乘上2的i次方然后加起来,作为输出值,缩放比例加法器完成了这个操作。整体结构:

FIR滤波器和IIR滤波器原理及

In是查找表加法器输出的值,23位比特其中21位小数位,首先经过Reinterpret强制转换数据格式与类型,转换成无符号数并且小数位为0,乘法器参数设置为(1—>128)无符号8位,设置乘法器输出无符号30位,在Reinterpret8之前均操作为无符号数30位精度,Reinterpret8强制转换为有符号为并且小数位为25。(应该是乘法操作不能使用有符号数,加减法可以使用,有待查阅)。

DA Filter完整设计

FIR滤波器和IIR滤波器原理及

两个不同频率的sin波形加在一起,作为滤波信号,首先需要进行抽样与数据转换(matlab转化为Xilinx),使用Gateway In,并设置抽样周期0.001,使用移位寄存器在一个采样时刻获取7个连续采样值,使用Xilinx库提供的BitBasher提取各个比特值,如提取最高位设置表达式:

FIR滤波器和IIR滤波器原理及

同样的操作将7个采样值的8位比特值分别提取出来,送入查找表模块与查找表相加模块,得到每一个比特位的乘积加和,最后送入缩放比列加法器,完成整个表达式。

仿真结果:

FIR滤波器和IIR滤波器原理及

效果还是可以的。最后不要忘了加Xilinx的仿真控件并设置时间0.001,一个经常忘记添加的仿真控件。