当前位置:文档之家› 实验-3-无限冲激响应滤波器(IIR)算法实验

实验-3-无限冲激响应滤波器(IIR)算法实验

实验3 :无限冲激响应滤波器(IIR)算法实验
一、实验目的
1. 熟悉IIR 数字滤波器特性;
2.掌握IIR数字滤波器的设计过程;
3.掌握IIR 数字滤波器性能测试方法。

二、实验设备
1.PC 兼容机
2.WIN7 操作系统
3.Code Composer Studio v5
三、实验内容
1.掌握IIR数字滤波器的基础理论;
2.基于MATLAB的IIR数字滤波器参数确定方法;
3.采用C语言编程实现低通IIR 滤波器;
4.掌握基于CCS的波形观察方法;观察滤波前后的波形变化。

四.实验原理分析
要求:使用低通巴特沃斯滤波器,设计通带截止频率f p为1kHz、增益为-3dB,阻带截止频率f st为12kHz、衰减为30dB,采样频率f s为25kHz。

设计:
通带截止频率为:f p = 1000Hz,f st = 12000Hz
(一)、滤波器参数计算
●模拟预畸变通带截止频率为:w p = 2f s tan(2πf p/(2f s)) = 6316.5 弧度/秒●模拟预畸变阻带截止频率为:w st = 2f s tan(2πf st/(2f s)) = 794727.2 弧度/秒
由式(7.5.24)
●N = 0.714,则:一阶巴特沃斯滤波器就足以满足要求。

一阶模拟巴特沃斯滤波器的传输函数为:H(s)=w p/(s+w p)=6316.5/(s+6316.5) 由双线性变换定义s=2f s(z-1)/(z+1)得到数字滤波器的传输函数为:
因此,差分方程为:y[n]=0.7757y[n-1]+0.1122x[n]+0.1122x[n-1]。

(二)、基于MATLAB的滤波器参数求解
(1)IIR数字滤波器阶次的选择的MATLAB函数
[N,w c] = buttord(w p,w st,Rp,As);
[N,w c] = cheb1ord(w p,w st,Rp,As);
[N,w c] = cheb2ord(w p,w st,Rp,As);
[N,w c] = ellipord(w p,w st,Rp,As);
对低通滤波器,必须有w p < w st
对高通滤波器,必须有w p > w st
对带通滤波器,必须有w s1 < w p1 < w p2 < w s2
对带阻滤波器,必须有w p1 < w s1 < w s2 < w p2
(2) IIR数字滤波器的设计
[b,a] = butter(N,wc,’ftype’)
[b,a] = cheby1(N,wc,’ftype’)
[b,a] = cheby2(N,wc,’ftype’)
[b,a] = ellip(N,wc,’ftype’)
(三)、基于C语言编程的IIR 数字滤波器编程实现
程序流程图
五.实验步骤
1.打开CCS,进入CCS 的操作环境。

2.打开工程,浏览程序:工程目录为C:\ICETEK\ICETEK-DM6437-A\Lab0402_IIR
3.点击图标,CCS 会自动编译、链接和下载程序。

4.运行程序。

可以观察收到的数据。

*选择菜单Tools->Graph->Dual Time,进行如下设置:
Dual Time 参数设置
*选择菜单Tools->Graph->FFT Magnitude,新建2 个观察窗口,分别进行如下设置:
5.设置断点:在有注释“break point”的语句设置软件断点。

使用菜单的View->Break
points,打开断点观察窗口,在刚才设置的断点上右键->Breadk point properties 调出断点的属性设置界面,设置Action 为Refresh All windows。

则程序每次运行到断点,所有的观察窗口值都会被刷新。

其中,输入波形:一个低频正弦波与一个高频正弦波的叠加;输出波形:经过低通滤波后的低频正弦波。

6.运行并观察结果:
⑴ F8 键运行程序。

⑵观察“IIR”窗口中时域图形;观察滤波效果。

7.退出CCS
六.实验结果
输入波形为一个低频率的正弦波与一个高频的余弦波叠加而成。

如图:
通过观察频域和时域图,得知:输入波形中的低频波形通过了滤波器,而高频部分则被衰减。

六.问题与思考
基本任务:
1.试微调(±0.0001)改变程序中f U的取值,观察步长因子μ在自适应算法中所起的作用。

2.确定程序中的信号频率,试选用设计不同的信号、噪声组合,基于MATLAB设计不同的类型的滤波器,并基于CCS实现,并观察实验的结果。

3.分析实验程序,细化算法流程图。

4.结合CCS的使用,分析实验结果
提高任务:
5.尝试使用信号源生成组合信号,经过A/D采样后,送IIR滤波器实现。

源代码:
#include"math.h"
#define IIRNUMBER 2 /*典范性的滤波器阶数*/
#define SIGNAL1F 1000 /*正弦信号频率,代码中没有使用*/
#define SIGNAL2F 4500 /*正弦信号频率,代码中没有使用*/
#define SAMPLEF 10000 /*采样频率,代码中没有使用*/
#define PI 3.1415926
float InputWave(); /*输入给IIR滤波器的信号,每次输出一个点*/ float IIR(); /*IIR滤波,每次输出一个点*/
/*滤波器的设计采用了案例的结果,应该重新设计*/。

相关主题