1、 实实 习习 题题 目目 FIR 和和 IIR 滤滤 波波 器器 设设 计计 班 级: 信息 08-1 姓 名: 学 号: 04 号 指导教师: 实验日期: 2011.12.5-2011.12.9 目 录 一、 实习目的 . 2 二、 实习要求 . 2 三、 滤波器的实现 . 2 (一 )、有限冲激响应滤波器 (FIR)的实现 . 2 (二 )、无限冲激响应滤波器( IIR)的实现 . 5 五、 程序代码及运行结果 . 8 (一 )、 FIR 滤波器程序代码 . 8 1、 FIR 低通滤波器实现 . 8 2、 FIR 高通滤波器实现 .10 3、 FIR 带通滤波器实现 .13 4、 FIR
2、带阻滤波器实现 .16 (二 )、 IIR 滤波器程序代码 .19 1、 IIR 低通滤波器实现 .19 2、 IIR 高通滤波器实现 .20 3、 IIR 带通滤波器实现 .22 4、 IIR 带阻滤波器实现 .23 六、 实习总结 .25 七、 实习心得 .26 七、参考文献 .27 FIR 和 IIR 滤波器设计 一、 实习目的 1、 掌握数字滤波器的设计过程; 2、 了解 FIR 和 IIR 的原理和特性; 3、 熟悉设计 FIR 和 IIR 数字滤波器的原理和方法。 二、 实习要求 1、 通过 MATLSB 设计确定 FIR 和 IIR 滤波器系数; 2、 DSP 初始化。 3、 A
3、/D 采样; 4、 FIR 和 IIR 运算,观察滤波器前后的波形变化; 5、 对带有噪声的不同输入信号进行 FIR 和 IIR 滤波,观察滤掉后噪声后的波形; 6、 熟练使用 CCS 对程序进行调试。 三、 滤波器的实现 (一 )、有限冲激响应滤波器 (FIR)的实现 1、 FIR 滤波器的基本结构 数字滤波是将输入的信号序列,按规定的算法进行处理,从而 得到所期望的输出序列。 一个线性位移不变系统的输出序列 y(n)和输入序列 x(n)之间的关系,应满足常系数线性差分方程: 其中 x(n)为输入序列, y(n)为输出序列, ai、 bi 为滤波器系数 N 为滤0 )()()( 110 ni
4、nyainxbny Mi iNi i波器的阶数。 当上式所有 的 ai 均为 0,则得 FIR 滤波器的差分方程: 对式进行 z 变换,可得 FIR 滤波器的传递函数: FIR 滤波器的结构图如图 1 所示 。 图 1 FIR 滤波器的结构 2、有限冲激响应滤波器的 MATLAB 设计 FIR 滤波器系数的产生可以通过 MATLAB 得到。 MATLAB 是 Math Works 公司用于数值计算和信号处理的数学计算工具包,可以方便直观地进行分析、计算和系统仿真 。 FIR 滤波器设计有两种实现方法: 方法 1:直接通过 MATLAB 的滤波器设计函数,其语法如下: b=fir1(n, Wn)
5、 b=fir1(n, Wn, ftype ) b=fir1(n, Wn, Window) b=fir1(n, Wn, ftype, Window) 其中 n 为滤波器的阶数, Wn 为滤波器的截止频率, ftype 用来决定滤波器的类型, 当 ftype=high 时,可设计高通滤波器; 当 ftype=stop 时,可设计带阻滤波器。 Window 用来指定滤波器采用的窗函数类型,其默认值为汉明( Hamming)窗。 方法 2:采用滤波器设计工具箱来设计滤波器的参数,可以方便地得到所需滤波器。该方法按照如下步骤来实现: (1) 打开 MATLAB 滤波器设计工具箱中的滤波器设计与分析工具(
6、 FDATool)。 (2) 在滤波器设计页面中设置滤波器参数: )()( 10 Ni i inxbny)( )()( 10 Ni ii zbzX zYzH滤波器类型选择带通;设计方法选择 FIR(有限冲激响应滤波器)、窗函数法设计;滤波器阶数选择最小阶数,窗类型采用 Kaiser 窗;频率选择归一化频率,阻带 1 设为 0.15,通带 1 设为 0.2,通带 2 设为 0.5,阻带 2设为 0.55;幅度单位选分贝,阻带 1 设为 20dB,通带设为 1dB, 阻带 2设为 20dB。 (3) 单击设计滤波器按钮,在右上窗口可以看到所设计滤波器的幅频、相频等各种图形。 (4) 在 File
7、菜单,选择“ Export”子菜单出现 Export 窗口,选择输出到 Text-file,单击“ OK”按钮即可将参数输出到指定文件中。 本次实习选用方法 1 来求 FIR 滤波器的系数。 3、 FIR 滤波器 DSP 实现 FIR 滤波器的输出表达式: y(n)=b0x(n)+b1x(n-1)+ +bn-1x(n-N+1) 其中 bi为滤波器系数, x(n)为滤波器在 n 时刻的 输入, y(n)为 n 时刻的输出。 其基本算法 : 采用乘法累加运算。即不断地输入样本 x(n),经过 z-1 延时后 ,再进行乘法 -累加,最后输出滤波结果 y(n)。 FIR 滤波器的 DSP 实现有三种方
8、法: 方法一:独立编写汇编语言。 方法二:独立编写 C 语言。 方法三:调用 DSPLIB 库函数。其调用形式有: ushort oflag = fir (DATA *x, DATA *h, DATA *r, DATA *dbuffer, ushort nx,ushort nh) 其中 xnx 为输入向量,其个数为 nx, hnh为滤波器的系数,其阶数为 nh, rnx为输出向量,个数为 nx, dbuffernh+2是延时缓冲区,其长度为 nh = nh + 2。 ushort oflag = fir2 (DATA *x, DATA *h, DATA *r, DATA *dbuffer, u
9、short nx,ushort nh) 4、 FIR 滤波器程序流程图 图 2 FIR 滤波器程序流程图 (二 )、无限冲激响应滤波器( IIR)的实现 1、 IIR 滤波器的基本结构 无限冲激响应滤波器的差分方程 如下: 在零初始条件下,对上式进行 z 变换,得到系统的传递函数: 无限冲激响应滤波器的结构如图 2 所示。 图 3 IIR 滤波器结构 2、无限冲激响应滤波器 (IIR)的 MATLAB 设计 同有限冲激响应滤波器一样,无限冲激响应滤波器也可以在 MATLAB中通过两种不同的方法进行设计。 方法 1:利用滤波器设计函数直接生成滤波器。 MATLAB 中提供了多种 IIR 滤波器的
10、设计方法,包括巴特沃斯滤波器,切比雪夫型、切比雪夫型滤波器,椭圆滤波器等 ,本次实习采用椭圆滤波器求滤波器的 系数ak 和 bk。 方法 2:采用滤波器设计与分析工具设计滤波器。其具体步骤为: (1) 打开 FDATool ; (2) 设置滤波器参数 ; (3) 单击设计滤波器按钮; (4) 单击 File 菜单,选择“ Export”子菜单,选择输出到“ Text-file”,单击“ OK” 。 在本次实习中选择方法一。 3、 IIR 滤波器 DSP 实现 1)、 IIR 滤波器的 DSP 实现方法 IIR 滤波器的 DSP 实现有三种方法: 方法一:独立编写汇编语言。 方法二:独立编写 C
11、 语言。 方法三:调 用 DSPLIB 库函数。其调用形式有: ushort oflag = iircas5 (DATA *x, DATA *h, DATA *r, DATA *dbuffer, short nbiq,ushort nx),其中 h 的存放系数顺序为 h = a11 a21 b21 b01 b11 . a1i a2i b2i b0i b1i。 ushort oflag = iircas51 (DATA *x, DATA *h, DATA *r, DATA *dbuffer, ushort nbiq,ushort nx),其中 h 的存放系数顺序为 h = b01 b11 b21
12、 a11 a21 .b0i b1i b2i a1i a2i。 2)、高阶 IIR 滤波器的实现 一个高阶 IIR 滤波器可以由若干个二阶基本节相级联或并联构成。由于调整每个二阶基本节的系数,只涉及这个二阶基本节的一对极点和零点,不影响其他极、零点,因此用二阶基本节构成的 IIR 滤波器便于系统的性能调整,受量化噪声影响小,因而得到了广泛的应用。其方法是将高阶 IIR 滤波器分解成若干个二阶基本节,然后进行级联来实现。若干个二阶基本节 的结构如图 3 所示。 图 4 i 个二阶基本节 3、 IIR 滤波器程序流程图 开始初始化DSP产生输入数据读入新数据并存放到栈顶滤波处理保滤波结果到输出单元待
13、滤波的样本点数处理完成结束否是图 5 程序流程图 五、 程序代码及运行结果 (一 )、 FIR 滤波器程序代码 CCS 软件环境下主程序代码如下 #include “math.h“ #include “tms320.h“ #include “dsplib.h“ #include “test.h“ short i; short eflag1= PASS; short eflag2= PASS; DATA rNX; DATA *dbptr = void main() int i; short xNX; for(i=0;iNX;i+)xi=0; for (i=0;iNX;i+) xi=(short)
14、(1+sin(PI*3000*i/10000)*sin(PI*4000*i/10000)*32768/3) ; for (i=0; iNX; i+) ri = 0; / clear output buffer (optional) for (i=0; iNH+2; i+) dbi = 0; / clear delay buffer (a must) fir2(x, h, r, dbptr, NX, NH);/双 MAC 运算,速度快 while(1); 1、 FIR 低通滤波器实现 ( 1) MATLAB 程序代码 clear all clc wp=0.4; ws=0.6; B=ws-wp;%
15、计算过渡带宽 N=ceil(6.6*pi/B) %按哈明窗计算滤波器长度 wc=(ws+wp)/2; b=fir1(N-1,wc); %80 point hamming window FIR filter, Wn=0.2 fvtool(b,1) %Flter Visualization Tool 可心以查看幅度响应、冲激响应等 h=buffer(round(b*32768),8); %参数 *215,把小数点移最高位后面后取整,然后排成 8个 %一行便于输出。 csvwrite(table.txt,h) %参数表输出到文件中 %然后只要把参数表从 table.txt 中拷到代码中,每行前面加上
16、 .word 运行 结果如下: N=104 生成 table.txt 文档 -11,-12,12,13,-15,-16,18,20 -23,-26,29,33,-37,-42,47,52 -59,-65,73,81,-89,-99,109,120 -132,-145,158,173,-189,-207,226,247 -269,-294,321,352,-385,-423,466,515 -572,-639,719,816,-938,-1095,1307,1612 -2087,-2936,4911,14758,14758,4911,-2936,-2087 1612,1307,-1095,-93
17、8,816,719,-639,-572 515,466,-423,-385,352,321,-294,-269 247,226,-207,-189,173,158,-145,-132 120,109,-99,-89,81,73,-65,-59 52,47,-42,-37,33,29,-26,-23 20,18,-16,-15,13,12,-12,-11 图形如图 1.1 所示。 图 1.1 幅频响应 ( 2)、 CCS 软件程序代码 Text.h 代码 #define NX 320 #define NH 104 #define MAXERROR 10 #define PI 3.1415926
18、#pragma DATA_SECTION(h,“.coeffs“) DATA hNH= -11,-12,12,13,-15,-16,18,20, -23,-26,29,33,-37,-42,47,52, -59,-65,73,81,-89,-99,109,120, -132,-145,158,173,-189,-207,226,247, -269,-294,321,352,-385,-423,466,515, -572,-639,719,816,-938,-1095,1307,1612, -2087,-2936,4911,14758,14758,4911,-2936,-2087, 1612,1307,-1095,-938,816,719,-639,-572,
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。