DSP嵌入式教学实验箱操作教程:4-5 无限冲激响应滤波器(IIR)算法(MATLAB 辅助
[复制链接]
本帖最后由 创龙教仪 于 2024-6-6 14:05 编辑
一、实验目的
本节视频的目的是了解IIR滤波器的特点,掌握Matlab辅助设计滤波器系数的方法,并实现IIR滤波器滤除高频信号。
二、实验原理
IIR滤波器
IIR无限冲激响应数字滤波器(infinite impulse response digital filter)是对单位冲激的输入信号的响应为无限长序列的数字滤波器。可分为一维、二维或多维无限冲激响应数字滤波器。它的输出y(n)由当前的和过去的输入信号x(n)及过去的输出信号共同决定。IIR的幅频特性精度很高,不是线性相位的,可以应用于对相位信息不敏感的音频信号上。
对于IIR滤波器,冲激响应理论上应会无限持续,其输出不仅取决于当前和过去的输入信号值,也取决于过去的信号输出值。其系统函数如下:
无限冲激响应数字滤波器的差分工程如下:由IIR的系统函数出发,可视作两个系统的级联,并且合并了公共的延时支路。
IIR滤波器特性
无限冲激响应数字滤波器具有以下特性:
(1)系统函数可以写成封闭函数的形式。
(2)采用递归型结构,即结构上带有反馈环路。IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。由于运算中的舍入处理,使误差不断累积,有时会产生微弱的寄生振荡。
(3)在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,其设计工作量比较小,对计算工具的要求不高。
(4)相位特性不好控制,对相位要求较高时,需加相位校准网络。
IIR滤波器的设计
设计IIR数字滤波器实质上就是找到一个使其频率响应H(Z)满足给定的通带截止频率、通带衰减系数、阻带截止频率及阻带衰减系数的可以在物理上实现的系统函数H(Z)。
根据所要设计滤波器的参数去确定一个模拟滤波器的传输函数,然后再根据这个传输函数,通过双线性变换、或脉冲响应不变法来进行数字滤波器的设计。它的设计比较复杂,复杂在于它的模拟滤波器传输函数H(s)的确定。这一点可以让软件来实现。具体实现步骤:
(1)先确定需要一个什么样的滤波器,巴特沃斯型,切比雪夫型,还是其它什么型的滤波器。
(2)当选定一个型号后,就可以根据设计参数和这个滤波器的计算公式来确定其阶数、传输函数的表达式。通常这个过程中还存在预扭曲的问题(这只是双线性变换法所需要注意的问题,脉冲响应不变法不存在这种问题)。
(3)确定H(S)后,就可以通过双线性变换得到其数字域的差分方程。
MATLAB FIR 滤波器辅助设计,生成滤波器系数。
打开 Matlab 软件,并打开"Filter Designed&Analaysis Tool"工具,在弹出的界面中按照所需滤波器修改以下参数:
(1)滤波器类型:低通Lowpass;
(2)滤波方式:巴特沃斯IIR(Butterworth);
(3)滤波器阶数:Specify order(4+1阶);
(4)采样频率:1000Hz;
(5)通带截止频率:150Hz;
滤波器设计分析工具
设置好参数后,转换为单精度再导出生成包含滤波器系数的.h头文件,将该头文件的数据复制,即可用于IIR函数。
程序流程设计
设计中首先产生带有噪声的原始信号,接着进行IIR滤波,最后截取滤波后有用的信号输出。
数字信号处理库
DSPLIB 包含优化的、C语言可调用的通用信号处理例程,用于计算密集型实时应用程序。 调用这些例程的运行速度比直接用C语言编写的等效代码快得多。使用DSPLIB可以缩短应用程序开发时间。
DSPLIB 3_4_0_0包括适用于 C64x+ 或 C66x 或 C674x 处理器的 Windows 或 Linux 安装可执行文件。 每个可执行文件安装一个组件包存储库、一个文档目录、一个 Eclipse 插件目录和一个扩展的组件目录结构,其中包含组件库、头文件和测试示例。
TMS320C6748处理器使用的是dsplib_c674x_3_4_0_0。
dsplib_c674x_3_4_0_0
将DSPLIB安装到CCS5.5 的安装路径,安装完成后会有相应的文件夹出现。源码所在路径:\dsplib_c674x_3_4_0_0\packages\ti\dsplib\src
函数源码
IIR滤波函数
使用 DSPLIB 的库来进行FIR滤波。使用时,直接调用“DSPF_sp_iir.h”文件即可。
API接口
void DSPF_sp_iir (float* restrict y1, const float* x, float* restrict y2, const float* hb, const float* ha, int nr);
程序使用 DSPLIB 的库来进行IIR滤波,调用的程序源码和使用说明可以安装DSPLIB后查看。调用的IIR滤波函数中,第一个参数是延迟元素值。第二个参数是指向输入数组的指针。 第三个参数是指向输出数组的指针。第四个参数是自回归滤波器系数。第五个参数是动态平均滤波器系数。第六个参数是输出样本数。
三、操作现象
本实验所需硬件为实验板、仿真器和电源。
硬件连接
(1)连接仿真器和电脑的USB接口。
(2)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。
软件操作
导入工程,选择Demo文件夹下的对应工程
编译工程,生成可执行文件
将CCS连接实验箱并加载程序
程序加载完成后点击运行程序
运行程序后,程序执行完成后会在断点处停下。
接下来通过CCS的图形窗口查看FIR的滤波结果。
先点击 CCS 菜单"Tools->Graph->Single Time",在弹出的界面中设置相关参数,查看原始时域信号+噪声波形。
再次点击 CCS 菜单"Tools->Graph->Single Time",在弹出的界面中设置相关参数,可查看滤波后时域信号波形。
然后点击CCS菜单"Tools->Graph->FFT Magnitude",在弹出的界面中设置相关参数,查看原始频域信号+噪声波形。
再次点击CCS菜单"Tools->Graph->FFT Magnitude",在弹出的界面中设置相关参数,查看滤波后频域信号波形。
对比滤波前后的波形,可知,输入波形中的低频波形通过了滤波器,而高频部分被滤除。
实验结束后,点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。
|