DSP实验报告FIR和IIR滤波器设计Word文件下载.docx

上传人:b****3 文档编号:15857227 上传时间:2022-11-16 格式:DOCX 页数:12 大小:529.92KB
下载 相关 举报
DSP实验报告FIR和IIR滤波器设计Word文件下载.docx_第1页
第1页 / 共12页
DSP实验报告FIR和IIR滤波器设计Word文件下载.docx_第2页
第2页 / 共12页
DSP实验报告FIR和IIR滤波器设计Word文件下载.docx_第3页
第3页 / 共12页
DSP实验报告FIR和IIR滤波器设计Word文件下载.docx_第4页
第4页 / 共12页
DSP实验报告FIR和IIR滤波器设计Word文件下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

DSP实验报告FIR和IIR滤波器设计Word文件下载.docx

《DSP实验报告FIR和IIR滤波器设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《DSP实验报告FIR和IIR滤波器设计Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。

DSP实验报告FIR和IIR滤波器设计Word文件下载.docx

因此可以得到FIR滤波器的结构图如图1所示。

图1FIR滤波器直接结构图

4.设计思路

对于FIR滤波器的设计,其系数

是关键。

由于matlab自带滤波器设计工具箱和滤波器设计函数,故借用matlab工具,设计满足条件的滤波器并导出系数以备编写滤波器程序时使用。

实验需要用到的输入数据是多正弦波合成文件,对于输入信号的设计,这里也借助matlab编程生成dat文件。

然后用C语言编写FIR滤波器的主程序,输入文件在程序运行后导入。

5.实验内容

(1)滤波器系数的设计

由于实验只给出滤波器条件为N=10,

=2.5kHZ,并没有给出

,所以这里调用matlab工具箱函数fir1实现窗函数法设计滤波器。

fir1的调用格式为

,返回值为6dB截止频率为

的N阶(单位脉冲响应h(n)长度

=N+1)的FIR低通滤波器的系数向量(

为标量),默认选用哈明窗。

其中

为对

归一化的数字频率,其计算公式为

,这里计算得出

=0.625。

因为得到的系数向量要用于DSP的FIR程序中,需要对其进行进行转换并取整。

最后系数结果如下图2所示。

图210阶FIR滤波器系数

对于10阶滤波器得到11个系数,将该系数保存,以备后面编写程序时使用。

该滤波的幅频图和相频图分别对应图3和图4。

图310阶FIR滤波器幅频图

图410阶FIR滤波器相频图

(2)输入信号的生成

根据老师给的两个.wav语音文件,这里用matlab的wavread函数将其读进去,并编写程序查看其部分信号时域和频域图,并生成两个语音文件的.dat文件,供作为DSP设计滤波器验证时所用的输入文件。

两个语音信号部分时域和频域图分别对应图5(a)(b)和图6(a)(b)。

(a)语音文件1时域图

(b)语音文件1频谱图

图5语音文件1时域和频域图

(a)语音文件2时域图

(b)语音文件2频谱图

图6语音文件2时域和频域图

(3)CCS中FIR程序编写

首先打开CCSsetup选择对应5416型号的处理器,保存后打开CCS软件,project->

new建立fir滤波工程。

新建一个input.h文件,并将matlab产生的input文件里面的数据放入其中,然后project->

addfilestoproject..将input.h添加至工程。

同理,编写FIR滤波主程序并将其加入工程。

最后将链接文件fir.cmd加入工程。

如图7所示。

图7CCS3.3程序窗口

编译生成fir.out文件,然后file->

loadprogram..->

fir.out,运行程序。

然后view->

graph->

time/frequency,显示如图8所示。

然后选择对应的singletime、FFTmagnitude分别对应时域和频域图形。

startaddress分别填input和output对应输入和输出的数据。

通过改变acquisitionbuffersize和displaydatasize数值来调整显示框的结果。

对应的显示结果如图9-图12所示。

图8

(a)时域图

(b)频域图

图9输入信号1波形图

(a)滤波结果时域图

(b)滤波结果频域图

图10信号1滤波结果图

(a)时域图

图11输入信号2波形图

图12信号2滤波结果图

(4)程序下载到DSP实验板

点击file->

new->

DSP/BIOSconfiguration,选择DSK5416.cdb,保存至文件的工程目录下。

将刚生成的.cdb文件和编写的加入到工程中。

将前面的程序文件分别加入工程中,进行编译。

链接实验板和电脑。

点击debug->

connect,连接测试板,file->

loadprogram..,从工程文件下的debug文件夹中导入fir.out文件,再点击debug->

run运行。

6.实验结果

从图9-图12来看程序基本完成了对输入的合成信号的滤波。

其中输入信号1是由1Khz、2Khz、3Khz合成的信号,而输入信号2是多种频率信号复合的信号。

经过FIR滤波器滤波后,由输出的频域图可以看出,本滤波器将大于2.5Khz的信号基本滤去。

由于滤波器的阶数较小,对于3Khz信号并没有完全滤除,这也是实验预期之中的。

对于信号2的复合信号,由频谱图比较可以发现,大于2.5Khz的信号基本被滤去。

综上所述,本实验设计的FIR滤波器实现了截止频率为2.5Khz的低通滤波器的功能。

实验二IIR滤波器的设计

1.实验目的和要求

在上面设计了FIR滤波器的基础上,设计相同性能的IIR滤波器。

2.实验原理

IIR与FIR滤波器相比,相同性能水平的滤波器,IIR可以用较低的阶数实现,但是IIR滤波器是非线性的,且稳定性较差。

IIR滤波器对FIR滤波器的前馈环节进行了扩展,增加了一个反馈环节。

IIR滤波器的(L-1)阶前馈环节和(M-1)阶反馈环节的差分方程表示为:

其中a与b为滤波器系数向量。

对上式进行z变换可得:

进而得到IIR滤波器的传递方程为:

因此IIR滤波器的设计需要求出其系数向量a和b。

3.实验内容

IIR滤波器的设计思路和内容与FIR的基本相同,这里不再叙述。

这里使用与FIR滤波器一样的输入信号。

一般情况下,相同性能的IIR滤波器阶数应低于FIR滤波器,这里为了方便,设计相同阶数的IIR滤波器。

IIR滤波器系数向量用matlab的自带的滤波器设计工具箱设计得出。

IIR滤波器对输入信号1和2滤波后的时域和频域图如图13和14所示。

(a)滤波后时域图

(b)滤波后频域图

图13IIR滤波器对输入信号1的滤波结果

图14IIR滤波器对输入信号2的滤波结果

4.实验结果

通过观察IIR滤波结果图,与上面FIR比较,可以发现,实验中截止频率同为2.5Khz的IIR滤波器,对2Khz和3Khz频率的信号都有滤波现象。

这是由于滤波器自身的幅频特性造成的。

经过观察信号2的滤波结果可以看出,该滤波器也基本可以实现截止频率为2.5Khz的低通滤波器的功能。

实验总结

本次实验所设计的10阶FIR和IIR滤波器都可以很好的完成低通滤波效果,达到了实验预期的目的。

通过FIR和IIR滤波器的设计,不仅让我了解到了数字滤波器的设计思路和设计方法,而且通过比较了解了FIR和IIR滤波器各种的优点和缺点。

通过实验让我对数字滤波器的知识有了进一步了解和认识,同时掌握了简单的滤波器实现算法和程序。

由于之前没有较多接触过CCS和DSP实验板,此次实验在对CCS软件的使用、软件编程、仿真、连接实验板上花了大量的时间。

通过在网上查资料并一点点学习和尝试才基本学会使用。

由于对cmd文件的不了解,开始编译时总是报错,通过与同学一起讨论和在网上查询才知道解决办法。

总得来说,实验让我学会了CCS软件和DSP实验板的基本使用方法。

并在此基础上学会了简单的FIR和IIR滤波器的设计。

收获颇多。

附录

(1)输入信号生成程序(matlab程序)

clc;

clearall;

closeall;

FS=8000;

%[y,FS,NBITS]=wavread('

C:

\Users\Administrator\Desktop\MultiToneTest.wav'

);

[y,FS,NBITS]=wavread('

\Users\Administrator\Desktop\sc03.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));

语言信号频域图'

y=(y*32767);

y=int16(y);

fid=fopen('

input.dat'

'

w'

form=1:

2048

fprintf(fid,'

%d,\n'

y(m));

%输出

end

fclose(fid);

(2)FIR滤波器程序

#include"

stdio.h"

#defineN11//FIR滤波器的级数+1(因为本实验中滤波器阶数为10)

#defineLEN2048//待滤波的输入数据长度

#include"

input.h"

//输入数据文件

longyn;

intB[11]={-64,438,-530,-2519,8803,20512,8803,-2519,-530,438,-64};

//滤波器系数

intinput[LEN];

//输入缓冲,在仿真时将从内存载入

intoutput[LEN];

//输出缓冲,直接存放在内存中

voidmain()

{

inti,j;

int*x;

for(j=0;

j<

LEN-1;

j++)

{

x=&

input[j];

yn=0;

for(i=0;

i<

N-1;

i++)

{

yn+=B[i]*(*x++);

%滤波

}

output[j]=yn>

>

15;

}

while

(1);

}

(3)IIR滤波器程序

#defineN11

#defineLEN2048

intNUM[10]={69,691,3108,8289,14505,17406,14505,8289,3108,691,69};

intDEN[10]={4096,10203,16248,16727,12645,6959,2837,828,166,20,1};

longyn,yn1,yn2;

intinputY[LEN];

inti,j;

int*x,*y;

{x=&

y=&

inputY[j];

for(i=0;

i<

NL;

i++)

{yn1+=NUM[i]*(*x++);

yn2+=DEN[i]*(*y++);

yn=yn1-yn2;

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

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1