基于MATLAB的滤波器课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计
课程名称数字信号处理
题目名称应用Matlab对语音信号进行频谱分析及滤波学生学院信息工程学院
专业班级
学号
学生姓名
指导教师
2011 年 1 月 4 日
一、设计题目
应用Matlab对语音信号进行频谱分析及滤波
二、设计目的
1、进一步巩固数字信号处理的基本概念、理论、分析方法和实现方法;
2、增强应用Matlab语言编写数字信号处理的应用程序及分析、解决实际问题的能力;
3、掌握用MATLAB对采样信号进行频谱分析基本原理;
4、学会用MATLAB设计FIR和IIR滤波器的基本方法;
5、学会用MATLAB的GUI功能设计用户界面。
三、设计内容
1、语音信号的采集;
2、语音信号的频谱分析;
3、设计数字滤波器和画出其频率响应;
4、用滤波器对信号进行滤波;
5、比较滤波前后语音信号的波形及频谱;
6、设计系统界面;
7、回放语音信号。
四、设计结果分析
1、主界面截图
其中上面两个大图是输入信号的频谱分析;下面的则是输出信号的频谱分析;右边两个小图是滤波器函数的图像。右边界面可以选择滤波器的参数。本程序具有录音、载入音频、设计各种滤波器、滤波、回放滤波后的声音等功能。
2、用窗函数法和双线性变换法设计下面要求的3种滤波器。
(1)低通滤波器性能指标fb=1 000 Hz,fc=1 200 Hz,As=100 dB,Ap=1 dB。
(2)高通滤波器性能指标fc=4 800 Hz,fb=5 000 Hz As=100 dB,Ap=1 dB。
(3)带通滤波器性能指标fb1=1 200 Hz,fb2=3 000 Hz,fc1=1 000 Hz,fc2=3 200 Hz,As=100 dB,Ap=1 dB。
本次设计利用函数fir1设计FIR滤波器,利用函数ellip设计IIR滤波器。
①IIR低通
②FIR低通
分析:对于不同滤波器而言,每个频率的信号的减弱程度不同。当低通滤波器使用在音频应用时,它有时被称为高频剪切滤波器, 或高音消除滤波器。从上面的IIR与FIR
低通滤波器频谱分析图中可以看出,音频的高频部分被滤掉了,输出的声音低沉,且声音信号有失真。
③IIR高通
④FIR高通
分析:高通滤波器的作用是滤去音频信号中的低音成分,增强中音和高音成分以驱动扬声器的中音和高音单元。有时被称为低频剪切滤波器, 或低音消除滤波器。从上面的频谱分析图中可以看出,声音信号的低频部分被滤除了,输出的声音高昂刺耳。同时还可以看出声音信号有失真。
⑤IIR带通
⑥FIR带通
分析:带通滤波器的作用是将频带外的频段滤除,即可滤除低频和高频成分,保留声音信号的中间频段,除去了高音与低音,增强了中音成分,声音清晰。
五、设计心得体会
(1)从电脑上录取一段音频后,将信号载入设计的滤波器中进行滤波。通过观察图像、回放滤波后的音频来作分析。原始音频信号经过滤波器后输出的信号受到滤波器的滤波作用,把高频或低频分量滤掉,出来的信号一个是带限信号,频带在一定范围内。滤波后的波形还伴随着一定的失真,使得声音信号有些音质上的变化。为了减少这种失真,我们可以选择不同的滤波器,设置不同的参数来测试各种性能,最终是信号的滤波
作用达到最佳。
(2)在设计用户界面时,由于是第一次接触GUI,我下了很大的功夫查阅资料和查看帮助文件。在弄清楚双线性变换法设计IIR滤波器和窗函数法设计FIR滤波器的基本概念之后,我用了2天时间在做滤波器的,忽略了用户界面的设计。等真正在做用户界面时才发现原来GUI设计界面、布局、写入逻辑语句等才是设计的重点。为了构建一个实用好看的界面,我又通过网络和帮助文件深入的了解了GUI。搞定一切之后,敲入所构思的程序,一个具有录音、滤波、频谱分析的用户界面诞生了。通过此次设计,我认识到MATLAB的帮助文件真是学习MATLAB的好工具,它在整个设计过程中帮了我很多,而且让我的英语水平也有了提高。
六、参考文献
[1]程佩青清华大学出版社,2009.
附录:function varargout = NEWS(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @NEWS_OpeningFcn, ...
'gui_OutputFcn', @NEWS_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function NEWS_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = NEWS_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;