2. 窗函数 FIR
1.低通,参数为fp=1000Hz,fc=1200 Hz, As=100dB,Ap=1dB; 依次选择后,填入参数。 对比滤波前后频谱:
可以看到:在时域上看变化不大,但在频域可以看出中高频被过滤掉了。 回放时,声音浑浊低沉。
9
2.高通,参数为fc=2800 Hz,fp=3000 Hz As=100dB,Ap=1dB; 对比滤波前后频谱:
滤波前后对比,可以看出无论在时域和频域都有所变化。在频域部分,低频部分被过滤掉了。回放时,说话速度很快,频率很高,感觉音调很高。
10
3.带通,参数为fp1=1200 Hz,fp2=3000 Hz,fc1=1000 Hz,fc2=3200 Hz,As=100dB,Ap=1dB; 对比滤波前后频谱:
滤波前后对比,可以看出无论在时域和频域都有所变化。在频域部分,可以看到高频和低频部分被过滤掉了。
回放时,声音很清脆。
11
五、 设计心得体会
经过几天的设计和调试,终于把程序搞定了,在这个过程,遇到相当多的困难。刚
接触到这个课程设计时,对MATLAB的GUI一点概念都没有,自己只有去网上查找有关这方面的资料,并结合资料编写了一个很简单的GUI,并调试运行正确,当时有些激动,但当真正做起一个复杂的GUI时,感到困难重重。一开始自己制作的简单的GUI,进行参数传递时只是在Callback函数里进行传递,没有涉及到在函数之间的传递,故在制作课程时,发现很多错误,究其原因,是自己的参数传递不对,当时自己一头雾水,一点都不知道函数之间的参数要怎么传递,只有上网查资料,顺便说一下,这次课程设计还锻炼了自己上网查询资料的能力和技巧,花了很长时间终于找到了,耐着性子看完了资料,就自己试着编写程序,我首先用的是global定义全局变量的方法,运行了下程序,发现能传递参数了,但很快我发现这种方法传递参数很不好,最好少用,经常出现运行错误,然后我就用了另外的一种方法,用setappdata()和getappdata()这两个语句配合使用进行参数的传递,虽说这种方法比较麻烦,但经多次测试没有发现什么错误,因此我在本课程设计中就用这种方法进行参数的传递。参数问题解决了,就要进行滤波器的设计,自己首先看书了解了下滤波器的设计过程,参照了从图书馆借来的书,采用了滤波器的完全设计法进行了滤波器的设计,并编写了相应的程序代码,在这个过程中,自己没注意到的问题是滤波器的采样点数N要与fft进行变换的点数对应,不然程序不能正确执行。对于带通和带阻滤波器的设计,要注意参数的二维性。从书中我们了解到,带通和带阻滤波器的设计需要通带上限频率、通带下限频率、阻带上限频率、阻带下限频率、通带波纹、阻带衰减和采样频率,然而低通和高通滤波器的设计只需要通带截止频率、阻带截止频率、通带波纹、阻带衰减和采样频率,所以我设计了相应的屏蔽代码。同时,为了方便我们能看到各种类型的滤波器,设计了下拉菜单,并设计了查看滤波器的特性的选择框,极大地符合使用者的偏好。经过了一天左右的时间,我完成了GUI的大部分,第二天我接着做时,我想加入新的功能,我发现了GUI设计的一些漏洞,即新加入的控件它自己顺着编号,不顾我以前所删控件的编号,这给我编写程序造成了极大的不方便,我不得不重新创建新的,把旧的复制过来重新命名各个控件的tag,有过这次经验,我发现只要在Tools中的GUI Options选择Generate FIG-file only就可以避免这个问题,等自己确定界面布局好了之后,再把之前改变的选项改为原来的,这样生成的代码就能一一对应起来了。马马虎虎地做完了,周五的时候老师给我们全班具体地讲了设计中的一些问题,我发现老师告诉我们的传递参数的方法是很方便和简单的,即handles.xx的方法。但自己试了下这种方法偶尔会出现错误,和同学们交流下,他们也有同样的问题,大家都有点怀疑是自己的MATLAB的版本没有老师的高级,故不能正常运行,具体原因到现在也依然想不出个所以然来。之后几天,逐步完善了自己的程序,发现没什么重大问题了,至此,课程设计可以说是完成了。回首整个设计过程,刚开始的时候,自己对MATLAB的GUI的设计一窍不通,一想头就大,都不想去做,但只要自己真正动手去做,知行合一的时候,觉得并不太困难,碰到一个难题就解决一个难题,终究是车到山前必有路,只要自己付出了,终还是会有所收获的。经过这次课程设计,自己对所学知识有了更好的了解,对MATLAB的操作也更熟练了,并且觉得自己学的知识能学有所用,感觉到很欣慰。
12
六、 参考文献
数字信号处理教程 程佩青
数字信号处理及其MATLAB实现 万永革
13