DSP实验报告FIR和IIR滤波器设计.docx
- 文档编号:27974433
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:10
- 大小:35.78KB
DSP实验报告FIR和IIR滤波器设计.docx
《DSP实验报告FIR和IIR滤波器设计.docx》由会员分享,可在线阅读,更多相关《DSP实验报告FIR和IIR滤波器设计.docx(10页珍藏版)》请在冰豆网上搜索。
DSP实验报告FIR和IIR滤波器设计
DSP实验报告
实验一FIR滤波器的设计
1.实验目的
利用所学DSP知识,在平台上,对TMS320VC5416DSP设计,编程实现FIR滤波器。
从而学会使用CCS软件和TMS320VC5416实验板。
2.实验要求
设计一个10阶的FIR滤波器,要求
=,定点实现。
并对
=8kHZ的多正弦波合成文件进行滤波测试,显示出输入和输出信号。
3.实验原理
一个截止频率为
的理想数字低通滤波器,其传递函数的表达式为:
这个滤波器是物理不可实现的。
为了产生有限长度的冲激响应函数,我们取样响应为
,长度为N。
表示截取
后的冲激响应,即
,其中
即为窗函数,窗长为N。
一般的FIR滤波器差分方程如下:
进行Z变换得到FIR的系统函数为:
N阶滤波器通常采用N个延迟单元、N个加法器与N+1个乘法器组成。
因此可以得到FIR滤波器的结构图如图1所示。
图1FIR滤波器直接结构图
4.设计思路
对于FIR滤波器的设计,其系数
是关键。
由于matlab自带滤波器设计工具箱和滤波器设计函数,故借用matlab工具,设计满足条件的滤波器并导出系数以备编写滤波器程序时使用。
实验需要用到的输入数据是多正弦波合成文件,对于输入信号的设计,这里也借助matlab编程生成dat文件。
然后用C语言编写FIR滤波器的主程序,输入文件在程序运行后导入。
5.实验内容
(1)滤波器系数的设计
由于实验只给出滤波器条件为N=10,
=,并没有给出
和
,所以这里调用matlab工具箱函数fir1实现窗函数法设计滤波器。
fir1的调用格式为
,返回值为6dB截止频率为
的N阶(单位脉冲响应h(n)长度
=N+1)的FIR低通滤波器的系数向量(
为标量),默认选用哈明窗。
其中
为对
归一化的数字频率,其计算公式为
,这里计算得出
=。
因为得到的系数向量要用于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滤波工程。
新建一个文件,并将matlab产生的input文件里面的数据放入其中,然后project->addfilestoproject..将添加至工程。
同理,编写FIR滤波主程序并将其加入工程。
最后将链接文件加入工程。
如图7所示。
图7程序窗口
编译生成文件,然后file->loadprogram..->,运行程序。
然后view->graph->time/frequency,显示如图8所示。
然后选择对应的singletime、FFTmagnitude分别对应时域和频域图形。
startaddress分别填input和output对应输入和输出的数据。
通过改变acquisitionbuffersize和displaydatasize数值来调整显示框的结果。
对应的显示结果如图9-图12所示。
图8
(a)时域图
(b)频域图
图9输入信号1波形图
(a)滤波结果时域图
(b)滤波结果频域图
图10信号1滤波结果图
(a)时域图
(b)频域图
图11输入信号2波形图
(a)滤波结果时域图
(b)滤波结果频域图
图12信号2滤波结果图
(4)程序下载到DSP实验板
点击file->new->DSP/BIOSconfiguration,选择,保存至文件的工程目录下。
将刚生成的.cdb文件和编写的加入到工程中。
将前面的程序文件分别加入工程中,进行编译。
链接实验板和电脑。
点击debug->connect,连接测试板,file->loadprogram..,从工程文件下的debug文件夹中导入文件,再点击debug->run运行。
6.实验结果
从图9-图12来看程序基本完成了对输入的合成信号的滤波。
其中输入信号1是由1Khz、2Khz、3Khz合成的信号,而输入信号2是多种频率信号复合的信号。
经过FIR滤波器滤波后,由输出的频域图可以看出,本滤波器将大于的信号基本滤去。
由于滤波器的阶数较小,对于3Khz信号并没有完全滤除,这也是实验预期之中的。
对于信号2的复合信号,由频谱图比较可以发现,大于的信号基本被滤去。
综上所述,本实验设计的FIR滤波器实现了截止频率为的低通滤波器的功能。
实验二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的滤波结果
(a)滤波后时域图
(b)滤波后频域图
图14IIR滤波器对输入信号2的滤波结果
4.实验结果
通过观察IIR滤波结果图,与上面FIR比较,可以发现,实验中截止频率同为的IIR滤波器,对2Khz和3Khz频率的信号都有滤波现象。
这是由于滤波器自身的幅频特性造成的。
经过观察信号2的滤波结果可以看出,该滤波器也基本可以实现截止频率为的低通滤波器的功能。
实验总结
本次实验所设计的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\');
[y,FS,NBITS]=wavread('C:
\Users\Administrator\Desktop\');
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('','w');
form=1:
2048
fprintf(fid,'%d,\n',y(m));%输出
end
fclose(fid);
(2)FIR滤波器程序
#include""
#defineN11//FIR滤波器的级数+1(因为本实验中滤波器阶数为10)
#defineLEN2048//待滤波的输入数据长度
#include""//输入数据文件
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 { x=&input[j]; yn=0; for(i=0;i { yn+=B[i]*(*x++);%滤波 } output[j]=yn>>15; } while (1); } (3)IIR滤波器程序 #include"" #include"" #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; intinput[LEN]; intinputY[LEN]; intoutput[LEN]; voidmain() { inti,j; int*x,*y; for(j=0;j {x=&input[j]; y=&inputY[j]; for(i=0;i {yn1+=NUM[i]*(*x++); yn2+=DEN[i]*(*y++); } yn=yn1-yn2; output[j]=yn>>15; } while (1); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 实验 报告 FIR IIR 滤波器 设计