基于MATLAB的滤波器课程设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档