基于FPGA与MATLAB的IIR滤波器设计与实现
2016-06-07 16:38
597 查看
http://blog.sina.com.cn/s/blog_139b6f6130102whcx.html
一、IIR滤波器理论基础
IIR滤波器,即无限脉冲响应滤波器,其单位脉冲响应是无限长的,其系统传递函数为
系统的差分方程可以写成
二、IIR滤波器的设计方法
一般来讲,IIR滤波器的设计方法可以分为三种:原型转换设计方法、直接设计法、以及调用MATLAB的IIR函数设计。前两种方法都比较麻烦,需要更大的滤波器基础理论知识,因此实际中多采用直接调用MATLAB的IIR函数进行设计。
三、IIR滤波器的MATLAB设计
一是使用MATLAB提供的IIR滤波器函数。
二是直接调用FDTOOL工具设计
以调用Butter函数为例子
滤波后的数据
四、IIR滤波器的FPGA实现
IIR滤波器的两种最基本、使用最为广泛的实现结构——直接型及级联型结构。虽然级联型结构比直接型结构更准确,受参数量化影响较少,但设计起来更负责,所以本设计采用直接型结构。
1.量化直接型结构的IIR滤波器系数
MATLAB输入
[Bb Ba]=butter(N,Wn,'low');
可以看到滤波器系数向量
Ba=[1 -1.79158135278860 2.53189988089812 -2.11822942034193 1.37075629439323 -0.6090389130764730.199331556962956 -0.0431047310152813 0.00580426165430880 -0.000355580604257623]
Bb=[0.00106539452359780 0.00958855071238024 0.0383542028495210 0.08949313998221560.134239709973323 0.134239709973323 0.0894931399822156 0.0383542028495210 0.009588550712380240.00106539452359780]
MATLAB输入
Qb = round(Bb*2^9);
Qa = round(Ba*2^9);
可以看到量化后滤波器系数向量
Qa=[512 -917 1296 -1085 702 -312 102 -22 3 0]
Qb=[1 5 20 46 69 69 46 20 5 1]
根据IIR滤波器系统函数,可以直接写出滤波器的差分方程为
4.1.直接型结构的FPGA实现
根据滤波器的差分方程可以把方程分开零点系数和极点系数两部分组成,
4.2零点系数的FPGA实现
4.3极点系数的FPGA实现
4.4顶层模块实现
4.5直接型结构的FPGA实现后的测试仿真
五、实验结果与分析
从图中可以明显看出,FPGA滤波后的信号几乎接近原始信号,有效地滤除了叠加信号中250hz的高频信号,还原了10hz的低频信号,说明该设计正确,达到设计要求。
六、总结
IIR滤波器因具有较高的滤波效率,十分有利于在不需要 严格线性相位特性的系统中使用,IIR滤波器的FPGA实现相对FIR滤波器来讲要复杂一些,主要原因在于其反馈结构。实现过程中需要注意的诸如系数量化方法、计算输出数据位宽、MATLAB仿真及FPGA实现等关键问题。
一、IIR滤波器理论基础
IIR滤波器,即无限脉冲响应滤波器,其单位脉冲响应是无限长的,其系统传递函数为
系统的差分方程可以写成
二、IIR滤波器的设计方法
一般来讲,IIR滤波器的设计方法可以分为三种:原型转换设计方法、直接设计法、以及调用MATLAB的IIR函数设计。前两种方法都比较麻烦,需要更大的滤波器基础理论知识,因此实际中多采用直接调用MATLAB的IIR函数进行设计。
三、IIR滤波器的MATLAB设计
一是使用MATLAB提供的IIR滤波器函数。
二是直接调用FDTOOL工具设计
以调用Butter函数为例子
滤波后的数据
四、IIR滤波器的FPGA实现
IIR滤波器的两种最基本、使用最为广泛的实现结构——直接型及级联型结构。虽然级联型结构比直接型结构更准确,受参数量化影响较少,但设计起来更负责,所以本设计采用直接型结构。
1.量化直接型结构的IIR滤波器系数
MATLAB输入
[Bb Ba]=butter(N,Wn,'low');
可以看到滤波器系数向量
Ba=[1 -1.79158135278860 2.53189988089812 -2.11822942034193 1.37075629439323 -0.6090389130764730.199331556962956 -0.0431047310152813 0.00580426165430880 -0.000355580604257623]
Bb=[0.00106539452359780 0.00958855071238024 0.0383542028495210 0.08949313998221560.134239709973323 0.134239709973323 0.0894931399822156 0.0383542028495210 0.009588550712380240.00106539452359780]
MATLAB输入
Qb = round(Bb*2^9);
Qa = round(Ba*2^9);
可以看到量化后滤波器系数向量
Qa=[512 -917 1296 -1085 702 -312 102 -22 3 0]
Qb=[1 5 20 46 69 69 46 20 5 1]
根据IIR滤波器系统函数,可以直接写出滤波器的差分方程为
4.1.直接型结构的FPGA实现
根据滤波器的差分方程可以把方程分开零点系数和极点系数两部分组成,
4.2零点系数的FPGA实现
4.3极点系数的FPGA实现
4.4顶层模块实现
4.5直接型结构的FPGA实现后的测试仿真
五、实验结果与分析
从图中可以明显看出,FPGA滤波后的信号几乎接近原始信号,有效地滤除了叠加信号中250hz的高频信号,还原了10hz的低频信号,说明该设计正确,达到设计要求。
六、总结
IIR滤波器因具有较高的滤波效率,十分有利于在不需要 严格线性相位特性的系统中使用,IIR滤波器的FPGA实现相对FIR滤波器来讲要复杂一些,主要原因在于其反馈结构。实现过程中需要注意的诸如系数量化方法、计算输出数据位宽、MATLAB仿真及FPGA实现等关键问题。
相关文章推荐
- matlab 矩阵合并、拼接
- matlab 问题
- MATLAB 求导diff
- MatlabR2014a 安装破解详细图文教程(附下载链接(内附CVX工具箱))
- matlab实现CP分解 代码
- solve mass matrix in matlab
- MATLAB中为控件(uicontrol)绑定Callback函数(回调函数)
- matlab基础
- 深度学习FPGA实现基础知识9(Deep Learning(深度学习)Matlab工具箱下载、安装、测试)
- 深度学习FPGA实现基础知识8(Deep Learning(深度学习)Matlab实现--简单清晰的实验)
- 深度学习FPGA实现基础知识7(深度学习Matlab工具箱代码详解)
- size函数
- MATLAB之fprintf函数的具体使用方法
- MATLAB之fopen函数
- 快速傅里叶介绍-matlab
- MATLAB之kaiserord函数
- matlab--“下标索引必须为正整数类型或逻辑类型”
- matlab读取/播放视频的函数以及写入/合成视频函数
- windows下python调用matlab
- caffe的Matlab接口问题之路径问题