IIR与FIR滤波器设计与比较要点.pdf

上传人:tbuqq 文档编号:5197177 上传时间:2020-02-19 格式:PDF 页数:36 大小:1.77MB
返回 下载 相关 举报
IIR与FIR滤波器设计与比较要点.pdf_第1页
第1页 / 共36页
IIR与FIR滤波器设计与比较要点.pdf_第2页
第2页 / 共36页
IIR与FIR滤波器设计与比较要点.pdf_第3页
第3页 / 共36页
IIR与FIR滤波器设计与比较要点.pdf_第4页
第4页 / 共36页
IIR与FIR滤波器设计与比较要点.pdf_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《IIR与FIR滤波器设计与比较要点.pdf》由会员分享,可在线阅读,更多相关《IIR与FIR滤波器设计与比较要点.pdf(36页珍藏版)》请在三一文库上搜索。

1、DSP 课程设计 实验报告 FIR与IIR 滤波的 DSP 实现以及二者的比较 指导教师:高海林 院(系):电信学院 设计人员:白雪学号: 07211225 邵辰雪学号: 07211243 成绩:工程设计 50 报告20 答辩30 总分 评语: 指导教师签字: 日期: 2 / 36 目录 一、设计任务书2 二、设计内容2 三、设计方案、算法原理说明2 四、程序设计、调试与结果分析11 五、设计(安装)与调试的体会32 六、 参考文献34 3 / 36 一、设计任务书 在信号与信息处理中,提取有用信息就要对信号进行滤波。利用DSP 可以实 时地对信号进行数字滤波。 本设计要求利用 DSP 的DM

2、A 方式进行信号采集和信号输 出,同时对外部输入的信号进行数字滤波。在滤波时同时用 fir 与iir滤波器进行 滤波,并比较二者的区别。 二、设计内容 (1)对DMA 进行初始化; (2)对A/D、D/A进行初始化; (3)编写DMA 中断服务程序,实现信号的实时滤波; (4)利用CCS 信号分析工具分析信号的频谱成分,确定滤波器的参数, 利 用MATLAB 设计数字滤波器,提取滤波器参数; (5)设计数字滤波算法, 或调用 DSPLIB 中的滤波函数, 实现对信号的 fir 滤波。 (6)比较加不同窗和阶数时 fir 滤波器的滤波效果; (7)设计数字滤波算法, 或调用 DSPLIB 中的滤

3、波函数, 实现对信号的 iir 滤波。 (8) 比较fir 数字滤波器与 iir数字滤波器的效果 三、设计方案、算法原理说明 (一) 硬件原理 : McBSP 是多通道缓冲串行口,他支持全双工通信,双缓冲数据寄存器,允许连 续的数据流。支持传输的数据字长可以是8 位、12 位、16 位、20 位、24 位或 32 位。并且内置 u 律和 A律压扩硬件。 McBSP在结构上可以分为一个数据通道和一个控制通道。数据通道完成数据的 发送和接受。 控制通道完成的任务包括内部时钟的产生、帧同步信号产生、 对这 些信号的控制及多通道的选择等。控制通道还负责产生接口信号送往CPU ,产生 同步事件通知 DM

4、A 控制器。 在 CCS集成开发环境中, 与 McBSP 相关的头文件有: regs54xx.h 、mcbsp54.h。 在这两个头文件中,定义了McBSP 串行口的寄存器资源及使用方法。 TLC320AD50C是 TI 公司生产的 SIGMA-DELTA 型的 16 位 A/D、D/A 转换电路, 他的采样速率最高可达22.05kb/s ,内涵抗混叠滤波器和重构滤波器,属于模拟 接口芯片(AIC) ,它有一个能与多种昂DSP芯片相连的同步串行通信接口,其采 样速率课通过 DSP编程来设置。在 DAC 之前有一个插值滤波器一保证输出信号平 4 / 36 滑,在 ADC 之后有一个抽取滤波器以提

5、高输入信号的信噪比。AD50C 片内还包括 一个定时器(调整采样率和帧同步延时)和控制器(可编程的增益放大器,锁相 环 PLL,通信协议等)。AD50有 28 脚的塑料 SOP 封装(带 DW 后缀)和 48 脚的塑 料扁平 QFP封装(带 PT后缀) ,体积较小,适用于便携设备。AD50C 的工作温度 范围是 0-70 摄氏度,单一 5V电源供电或 5V模拟电源和 3.3V 数字电源供电, 最 大功耗为 120mW 。 在 CCS集成开发环境中,与TLC320AD50C CODEC相关的头文件是codec.h 。 在这个头文件中, 定义了与 ad50CODEC 相关的枚举变量和库函数。 除了

6、可以调用 codec.h 中提供的库函数之外, 还可以利用这些枚举变量自己重新编写codec 函 数,使用枚举变量相互产生所需要的ad50 寄存器的初始化值。 Codec.h 中的库 函数位于函数库 dsk5402.lib和 drv5402.lib中。 (二) 滤波器的理论设计分析 1. 直接存储器访问 DMA : 直接存储器访问 (Direct Memory Access,简称 DMA) 是 C54x DSP非常重要的 片上外设, DMA 控制器可以完成数据传输而不影响CPU ,因此数据传输速度快。在要求信号 实时采集和处理的系统中常采用DMA 方式进行信号采集与传输。 本实验利用 DMA

7、通道 2 与 McBSP1 通道结合来读取AD 转换数据,利用DMA 通道 3 与 McBSP1 通道结合来将处理后的数据发送至DA。 当一组数据处理完后,将数据存放在存储区out_buffer+frame*0x100中, 选择 out_buffer+frame*0x100为 DMA 通道 3 传送数据首地址,并选择源地址工 作在不调整模式。 2.IIR滤波原理: IIR 数字滤波器差分方程的一般形式为: 式中ai 、bi 为滤波系数。当 bi 全为零时,该滤波器为 FIR数字滤波器;当 bi 不全为零时, 则为IIR 滤波器。IIR 数字滤波器可用直接型、 级联型和并联型三种 基本结构实现,

8、其基本组成单元如图1所示。 对于二阶 IIR 数字滤波器,其传递函数为:n时刻IIR 数字滤波 器输出和输入关系为: 其中x(n) 是输入序列, y(n) 是输出序列, ai 、bI 为滤波 器系数。因此滤波器的输出可以用硬件乘法器和加法器实现。 在本实验中将 IIR 滤波器的系统函数 H(z)分解为 n个二阶 IIR 滤波器级联的 形式进行运算,这样可以减小量化误差。 5 / 36 3.IIR滤波函数 本实验信号滤波算法是直接从TMS320c54XDSPLIB 库中调用 IIR 函数。 IIR 函数调用格式: iircas4(DATA *x,DATA *h,DATA *r,DATA *d,

9、ushort nbiq, ushort nx); iircas5(DATA *x,DATA *h,DATA *r,DATA *d, ushort nbiq, ushort nx); iircas51(DATA *x,DATA *h,DATA *r,DATA *d, ushort nbiq, ushort nx); iir32(DATA *x,LDATA *h,DATA *r,LDATA *d, ushort nbiq, ushort nx); 其中,iircas32函数用于双精度 IIR 滤波器; iircas4函数用于二阶级联直 接 II型滤波器,每项含 4 个系数;iircas5函数用于二

10、阶级联直接II型滤波器, 每项含 5 个系数; iircas51二阶级联直接 I 型滤波器,每项含五个系数。 调用 matlab 产生滤波器系数时,由于a0始终为 1,所以可以产生二阶级联 型系数,每项调用 a1,a2,b0,b1,b2五个系数。iircas5 用于通过各部分的放缩系 数使各部分增益小于1 的情况同时防止溢出的情况。在IIR 数字滤波器的实现 中,直接 II型相比直接 I 型节省了一半的延迟单元,因而成为IIR 滤波器实现 最常用的形式。 综上所述,我们采用 irrcas5 函数实现信号的滤波。 调用参数说明: iircas5(DATA *x, DATA *h, DATA *r

11、, DATA *dbuffer, ushort nbiq,ushort nx) xk 为输入数组, hk 为H(s) 系数数组,按照 a11 a21 b21 b01 b11 a1i a2i b2i b0i b1i 的顺序输入,其中 i 为biquad 的个数 ; rnx 为输出数组, dbuffer 为延迟数据区, nbiq 为H (s)分成二阶滤波器的个数 nx 为输入长度 . 相比较与其他几种调用函数, 4.Fir滤波原理 : 假设 FIR 滤波器的单位脉冲响应为h0 、h1 、. 、hN-1,xk为待滤波 的输入信号,则滤波器输出为yk=hk*xk= 进行信号滤波实际上师计算序列的线性卷

12、积。在实验中滤波器单位脉冲响应 hk 是有限长 N,而 xk 一般是外部输入的长序列, 因而采用重叠像假发计算卷 积。重叠相加法是求解段序列与长序列卷积的一种方法。首先将输入长序列分解 为短序列,这些短序列分别于hk 卷积,将每段计算结果中后N-1 个数据保留 在一个缓冲区中,以便于下一段卷积结果进行重叠相加。 5.FIR 滤波函数 本实验信号滤波算法是直接从TMS320c54XDSPLIB 库中调用 FIR 函数。 FIR 函数调用格式: oflag = short fir(DATA *x, DATA *h, DATA *r, DATA *dbuffer, ushort nh, ushort

13、 nx) 功能用 FIR 滤波器对信号滤波 6 / 36 调用参数说明: xnx 表示含有 nx 个实数的实输入信号向量; hnh 表示含有 nh 个实数的系数向量,按自然顺序 排列,即滤波器的单位脉冲响应。 rnx 表示含有 nx 个实数的输出向量; 允许原位运算,即r=x。 dbuffernh 延迟缓冲区;对存储器的要求同hnh 。 nx 向量 x 中实数的个数; nh 向量 h 中系数的个数; oflag=1 有溢出 ; oflag=0 无溢出 (三)设计流程图: 利用硬件实现滤波器的信号滤波,就是将 MATLAB 所产生的系数, 与被取样的 实时信号进行运算。 将滤波器系数导入程序当中

14、一般有两种方式: 一、是将 MATLAB 产生的系数,生成头文件,在程序中进行调用。 二、将 MATLAB 产生的系数写入数据段中, 在程序中调用, 此过程涉及到 IIR 滤波器的系数被截取,量化,调整和量化误差的产生。 信号与滤波器系数的运算也有两种方法: 一、调用 DSPLIB中的 IIR 、FIR 调用函数。 二、利用 C语言,编辑一段程序进行运算。 A/D 、D/A 初始化 DMA 通道的初始化 DMA方式接收A/D 数据,将数据存储 等待 DMA 接收中断 MATLAB中 FDATOOL 设计滤波器 IIR FIR IIR 系数的量化、 调整与变换 信 号 的 滤 波 函 数 调用

15、波形的产生 经 DMA 输出 分配各数据段, 并且 给个数据段赋值 7 / 36 (四)系数的导入与量化 1. 头文件方式导入 在MATLAB 中利用 FDATOOL产生所需滤波器,选择菜单Targets 一Export to Code Composer Studio ? IDE 打开Export to C Header File 对话框,选择C header file, 指定变量名 ( 滤波器阶数和系数向量 ) , 输出数据类型可选浮点型或32b、 16b 整型等。根据自己安装选择目标板板号和处理器号。单击OK 。 保存该头文件,需指定文件名和路径,打开IIR 工程文件夹,该滤波器系数 头文

16、件已含在工程中。 该头文件用到 MatLab中的tmwpytes.h ,需把该文件也包含 在工程中还要在原文件中声明包含滤波器参数头文件即: #include头文件名称 includetmwpytes.h 然后编译、链接工程添加的头文件自动在工程目录中显示目标DSP 自动 为滤波器系数分配相应的存储空间。打开系数文件查看生成的滤波器系数,可看 到系数是对称的,这由所选滤波器类型而定。 由于本次的设计的拓展部分主要以设计IIR 滤波器为主要目标, IIR 滤波器系 数存在着格式转换和量化的问题, 不能够直接导入到 CCS 中直接去进行硬件实现, 这样会导致滤波器系数的信息被截断,信息丢失, 导致

17、滤波器无法实现。 所以我 采用第二种方法。 2. 直接写入存储器 8 / 36 滤波器的系数可以用 FDATOOL进行计算出来,也可以导出到MATLAB 的 workspace中去计算量化。 我们所使用的 DSK5402 实验板是 16位定点运算,而 MATLAB 所产生的系数,并 不是定点数而是浮点数。 所以需要将 MATLAB 所产生的浮点数进行转化, 使其转换 为浮点数,浮点数格式的导出: 9 / 36 一般在 FIR滤波器中这种定点的转化都是使用MATLAB中FDATOOL的Export to C Header File方式来进行转化。 但是与 FIR不同的是 IIR 不一定是稳定的系

18、统, 即使稳定,也未必能够达到硬 件实现。 MATLAB 提供的转化方法并没有对于越界的系数进行量化。例如: Sos=1,2,1,1,-1.19,0.45 本是一个稳定的高阶 IIR 滤波器的系数矩阵中的一维向量,表示直接II 型级 联形式的一部分。经过 MATLAB 的16位定点量化后成为了 Sos=32767,32767,32767,32767,-32768,14715 成为了一个不稳定的系统,从而硬件实现就不可能了。 A系数的转化 MATLAB 的带符号定点 16位转化是,将所有大于 1,小于-1的数值全部归一化, 造成了巨大的量化误差,众所周知,IIR 滤波器的实现过程中存在着反馈,于

19、是 累进量化误差越来越大造成了系统的不稳定。量化问题中不得不提的还有一个标 准格式问题。由于MATLAB 所产生的浮点系数并没有依照CCS 中DSPLIB 的IIR 能够调 用的数据格式。 经过查阅资料以及多次的失败尝试积累出的经验,了解到我所要 设计的 IIR 滤波器所需使用的 IIRCAS5调用命令使用的是 Q15 数据格式,而 MATLAB 所产生的浮点值是 Q14 数据格式,而在进行定点转换时, MATLAB 没有将 Q14 的数据 格式量化,进行大误差归一化直接转化为Q15 的定点形式所以造成硬件实现的失 败。MATLAB 产生的系数一般已经是满足ccs调用函数的 second-or

20、der 形式了。 10 / 36 一次滤波器为例,产生的系数为: - Section #1 - Numerator: 1 2 1 Denominator: 1 -1.195433962890738 0.69059892324149696 Gain: 0.12379124008768973 - Section #2 - Numerator: 1 2 1 11 / 36 Denominator: 1 -0.94280904158206336 0.33333333333333343 Gain: 0.09763107293781749 - Section #3 - Numerator: 1 2 1 D

21、enominator: 1 -0.84028692165132679 0.18834516088404471 Gain: 0.087014559808179473 - Output Gain: 1 其中Numerator就是分子部分,也就是 b,其中 Deneminator就是分母部分也 就是a,Gain就是增益,一般计算系数,只需将分子部分乘以各部分增益,在转 化为定点数。分母部分只需将其转化为定点部分就可以了。但是,这个系数中, 存在着一项 a11的情况,我才 用了如下的公式来进行量化和数据格式转换: a=; b=; a=a/2*32767*g; b=b/2*32767 其中, a为分母,

22、 b为分子; g为各项增益 这个公式所形成的矩阵就可以应用到IIRCAS5的数据格式要求中,减小了溢 出的可能性。 C.误差分析 (1) 对IIR 数字滤波器的系数,采用定点Q0 格式进行数据的处理,将引入系数 量化误差; (2) 对输入的测试信号,采用定点Q0 格式进行数据的处理,将引入输入信号 的量化误差; (3) 由于使用的 AD,D A转换器件为有限字长, 如D A转换器的字长仅 10 b 或12 b。在软件程序中事先要把数据化为相同的字长位数,再送到D A 转换器, 也将引入量化误差。 (4) 对数字滤波的运算过程编制相应的程序,其中滤波器选用直接型、级联 型还是并联型,将产生不同的

23、运算量化误差。 四、程序设计、调试与结果分析 本次试验使用的 FIR与IIR滤波器程序主体大致相同, 所以只是对 fir_dma.c 中的与 IIR与FIR两种不同的滤波器的相关系数进行了修改,下面列出的是IIR滤波器的 设计程序。 (一)准备工作: 需要将头文件等库函数都装入到指定位置: 1、drv5402.lib是软件仿真所用的仿真器所必需的库文件; 2、dsk5402.lib是驱动 DSK 板所必需的库文件; 3、rts.lib,这个库提供目标 DSP 运行时间支持 (runtime-support)。 由于程序没有 #include ,因此本程序不需要头文件。 上图是编译成功的结果显示

24、: 无错误和警告! 这是最终调试成功的结果, 首 次运行时有 11个错误,主要是 _cosx和_COSX 的混淆,分号的误写等。 因此,本程序所使用的配置文件有: (1)、-c ,即源程序文件; (2)、-o,ifr_dma.out即输出文件(默认在 Debug 目录); (3)、-l rts.lib等库文件。 13 / 36 (二)程序清单: 通过理解 iir的基本原理,也可以通过 c语言或是汇编语言进行编写, 同样可以 达到滤波的效果。 因为有调用函数,使用起来比此程序方便,所以只是用了函数来实现。 1主程序: /* 声明头文件 */ #include #include #include

25、#include #include #include /*/ /* Function Prototypes */ /*/ void delay(s16 period); extern void DMAC2ISR();/*声明DMAC2ISR为外部函数 */ /*/ /* 全局变量的定义 */ /*/ HANDLE hHandset; unsigned int dmsefc, dmmcr, dmctr, src_addr, dst_addr; unsigned int dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dm

26、gda, dmgcr, dmgfr; /* 给输入缓冲区建立字段 */ #pragma DATA_SECTION(inp_buffer,“audio_buffer“); int inp_buffer0x200; /* 给输出缓冲区建立字段 */ #pragma DATA_SECTION(out_buffer,“outt_buffer“); int out_buffer0x200; /* 为系数建立字段 */ #pragma DATA_SECTION(coeffs,“coefficients“); /* iir,butterworth低通滤波器 fs=16000 fc=2000Hz*/ int

27、coeffs15= -13765, 14 / 36 3085, 1425, 1425, 2851, -19585, 11314, 1756, 1756, 3513, -15446, 5461, 1846, 1846, 3693 ; /*fir hann低通fs=16000,fc=2000*/ /int coeff16= -43, -178, -407, -353, 671, 2968, 5860, 7903, 7903, 5860, 2968, 671, -353, -407, -178, -43 ; #pragma DATA_SECTION(delaybuff,“delayb“); int

28、delaybuff6=0; /int delaybuff16=0 /* 给中断服务寄存器定义变量 */ int frame=0; int flag=0; int temp; int currbuff = 0; /* delayptr指针变量指向延迟缓冲区的首地址*/ int *delayptr1 = interrupt void DMAC2ISR(); /*/ /* 主程序 */ /*/ void main() s16 cnt=2; 15 / 36 /* 需要用到的 bois 的部分定义 */ BSCR = 0x8806; XPC = 0; PMST = 0xA0; brd_set_cpu_f

29、req(100); TIMER_HALT(0); brd_set_wait_states(7, 7, 9); TIMER_RESET(0); IMR=0; / 禁止所有中断 if(brd_init_bios() return; while(cnt-) brd_led_toggle(BRD_LED0); / 切换LED 指示灯 0的显示状态 delay(1000); brd_led_toggle(BRD_LED1); / 切换LED 指示灯 1的显示状态 delay(1000); brd_led_toggle(BRD_LED2); / 切换LED 指示灯 2的显示状态 delay(1000);

30、/* 初始化 codec */ hHandset = codec_open(HANDSET_CODEC); /* 给一个句柄 */ /* 设置codec变量*/ codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC 15位模 式*/ codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC 15位模 式 */ codec_ain_gain(hHandset, CODEC_AIN_6dB); /* 6dB的输入增 益ADC */ codec_aout_gain(hHandset, CODEC_AOUT_MIN

31、US_6dB); /* -6dB的输出 衰减 DAC */ 16 / 36 codec_sample_rate(hHandset,SR_16000); /* 设置抽样频 率为16000Hz */ ?/* 清除DMAC2的中断标志 */ INTR_CLR_FLAG(DMAC2); /* 重置DMA 通道*/ dma_reset_all(); /* 初始化 DMA 通道2 */ dmsefc = (DSYNC_REVT1 #include extern void delay(s16 period); extern unsigned int channel; /*DMA通道数 */ extern u

32、nsigned int dmsefc; /*设置同步时间和帧计数寄存器值*/ extern unsigned int dmmcr; /*设置模式控制寄存器值 */ extern unsigned int dmctr; /*设置单元计数寄存器值 */ extern unsigned int src_page; /*设置源页寄存器值 */ extern unsigned int src_addr; /*设置源地址寄存器值 */ extern unsigned int dst_page; /*设置目的页寄存器值 */ extern unsigned int dst_addr; /*设置目的地址寄存器

33、值 */ extern int inp_buffer0x200; extern int out_buffer0x200; extern int coeffs16;/*若是 iir滤波器,需要改为coeffs15*/ extern int delaybuff16; /*若是 iir滤波器,需要改为delaybuff6*/ extern int frame; extern int flag; extern int currbuff; extern int *delayptr1; int L=0; void init_dma3(void) while(DMPREC /DMA3的传送是否结束 /* 初

34、始化通道 3 */ dmsefc = (DSYNC_REVT1 Graph功能观察输入输出信号: 26 / 36 FIR的输入信号,输出信号和频谱。 时域波形: 27 / 36 频域滤出前后对比 IIR 的输入信号,输出信号和频谱。 28 / 36 可见现实中, fir 与iir的滤波效果都可以非常的接近理想中的情况。只是在IIR 的滤波器的量化是还是存在的增益的改变,无法满足理想的情况, 尝试增大音量 来调整增益情况,就会发生如下的情况: 系统的输出出现了溢出,是dsp无法实现 IIR 滤波器,并且发现,由于使用的是 29 / 36 goldwave产生的信号, 所以,计算机的声道设置必须是

35、一端输出。关于音量多次 试验以及失败的经验, 由于板子的存储位数的原因,音量不能太大。 音量过大导 致了系统的不稳定,导致dsp的无法实现。 (四)滤波器的性能对比: Fir:6 阶输入: sin(2000*pi*t)+sin(16000*pi*t) Hamming 窗: 系数: const int16_T B7 = 278, 2286, 8029, 11582, 8029, 2286, 278; 30 / 36 Han 窗: 系数: const int16_T B7 = 0, 1954, 8291, 12278, 8291, 1954, 0 ; Blachman窗: 系数: const in

36、t16_T B7 = 0, 1179, 8081, 14247, 8081, 1179, 0 ; 31 / 36 Iir:6 阶:同样的输入信号 int coeffs15=-13767,3086,1425,1425,2851, -19585,11314,1756,1756,3513, -15446,5461,1846,1846,3693; 32 / 36 这些对比可见在较低阶数的时候IIR 的滤波器的性能明显强于 FIR的效果,但 是再设计过程中唯一的缺陷就在系数的量化时存在很大的误差,并且增益不是很 好控制,并且有可能存在着溢出现象。对于高阶数的比较,由之前的16阶FIR滤 波器已经很明显的

37、看出来,FIR滤波器的滤波效果非常的完美。在进行较高阶数 的比较的时候, 阶数过高导致 IIR 的滤波器变得不稳定, 已经不能够在 DSP 进行硬 件实现,就并没有进行截图比较。 (五) IIR 的采样率对于自身滤波效果的影响分析 Iir 8000 采样率 0,566,8333,8333,16665, 0,19293,1272,1272,22544, 0,5623,11082,11082,22164, 33 / 36 Iir 3 阶 7500采样率 Iir 4 阶 12000采样率 34 / 36 滤波效果明显不如之前取样率为16000的时候,并且观察其幅度相应,其衰 减的增加趋势已经放缓了许

38、多, 其他两幅是在不同阶数和在不同采样率时的幅度 相应,可见,采样频率对于IIR 的影响是非常大的。 可以知道, IIR 比较适合在采样率较高,且阶数较小的时候使用。 (六)实验结论: 一、IIR 数字滤波器是针对采样率固定的系统设计的,更改系统或系统采样 率改变时应重新设计。 二、用到的数据存储单元,程序开始时应对这些单元进行初始化。如果要进 行连续滤波,应保存上一次滤波的结果。 三、IIR 数字滤波器的滤波结果会引起相位的延迟,故对相位严格要求的场 合,需加全通网络进行较正,或选用FIR滤波器实现滤波功能。 四、对于 IIR 系数的溢出问题,可以采取一下几种措施: A、采用级联型,对增益进

39、行调整。 B、对系数进行量化。 C、对CCS 库函数的源程序进行修改, 使其满足 FDATOOL中产生的系数, 就 可直接调用。 五、设计 IIR 的时候,不能够使 IIR 得取样频率过低,否则硬件无法实现,一 般要保证 Fc/Fs0.01, 并且在这个比值比较靠近 1的时候, DSP 也是无法实现的。 六、在IIR 滤波器的设计思路中,与 FIR的不同一点是,一定要在量化过后通 过MATLAB 来观察其是否稳定。 七、由于 IIR 得误差问题,一般不采用较高的阶数来实现,一是不稳定的可 能性增加,二是误差会不断的积累和扩大,已造成不稳定。 八、对于 FIR,IIR ,较小阶数时候滤波器的效果

40、来说,IIR 要好于 FIR,且运 算速度是非常快的,对于较大阶数还是要使用FIR滤波器,稳定且效果是非常好 的。 九、对于频率较为接近的两个信号,一般采用FIR的高阶滤波器,这样过渡 带会变得很窄并且阻带的衰减会非常大。把两个信号区分出来。 五、设计(安装)与调试的体会 邵辰雪: 35 / 36 通过此次实验设计, 我们基本了解了 DSP的内部资源以及各部件的作用。 通 过应用 DSP算法实现通过 FIR及IIR两种不同的滤波器对信号进行滤波的实验过 程,使我们熟悉了使用 DSP工程的建设以及应用于 DSP系统的 C语言的编写,学 会了通过 MATLAB 进行滤波器设计并导出我们所需要的相关

41、系数以及头文件,并 对CCS5000 对程序的完整调试过程有了进一步的理解。 在实验初期,即进行 FIR滤波器设计的时候,由于在教材上有相关的参考程序, 所以实验进行得很顺利, 之后我们也进行了一系列的加窗后的滤波现象的分析比 较。 直到我们开始着手进行 IIR滤波器设计时,问题出现了。由MATLAB 产生的 IIR 滤波器的系数无法想 FIR的一样直接导入程序中。在经过了漫长繁复的资料查找 过程之后我们终于解决了系数导入的相关问题,即系数归一化以及有限字长效应 等,终于成功的完胜的 IIR滤波器的设计。 这次实验应该说是我所经历的小学期课程中难度系数最高,实验过程最为复 杂的一次,虽然没有焊

42、接电路那种细致并需要绝对的耐心的手工制作,但是实验 里所需要的是对于几种不同的语言的熟练运用以及程序编辑时的缜密的逻辑能 力以及分析能力。 讨论在这次实验中很有帮助, 它可以纠正错误的想法, 启发新 的方法。而每次上机实验都会出现各种各样的不同情况。有时进入就会出错, 板 子没插好, 但是再运行时就能正常进入。有时添加不进去头文件, 有时是无法导 入x.out文件,却发现忘记了重新编译。到了操作后期这种小毛病终于不再出现。 为了查询所需要的资料,我们充分利用了网络、图书馆等资源。 此次实验,一方面巩固了我们对DSP知识知识的掌握,对 CCS软件的应用 有了进一步的了解, 还锻炼了我们的细心程度

43、和团队合作能力。在实验中, 我们 二人分工合作, 并与其他小组相互讨论和交流, 对实验的整个要求都有了一个很 好的了解。可以说我们这次实验是比较成功的。 白雪: 这次课程设计我们下了很多功夫,但同时也体会到了DSP 的强大。在原来, 滤波之类的只是在书本上见到过,我们会做很多滤波器的题, 实践最多也只是在 MATLAB 上模拟一下,但从没过做过如此直接的滤波实验。 刚开始的时候由于书上没有写有关IIR 滤波器的任何东西,于是选择了制 作 IIR ,但是开始做了之后才发现,并不像FIR 滤波器那么简单,一开始只认为 调用个系数就可以。 做了之后就发现, 许多的问题不断出现, 系数的归一化会造 成

44、量化误差, 致使极点移动, 这样设计时稳定的系统会变为不稳定的系统,所以 系数的调整就耗去了许多天的时间,一直没有弄明白这些数制以及量化的问题。 当解决了量化的问题,却发现硬件无法实现,调整系数顺序后,还是不对,接下 来发现了音量大小对于整个系统的影响问题。终于解决这一系列问题之后, 才开 始进行实验的主体部分,就是IIR 设计。在解决问题上,我们去图书馆,上网查 找,得到许多不同的解决办法,不知正确与否只能一个一个的试。另外,采样频 率,阶数这些数值在做题时我都不是很重视,当运用到实践时我才感到他们的重 要性。还有溢出的问题, 我们要时刻考虑芯片所能处理的最大数,这是我们原来 做题时完全没有

45、想到的问题。 我们把每个书本上的每个知识都学到了,但是真的用起来的时候并不就是像 书上写的那么理想化。 现实中有许多的东西是书本上学不到的,经验就是这些之 一。在查阅这些资料时候, 国内的资料不是收费就是没有提到,我只好上国外的 网站上看,我看得那个论坛就是有许多书本上没有写到的东西,我从中获得一点 36 / 36 启发,才解决了系数量化的问题,不然这个问题不知道要想多久。所以,动手做 做东西,把学到的知识联系到现实当中,是我这次试验得到的最真切的体会。 六、参考文献 1 钱满义 . 高海林. DSP 技术及其应用 2王秀芳 . 关凌涛 . 基于MatLab与DSP 的滤波器的快速设计方法.

46、3张晓光 . 徐钊.IIR 数字滤波器的优化设计和DSP 实现. 江苏: 中国矿业 大学. 4 郝小江 . 唐宇.IIR 数字滤波器设计及 DSP 实现. 四川: 攀枝花学院电气 信息工程学院 . 5刘舒帆 . 张小虹 . 任姝婕 . IIR 数字滤波器在定点 DSP 中可实现性的仿真 分析 . 6 王飞. 基于 DSP 技术的 IIR 数字滤波器的设计 . 7武卫华 . 基于 matlab 的IIR 数字滤波器的设计 . 8王新金 . 顾冬华 . 基于定点 DSP 的IIR 滤波器溢出分析 . 9 杨达亮 . 王巨丰 . 基于 DSP 的IIR 数字滤波器的设计与实现. 相关网站: http:/ http:/ http:/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1