【FPGA仿真】FIR与IIR数字滤波器

【FPGA仿真】FIR与IIR数字滤波器

      • 实验内容
      • 实验环境
      • 实验原理
          • FIR数字滤波器
          • IIR数字滤波器
      • 四、仿真步骤
          • 滤波器系数设计
          • IIR数字滤波器
      • 五、实验结果
          • 8阶FIR滤波器
          • 3阶IIR滤波器
      • 六、仿真文件

更新时间:2020.12.27

实验内容

本实验是基于FPGA制作8阶FIR(有限长单位冲激响应滤波器)数字滤波器。利用matlab中的FDAtool工具生成截止频率为1kHz的FIR滤波器系数,通过QuartusII进行Verilog语言编写滤波器算法(包括信号延时、系数相乘、累加)。最后利用matlab生成多频率合成的测试信号,通过滤波器观察滤波器正确性和实验效果。并基于FIR的方法,制作IIR的前馈网络与反馈网络,完成简易的一级IIR滤波器。

实验环境

操作系统:Windows 10 家庭中文版,64位
Quartus II 13.1 (64-bit) Web Edition
ModelSim-13.1.0.162
Matlab 2016b

实验原理

FIR数字滤波器

假设一个信号是由两个正弦信号叠加所得,将其傅里叶变换后可得其频谱,即两根竖直直线。而滤波器则是对信号频域进行处理,如加窗相乘,从而滤除不需要的频率,保留需要的频率。将其变换回时域则就是我们所期望输出的波形。
【FPGA仿真】FIR与IIR数字滤波器_第1张图片
根据信号与系统所学内容,我们知道信号在频域内相乘相当于时域内卷积。因此,我们希望将窗函数的时域波形(滤波器系数)与原信号进行卷积,即可直接得到滤波信号。

FIR滤波器是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统,在通信、图像处理、模式识别等领域都有着广泛的应用。

为了使信号处理能够不发生失真,信号的采样速度必须满足香农采样定理(采样频率应该不小于模拟信号频谱中最高频率的2倍),一般取信号频率上限的4-5倍作为采样频率。

IIR数字滤波器

IIR又名“无限脉冲响应数字滤波器”,或“递归滤波器”。

在满足相同指标下,IIR数字滤波器因具有结构简单、占用内存空间少、运算速度快、较高的计算精度和能够用较低的阶数实现、较好的选频特性等特点,在不要求严格线性相位的情况下,IIR滤波器的应用相当广泛。

其系统函数与差分方程如下:
【FPGA仿真】FIR与IIR数字滤波器_第2张图片
由差分方程可知IIR滤波器存在反馈,因此在FPGA设计时要考虑到优先字长效应带来的影响。差分方程中包括两部分:输入信号x(n)的M节延时网络,相当于FIR的网络结构,实现系统的零点;输出信号y(n)的N节延时网络,作为系统的反馈,实现系统的极点。其设计思路如下图所示:
【FPGA仿真】FIR与IIR数字滤波器_第3张图片

四、仿真步骤

滤波器系数设计

1、利用matlab中FDAtool配置滤波器并得到滤波器系数
(1)打开matlab,在命令行窗口中输入“fdatool”,选择滤波器类型,并输入参数(滤波器阶数=8、截止频率=10kHz,Fpass=1kHZ,Fstop=3kHz等),点击“Design Filter”。
【FPGA仿真】FIR与IIR数字滤波器_第4张图片
(2)点击“file”→“export”,导出滤波器系数。
(3)将系数放大、取整、取正便于后续FPGA使用。
(4)将数据保存到.m文件。

2、打开“QuartusII”编写verilog滤波代码
(1)创建工程
(2)滤波器分为三级流水线内容
a.信号输入(8位)并延迟
b.将滤波器系数导入并与信号对应相乘
c.乘积累加求和得到输出结果(16位)

3、用matlab生成测试波形
(1)生成频率为300Hz(最高可取1k但考虑到仿真波形单位周期采样点过少)、3kHz、5kHz正弦波并叠加。
(2)将数据取正(加一个常数b)、放大(乘一个系数k)、取整,使其在00H-FFH之间,并写入.txt文件。注意,此处需多次调整b和k的值。

4、编写modelsim仿真代码
读取上述.txt文件内数据作为滤波器输入,并配置时钟、输出。注意,时钟频率应大于两倍输入信号输入频率为宜。

5、modelsim仿真,观察实验效果,总结实验结论

IIR数字滤波器

1、使用matlab中FDAtool配置滤波器并得到滤波器系数,同上。Fpass=1kHz,三阶。导出零、极点,并放大2的n次方倍(方便代码中使用位移代替除法)。仿真输入波形同上(300Hz、3kHz和5kHz分量)。

2、verilog设计滤波器。注意事项如下:
A)所有变量应设为有符号变量,且须注意位宽的设计。
B)由于反馈应待式子完全计算完后再传递,因此存在时间先后,必须使用状态机。状态个数为k,则每k个时钟输入一个新的信号。
C)反馈系数第一位(原来为1,放大后为2^n)并无实际用处,即反馈计算式比前馈少一项。
D)利用二进制右移实现除以2的n次方,且前面补n位符号位。

五、实验结果

8阶FIR滤波器

滤波器系数
【FPGA仿真】FIR与IIR数字滤波器_第5张图片

仿真波形
【FPGA仿真】FIR与IIR数字滤波器_第6张图片

3阶IIR滤波器

滤波器系数
【FPGA仿真】FIR与IIR数字滤波器_第7张图片
【FPGA仿真】FIR与IIR数字滤波器_第8张图片

仿真波形
【FPGA仿真】FIR与IIR数字滤波器_第9张图片

六、仿真文件

点击此处下载

你可能感兴趣的:(课程项目,嵌入式,fpga,仿真器,iir滤波器,matlab)