3.用MATLAB设计FIR滤波器
MATLAB中的FDATOOL是一个功能强大的设计、分析滤波器的工具。通过设置相关参数,从MATLAB工作空间导出滤波器,直接指定滤波器系数,可以快速设计出FIR或者IIR数字滤波器。FDATOOL同时提供了滤波器分析工具,例如级数图、相位响应图和零极点图[4]。
本设计实现的是高速FIR低通滤波器对语音信号进行滤波。语音信号的频率范围是100-4500Hz,因此FIR滤波器的采样频率定为9000Hz,低通滤波器的截止频率定为4000Hz,选择汉明窗函数,阻带最小衰减-53dB,阶数为8,输入数据宽度8位,输出数据宽度10位,滤波器幅频响应波形如图1所示。

图1 MATLAB中的波形
参数设定后生成的滤波器系数如下:
h(0)=h(7)=-0. h(1)=h(6)=0.
h(2)=h(5)=-0.1180504784h(3)=h(4)=0.598387897
4.FIR滤波器的FPGA实现
4.1 系数的量化处理
由MATLAB求出的系数可以看到,滤波器的系数是用浮点数表示并且有正负,但FPGA是定点数运算,这就涉及到浮点数到定点数的转化和负数的处理。本文是将表中的系数同时乘以1024即 倍,将结果量化成整数,并用11位的二进制补码表示如下:
h(0)= h(7)=11111111101h(1)= h(6)=
h(2)= h(5)=11110000111h(3)= h(4)=
其中,最高位为符号位,负数用1表示,正数用0表示。这样,量化编码解决了定点数问题,补码解决了系数的正负数问题。需要注意的是:最后的输出结果相应地要除以1024。
4.2 本设计的实现
本设计所使用器件是Xilinx的Virtex-Ⅱ系列xc2vp30型号的芯片,EDA工具是Xilinx ISE 8.2i和Modelsim XE6.1。科技论文。本文的8阶FIR滤波器采用DA算法及其串-并结构实现,框图如图2所示。

图2 滤波器结构框图
采样数据为正数,因此输入数据宽度定为8位原码,查找表求和后输出数据有正有负,因此宽度定为20位补码,最高位为符号位,这是根据输出的数据范围确定的,将输出结果除以1024即取20位的高10位作为最后的输出。采用DA算法查找表结构的滤波器,实际上都是系数在作算术运算,输入的8位采样值并没有参加运算,只是起到了作为查找表地址的作用,因此整个过程是补码运算完成的。
从图2可知:移位寄存器组将采样值进行循环,每个时钟周期循环一次,始终保持8个采样值在寄存器组中,同时每个时钟周期将8个采样值的相同位分别送给8组RAM1和RAM2作为地址,共需16个RAM。8组RAM将输出值送入加法器求和,求和后再与位权 相乘,最后再次求和即为输出值。需要注意的是:本文中,从加法器输出的补码与位权 相乘,VHDL程序是通过移位操作实现的。
5、设计的时序仿真及资源的使用
5.1 综合报告分析
综合是FPGA设计流程中的重要环节,综合结果的优劣直接影响布局布线结果的最终效能。使设计占用芯片的面积最小,工作频率最快,这是评定综合器优劣的两个重要指标。本设计使用的综合工具是XST,经过综合后的资源使用和时序报告如下:
Device utilizationsummary:
Selected Device :2vp30ff896-6
Number ofSlices:204out of 13696 1%
Number of Slice FlipFlops: 208out of 27392 0%
Number of 4 input LUTs:361out of 27392 1%
Number of bondedIOBs:19out of 556 3%
Number ofGCLKs: 1 outof 16 6%
Number used as logic: 353
Number used as Shiftregisters: 8
Number ofIOs:19
Timing Summary:
Speed Grade: -6
Minimum period: 3.293ns(Maximum Frequency: 303.674MHz)
Minimum input arrivaltime before clock: 1.716ns
Maximum output requiredtime after clock: 14.179ns
Maximum combinationalpath delay: No path found
经布局布线后资源使用报告如下:
Device Utilization Summary:
Number ofBUFGMUXs1out of 16 6%
Number of ExternalIOBs 19out of 556 3%
Number of LOCedIOBs 0out of 19 0%
Number ofSLICEs245out of 13696 1%
从以上数据可以看出,采用DA算法不仅节省了资源并且提高了工作速度。最高工作频率可以达到303.674MHz,完全满足采样率要求。此外,当阶数高时,由于FIR滤波器的系数是对称的,可利用这一特性来改进,以达到减少资源使用的目的。串行DA算法减少了资源的使用,但不能提高速度,并行DA算法提高了速度,但是以增加资源为代价的。面积和速度这两个要求贯穿FPGA设计的始终,它们是设计效果的终极评定标准,因此要考虑各方面因素,在面积和速度达到最佳平衡[5]。
5.2时序仿真
将器件延时信息考虑进去,本设计在ModelSim中的布局布线后的仿真结果如图3所示。

图3 ModelSim时序仿真图
从图中可以看出,第三个周期开始,每个时钟周期滤波器完成一次处理,输出一次数据。证明了使用DA并行算法的高效性,适合对于速度要求高的系统。取8个采样输入数据进行验证: =212、 =159、 =101、 =255、 =79、 =0、 =162、 =226。将这8个数据和生成的8个滤波器浮点系数带入公式(1)中,计算可得: ,其它结果可用同样的方法得到。对于用原始公式(1)计算的结果与ModelSim仿真结果(为193)的误差是由于以下两点产生的,其一,在对滤波器的系数由浮点数到定点数的转化时进行尾数舍入引起的,其二,在对输出结果取高10位时截尾操作引起的,经验证是在允许范围内的。科技论文。
6、结论
以上以DA算法为基础的滤波器设计必将在实际中得到广泛应用,FPGA技术也将在数字信号处理方面发挥更大的作用。本文的设计正是对该算法的改进,通过串行和并行结构完成了高速滤波器的设计,并证明了这种方法的可行性和高效性。滤波器的工作速度与阶数无关,而取决于输入数据的位宽,串行结构在节约资源的同时并不能提高滤波器的速度,而并行结构正好弥补了串行结构这方面的不足,采用多位同时处理的方式极大地提高了效率,使计算速度可以从根本上翻倍,进而适应数字信号实时处理的要求。
参考文献:
[1] 李明纬,等.应用分布式算法在FPGA平台实现FIR低通滤波器.中国集成电路.2007,(02):49-52.
[2] 程佩青.数字信号处理教程.北京: 清华大学出版社,2001.
[3] Uwe Meyer-Baese.数字信号处理的FPGA实现.(,刘陵).北京:清华大学出版社,2006.
[4] 张明照,等.应用MATLAB实现信号分析和处理.北京:科学出版社,2005.
[5] 王诚,等.Xilinx ISE使用祥解.北京:人民邮电出版社,2005.
2/2 首页 上一页 1 2 |