DSP实验报告FIR和IIR滤波器设计_第1页
DSP实验报告FIR和IIR滤波器设计_第2页
DSP实验报告FIR和IIR滤波器设计_第3页
DSP实验报告FIR和IIR滤波器设计_第4页
DSP实验报告FIR和IIR滤波器设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、dsp实验报告实验一fir 滤波器的设计1.实验目的利用所学 dsp 知识,在 ccs3.3 平台上,对 tms320vc5416dsp 设计,编程实现 fir 滤波器。从而学会使用ccs 软件和 tms320vc5416 实验板。2.实验要求设计一个 10 阶的 fir 滤波器,要求=2.5khz,定点实现。并对=8khz的多正弦波合成文件进行滤波测试,显示出输入和输出信号。3.实验原理一个截止频率为的理想数字低通滤波器,其传递函数的表达式为:ccjjdeeh,0,)(这个滤波器是物理不可实现的。 为了产生有限长度的冲激响应函数,我们取样响应为)(nh,长度为 n。)(nh表示截取)(nhd

2、后的冲激响应,即)()()(nhnnhd,其中)(n即为窗函数,窗长为n。一般的fir 滤波器差分方程如下:10( )( ) ()nky nh k x nk进行 z 变换得到 fir 的系统函数为:10)()(nnnznhzhn 阶滤波器通常采用n 个延迟单元、 n 个加法器与 n+1 个乘法器组成。因此可以得到 fir 滤波器的结构图如图1 所示。图 1 fir 滤波器直接结构图4.设计思路对于 fir 滤波器的设计,其系数( )h n是关键。由于matlab 自带滤波器设计工具箱和滤波器设计函数,故借用matlab 工具,设计满足条件的滤波器并导出系数以备编写滤波器程序时使用。实验需要用到

3、的输入数据是多正弦波合成文件,对于输入信号的设计,这里也借助matlab 编程生成 dat 文件。然后用c 语言编写 fir 滤波器的主程序,输入文件在程序运行后导入。5.实验内容(1)滤波器系数的设计由于实验只给出滤波器条件为n=10,=2.5khz,并没有给出和,所以这里调用 matlab工具箱函数 fir1 实现窗函数法设计滤波器。fir1 的调用格式为,返回值为 6db 截止频率为的 n 阶(单位脉冲响应 h (n)长度=n+1)的 fir 低通滤波器的系数向量 (为标量) ,默认选用哈明窗。其中为对 归一化的数字频率,其计算公式为,这里计算得出=0.625。因为得到的系数向量要用于d

4、sp 的 fir 程序中,需要对其进行进行转换并取整。最后系数结果如下图2 所示。图 2 10 阶 fir 滤波器系数对于 10 阶滤波器得到 11个系数,将该系数保存,以备后面编写程序时使用。该滤波的幅频图和相频图分别对应图3 和图 4。图 3 10 阶 fir 滤波器幅频图图 4 10 阶 fir 滤波器相频图(2)输入信号的生成根据老师给的两个 .wav 语音文件,这里用matlab 的 wavread函数将其读进去,并编写程序查看其部分信号时域和频域图,并生成两个语音文件的 .dat文件,供作为 dsp设计滤波器验证时所用的输入文件。两个语音信号部分时域和频域图分别对应图5(a) (b

5、)和图 6(a) (b) 。(a) 语音文件1 时域图(b) 语音文件1 频谱图图 5 语音文件1 时域和频域图( a)语音文件2 时域图(b)语音文件2 频谱图图 6 语音文件2 时域和频域图(3)ccs中 fir 程序编写首先打开 ccs setup选择对应 5416型号的处理器,保存后打开ccs软件,project-new 建立 fir 滤波工程。 新建一个 input.h 文件,并将 matlab产生的 input文件里面的数据放入其中,然后project-add files to project.将 input.h 添加至工程。同理,编写fir 滤波主程序并将其加入工程。最后将链接文

6、件fir.cmd 加入工程。如图 7 所示。图 7 ccs3.3程序窗口编译生成fir.out 文件,然后file-load program.-fir.out,运行程序。然后view-graph-time/frequency, 显示如图 8 所示。然后选择对应的 single time、 fft magnitude分别对应时域和频域图形。start address分别填 input 和 output 对应输入和输出的数据。通过改变acquisition buffer size 和 display data size数值来调整显示框的结果。对应的显示结果如图9-图 12 所示。图 8 ( a)时

7、域图(b) 频域图图 9 输入信号1 波形图(a)滤波结果时域图(b)滤波结果频域图图 10 信号 1 滤波结果图(a) 时域图(b)频域图图 11 输入信号2 波形图(a)滤波结果时域图(b)滤波结果频域图图 12 信号 2 滤波结果图(4)程序下载到 dsp 实验板点击 file-new-dsp/bios configuration ,选择 dsk5416.cdb,保存至文件的工程目录下。 将刚生成的 .cdb文件和编写的加入到工程中。 将前面的程序文件分别加入工程中,进行编译。链接实验板和电脑。 点击 debug-connect ,连接测试板,file-load program.,从工程

8、文件下的 debug文件夹中导入 fir.out 文件,再点击 debug-run运行。6.实验结果从图 9-图 12 来看程序基本完成了对输入的合成信号的滤波。其中输入信号1 是由 1khz、2khz、3khz 合成的信号,而输入信号2 是多种频率信号复合的信号。经过 fir 滤波器滤波后, 由输出的频域图可以看出, 本滤波器将大于 2.5khz的信号基本滤去。由于滤波器的阶数较小,对于3khz 信号并没有完全滤除,这也是实验预期之中的。对于信号2 的复合信号,由频谱图比较可以发现,大于2.5khz 的信号基本被滤去。综上所述,本实验设计的fir 滤波器实现了截止频率为 2.5khz 的低通

9、滤波器的功能。实验二iir 滤波器的设计1.实验目的和要求在上面设计了 fir 滤波器的基础上,设计相同性能的iir 滤波器。2.实验原理iir 与 fir 滤波器相比,相同性能水平的滤波器,iir 可以用较低的阶数实现,但是 iir 滤波器是非线性的,且稳定性较差。iir 滤波器对 fir 滤波器的前馈环节进行了扩展,增加了一个反馈环节。iir 滤波器的( l-1)阶前馈环节和( m-1)阶反馈环节的差分方程表示为:1101lmimimy nb x nia y nm其中 a与 b 为滤波器系数向量。对上式进行 z 变换可得:进而得到 iir 滤波器的传递方程为:因此 iir 滤波器的设计需要

10、求出其系数向量a和 b。3.实验内容iir 滤波器的设计思路和内容与fir 的基本相同,这里不再叙述。这里使用与 fir 滤波器一样的输入信号。 一般情况下, 相同性能的 iir 滤波器阶数应低于fir 滤波器,这里为了方便,设计相同阶数的iir 滤波器。 iir 滤波器系数向量用 matlab的自带的滤波器设计工具箱设计得出。iir 滤波器对输入信号1 和 2 滤波后的时域和频域图如图13 和 14所示。(a)滤波后时域图(b)滤波后频域图图 13 iir 滤波器对输入信号1 的滤波结果(a)滤波后时域图(b)滤波后频域图图 14 iir 滤波器对输入信号2 的滤波结果4.实验结果通过观察

11、iir 滤波结果图,与上面fir 比较,可以发现,实验中截止频率同为 2.5khz 的 iir 滤波器,对 2khz 和 3khz 频率的信号都有滤波现象。这是由于滤波器自身的幅频特性造成的。 经过观察信号 2 的滤波结果可以看出, 该滤波器也基本可以实现截止频率为2.5khz 的低通滤波器的功能。实验总结本次实验所设计的 10阶 fir 和 iir 滤波器都可以很好的完成低通滤波效果,达到了实验预期的目的。 通过 fir 和 iir 滤波器的设计, 不仅让我了解到了数字滤波器的设计思路和设计方法, 而且通过比较了解了fir 和 iir 滤波器各种的优点和缺点。通过实验让我对数字滤波器的知识有

12、了进一步了解和认识,同时掌握了简单的滤波器实现算法和程序。由于之前没有较多接触过ccs 和 dsp 实验板,此次实验在对ccs 软件的使用、软件编程、仿真、连接实验板上花了大量的时间。通过在网上查资料并一点点学习和尝试才基本学会使用。由于对cmd 文件的不了解,开始编译时总是报错,通过与同学一起讨论和在网上查询才知道解决办法。总得来说,实验让我学会了ccs 软件和 dsp 实验板的基本使用方法。并在此基础上学会了简单的fir 和 iir 滤波器的设计。收获颇多。附录(1) 输入信号生成程序( matlab程序)clc; clear all;close all; fs=8000; %y,fs,n

13、bits=wavread(c:usersadministratordesktopmultitonetest.wav); y,fs,nbits=wavread(c:usersadministratordesktopsc03.wav); figure(1) plot(y(1:500);title( 语言信号时域图); figure(2) y=abs(fft(y(1:1000); df=(1:1000)*(fs/1000); plot(df,y(1:1000);title(语言信号频域图); y=(y*32767); y=int16(y); fid=fopen(input.dat,w); for m

14、=1:2048 fprintf(fid,%d,n,y(m); %输出end fclose(fid); (2)fir 滤波器程序#include stdio.h #define n 11 /fir 滤波器的级数+1(因为本实验中滤波器阶数为10) #define len 2048 /待滤波的输入数据长度#includeinput.h /输入数据文件long yn; int b11 = -64, 438, -530, -2519 , 8803, 20512,8803,-2519,-530,438,-64;/滤波器系数int inputlen; /输入缓冲,在仿真时将从内存载入int outputlen; /输出缓冲,直接存放在内存中void main() int i,j; int *x; for(j=0;jlen-1;j+) x=&inputj; yn = 0; for(i=0; i15; while(1); (3)iir 滤波器程序#include stdio.h #include input.h #define n 11 #define len 2048 int num10 = 69,691,3108,8289,14505,17406,14505,8289, 3108,691, 6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论