nbhkdz.com冰点文库

基于matlab GUI的IIR低通数字滤波器设计

时间:2017-01-03


DSP 课程设计报告
题目基于 matlab GUI 的 IIR 低通数字滤波器设计

学院:信息工程学院 专业:通信工程 姓名:张昊东 学号: 201416630

目录
1.设计的主要内容及基本求 ....................................2 2.总体设计的基本思路 ........................................2 3.设计方案 ..................................................2 3.1 原始语音信号加噪处理 ..................................2 3.2 滤波器的设计 ..........................................3 3.2.1 滤波器的基本知识 ..................................3 3.2.2 数字滤波器的选取 ..................................4 3.3 滤除噪声后的语音信号 ..................................5 4.GUI 的设计 ................................................7 4.1 GUI 界面设计概述 ......................................7 4.2 GUI 界面设计具体操作 ..................................7 4.3 GUI 界面设计演示 ......................................8 5.仿真结果的分析 ............................................9 6.课程设计总结 ..............................................9 7.参考文献 ..................................................9 附录 ........................................................10

1

1.设计的主要内容及基本要求
要求录制一段自己的语音信号后,对所采集的语音信号加入干扰噪声,设计 相应的数字滤波器滤除噪声并进行验证,最后设计 GUI 界面。

2.总体设计思路
1.获取一段语音。 2.对所获取的语音信号进行加噪处理。 3. 设计数字滤波器。 4.将加噪后的信号通过所设计的滤波器,滤除噪声。 5.验证滤除噪声后的 语音信号。 6.利用 matlab GUI 设计模板设计相应的 GUI 界面。

3.设计方案
3.1 原始语音信号加噪处理
[s,fs]=audioread ('C:\Users\昊东\Desktop\zhd.wav');%读取语音信号的数据,赋给变量 y 号 频率 y1=fft(s); f=fs*(0:511)/2048;%使频谱图的坐标从零开始 t=0:1/44100:(size(s)-1)/44100; %将所加噪声信号的点数调整到与原始信号相同 Au=0.08; %幅度值 d=Au*cos(2*pi*5000*t); %加余弦信号 频率是 5000hz n=d';%将噪声进行转置,以便使噪声与信号的行列相同,进行相加 x=s+n;%原始信号和噪声信号叠加 subplot(241);plot(t,s);title('原语音信号'); subplot(242);plot(f,abs(y1(1:512)));title('原语音频谱'); subplot(243);plot(t,x),title('加噪后时域波形');%加噪后的时域图 subplot(245),plot(t,y); title('滤波后的时域波形');%画出滤波后的时域图 y5=fft(x,2048);%进行 2048 点傅里叶变换 subplot(244); plot(f,abs(y5(1:512))); %加噪后的频谱图 title('加噪后的频谱'); xlabel('频率/Hz'); ylabel('幅值 i');
2



3.2 滤波器设计
3.2.1 数字滤波器的基本知识 数字滤波器分为 FIR 数字滤波器和 IIR 数字滤波器两种,即有限冲激 响应滤波器( FIR , Finite Impulse Response )滤波器和无线冲激响应
3

( IIR , Infinite Impulse Response )滤波器。 (一) FIR 数字滤波器 FIR 的特点: 不存在极点( z=0 除外),系统函数 | z>0| 处收敛。系统单位冲激响 应在有限个 n 值处不为零。结构上主要是非递归结构,没有输出到输入的反 馈。故只能用较高的阶数达到高的选择性。FIR 数字滤波器的幅频特性精度 较之于 IIR 数字滤波器低,但是线性相位即不同频率分量的信号经过 FIR 数字滤波器后他们的时间差不变。FIR 数字滤波器具有系统稳定,易实现相 位控制, 允许设计多带通滤波器等优点。 FIR 数字滤波器的结构有四种: 横截性;级联型结构;频率采样型结构;线性相位 FIR 滤波器的结构 (二) IIR 数字滤波器 IIR 数字滤波器的特点: 电位冲激响应 h(n) 是无限长的;系统函数 H(z) 在有限 z 平面上 ( 0< |z|< ∞)有极点存在;结构上存在着输出到输入的反馈,也就是结构 上是递归型的。IIR 滤波器运算结构通常由延时、乘以系数和相加等基本运 算组成。 IIR 数字滤波器的结构也有四种: 直接 I 型;直接 II 型—典范型;级联型;并联型。 3.2.2 数字滤波器的选取 由原始语音信号的频谱图可以看出,语音信号的能量集中在低频部分, 所以根据滤波器的特性和功能, 所选择的滤波器应该具有滤除无用的高频成 分的作用,所以可以选用低通滤波器。又由于 IIR 数字滤波器的输出不但取 决于过去和现在的输入,还取决于过去的输出,所以,选择 IIR 数字滤波器 比选择 FIR 数字滤波器要好。 所设计的 IIR 巴特沃斯数字低通滤波器如下:
wp=0.08*pi;ws=0.1*pi; %两个频率的信号 Rp=1;Rs=15;Fs=44100;Ts=1/Fs;%阻带衰减和通带衰减,中间是过渡区,采样频率 44100 wp1=2/Ts*tan(wp/2);%将数字指标转换成模拟指标 ws1=2/Ts*tan(ws/2); [N,Wn]=buttord(wp1,ws1,Rp,Rs,'s');%选择滤波器的最小阶数 [Z,P,K]=buttap(N);%创建 butterworth 模拟滤波器 [Bap,Aap]=zp2tf(Z,P,K); [b,a]=lp2lp(Bap,Aap,Wn); [bz,az]=bilinear(b,a,Fs);%用双线性变换法实现模拟滤波器到数字滤波器的转换 [H,W]=freqz(bz,az);%绘制频率响应曲线 y=filter(bz,az,x);%调用上边滤波器函数 grid; subplot(247); plot(W*Fs/(2*pi),abs(H));%画滤波器频域图 xlabel('频率/Hz'); ylabel('频率响应幅度'); title('Butterworth');

4

3.3 滤除噪声后的语音信号
将加噪后的语音信号通过所设计的低通数字滤波器: 滤除噪声后还未展示出来的程序: subplot(245),plot(t,y); title(' 滤波后的时域波形 ');% 画出滤波后的时域图 F0=fft(y,2048); subplot(246); F1=plot(f,abs(F0(1:512))); % 画出滤波后的频谱图 title(' 滤波后的频谱 '); xlabel(' 频率 /Hz'); ylabel(' 幅值 ');

5

由滤除噪声后的语音信号可以看出,噪音已被滤除,试听可知,原始 语音信号基本没有丢失。

6

4.GUI 设计
4.1 GUI 界面设计概述 GUI 设计面板是 GUI 设计工具应用的平面, 面板上部提供了菜单和常用 工具按钮,左边提供了多种如命令按钮、单选按钮、可编辑文本框、静态文 本框、弹出式菜单等。进行设计时 , 首先单击面板左边所需的控件 , 然后 在右边的图形界面编辑区中再次单击某一恰当位置 , 这时将在该位上为图 形界面添加相应的控件。 一个图形界面的完成 , 除了设计其外观外 , 还有 相当的一部分是通过属性的设来完成的。 应用 MATLAB 制作这样一个过程是非常方便的 , 我们可以通过 GUI 操 作来看到。该环境下要设计一个界面友好的仿真软件,一般应完成以下两个 步骤: ( 1 ) GUI 界面设计。主要是通过不同的文本框、按钮等许多工具的使 用,设计出一个图形用户界面。要清楚这个图形界面的功能是什么,即在图 形界面上的操作会引发什么样的结果。 ( 2 )回调函数的设计。用户应根据设计好的图形界面的功能,针对各 个不同的图形对象来编写出能够实现该功能的函数代码, 确保这个图形界面 能够完成所预定的功能。 4.2GUI 界面设计具体操作 在 matlab 命令行窗口中输入 guide 或点击 matlab 界面上面的菜单中 的 图标,打开 gui 设计的图形界面。然后拖入所要的图形控件,按需要修改外观和空间 属性,直至满足要求。设置属性点击 guide 界面上方的 Run 按钮,会生成一 个 fig 文件,一个 m 文件,其中 fig 文件就是界面的图形,m 文件是界面的 回调函数,在 m 文件里每个控件的回调函数都已经自动生成,控件要做的工 作就是在文件框架下定义某些特殊要求的状态并补充完整回调函数场 , 使 单击控件时激活回调程序完成一定的功能。

7

4.3 GUI 界面演示
1.初始界面:

2.输入相应参数并点击相应控件后界面



8

5.仿真结果的分析
从原始语音信号的频率谱密度可得:(频域上)频率主要集中在 1*10^5HZ 以下;噪声的频谱图可得:(频域上)噪声集中在 2*10^5HZ 以上;当两信 号进行叠加,的到的叠加信号具有了两信号的特点,时域上:只对噪声频带 宽带范围内对语音信号叠加,频域上:两信号频谱的叠加,各自信号频率对 于各自的位置。 利用双线性变换法,设计一个 butterworth 低通滤波器,设计的滤波器满足 一下要求, (为便于观察, 统一用频域上的频率) 通带截止频率为 1*10^5HZ , 阻带截止频率为 2*10^5HZ 。从滤噪后的信号频谱图上观察可得:叠加噪声 的图片通过滤波器后, 1*10^5HZ 通过, 2*10^5HZ 被滤除,所以基本上只将 噪声信号滤除掉了,回放语音,证实滤除效果非常理想。

6.课程设计总结
这次的课程设计,应该说命运多舛。刚开始对实验不是很懂,花费了大量 的时间,要么查资料,要么问同学。最终皇天不负有心人,终于在验收之前 给搞定了, 满心欢喜的等待老师的验收。 幸运的是也顺利通过了老师的验证, 本来是很开心的。 但是,万万没想到,最后需要交电子档的实验报告,而我把它给删了,当 我得知这个消息的时候万分悲痛,这也就意味着我还要重新做一次,什么都 是从零开始,眼看别人很快就搞定了,我还要从头写程序开始,我真的很难 受。但是,我必须要去重新一步步整,中间的酸辛我也就不多说了,总之别 人在玩,我在整,别人在整,我还是在整。如果中间有很多不足的地方还请 老师谅解,我真的努力去做了,希望老师宽容大量,给我一个吸取教训的机 会,下次一定不会再犯这么低级的错误了。

7.参考文献
1 .陈后金.数字信号处理.第二版.北京:高等教育出版社, 2008.11 2 .刘卫国. MATLAB 程序设计与应用. 第二版. 北京: 高等教育出版社, 2006.7

9

附录
%GUI 源程序 function varargout = untitled(varargin) % UNTITLED MATLAB code for untitled.fig % UNTITLED, by itself, creates a new UNTITLED or raises the existing % singleton*. % % H = UNTITLED returns the handle to a new UNTITLED or the handle to % the existing singleton*. % % UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in UNTITLED.M with the given input arguments. % % UNTITLED('Property','Value',...) creates a new UNTITLED or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before untitled_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to untitled_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help untitled % Last Modified by GUIDE v2.5 02-Jan-2017 21:00:51 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @untitled_OpeningFcn, ...
10

'gui_OutputFcn', @untitled_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 % End initialization code - DO NOT EDIT

% --- Executes just before untitled is made visible. function untitled_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to untitled (see VARARGIN) % Choose default command line output for untitled handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes untitled wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line. function varargout = untitled_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of
11

MATLAB % handles

structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure varargout{1} = handles.output;

% --- Executes during object creation, after setting all properties. function axes1_CreateFcn(hObject, eventdata, handles) % hObject handle to axes1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: place code in OpeningFcn to populate axes1

% --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [s,fs]=audioread ('C:\Users\昊东\Desktop\zhd.wav');%读取语音 信号的数据,赋给变量 y 信号 频率

y1=fft(s); plot(handles.axes1,s) plot(handles.axes5,abs(y1)) % --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [s,fs]=audioread ('C:\Users\昊东\Desktop\zhd.wav');%读取语音 信号的数据,赋给变量 y 信号 频率
12

y1=fft(s); f=fs*(0:511)/2048;%使频谱图的坐标从零开始 t=0:1/44100:(size(s)-1)/44100; %将所加噪声信号的点数调整到与原 始信号相同 Au=0.08; %幅度值 d=Au*cos(2*pi*5000*t); %加余弦信号 频率是 5000hz n=d';%将噪声进行转置,以便使噪声与信号的行列相同,进行相加 x=s+n;%原始信号和噪声信号叠加 y2=fft(x);%进行 2048 点傅里叶变换 plot(handles.axes2,x) plot(handles.axes6,abs(y2)) % --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [s,fs]=audioread ('C:\Users\昊东\Desktop\zhd.wav');%读取语音 信号的数据,赋给变量 y 信号 频率

t=0:1/44100:(size(s)-1)/44100; %将所加噪声信号的点数调整到与原 始信号相同 Au=0.08; %幅度值 d=Au*cos(2*pi*5000*t); %加余弦信号 频率是 5000hz n=d';%将噪声进行转置,以便使噪声与信号的行列相同,进行相加 x=s+n;%原始信号和噪声信号叠加 wp=0.08*pi;ws=0.1*pi; %两个频率的信号 Rp=1;Rs=15;Fs=44100;Ts=1/Fs;%阻带衰减和通带衰减,中间是过渡区,

13

采样频率 44100 wp1=2/Ts*tan(wp/2);%将数字指标转换成模拟指标 ws1=2/Ts*tan(ws/2); [N,Wn]=buttord(wp1,ws1,Rp,Rs,'s');%选择滤波器的最小阶数 [Z,P,K]=buttap(N);%创建 butterworth 模拟滤波器 [Bap,Aap]=zp2tf(Z,P,K); [b,a]=lp2lp(Bap,Aap,Wn); [bz,az]=bilinear(b,a,Fs);%用双线性变换法实现模拟滤波器到数字滤波 器的转换 [H,W]=freqz(bz,az);%绘制频率响应曲线 y=filter(bz,az,x);%调用上边滤波器函数 F0=fft(y); plot(handles.axes3,x) plot(handles.axes7,abs(F0)) % --- Executes on button press in pushbutton5. function pushbutton5_Callback(hObject, eventdata, handles) % hObject handle to pushbutton5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [s,fs]=audioread ('C:\Users\昊东\Desktop\zhd.wav'); sound(s,fs); % --- Executes on button press in pushbutton6. function pushbutton6_Callback(hObject, eventdata, handles) % hObject handle to pushbutton6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [s,fs]=audioread ('C:\Users\昊东\Desktop\zhd.wav');%读取语音 信号的数据,赋给变量 y y1=fft(s); f=fs*(0:511)/2048;%使频谱图的坐标从零开始
14

信号 频率

t=0:1/44100:(size(s)-1)/44100; %将所加噪声信号的点数调整到与原 始信号相同 Au=0.08; %幅度值 d=Au*cos(2*pi*5000*t); %加余弦信号 频率是 5000hz n=d';%将噪声进行转置,以便使噪声与信号的行列相同,进行相加 x=s+n;%原始信号和噪声信号叠加 sound(x); % --- Executes on button press in pushbutton7. function pushbutton7_Callback(hObject, eventdata, handles) % hObject handle to pushbutton7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [s,fs]=audioread ('C:\Users\昊东\Desktop\zhd.wav');%读取语音 信号的数据,赋给变量 y 信号 频率

t=0:1/44100:(size(s)-1)/44100; %将所加噪声信号的点数调整到与原 始信号相同 Au=0.08; %幅度值 d=Au*cos(2*pi*5000*t); %加余弦信号 频率是 5000hz n=d';%将噪声进行转置,以便使噪声与信号的行列相同,进行相加 x=s+n;%原始信号和噪声信号叠加 wp=0.08*pi;ws=0.1*pi; %两个频率的信号 Rp=1;Rs=15;Fs=44100;Ts=1/Fs;%阻带衰减和通带衰减,中间是过渡区, 采样频率 44100 wp1=2/Ts*tan(wp/2);%将数字指标转换成模拟指标 ws1=2/Ts*tan(ws/2); [N,Wn]=buttord(wp1,ws1,Rp,Rs,'s');%选择滤波器的最小阶数
15

[Z,P,K]=buttap(N);%创建 butterworth 模拟滤波器 [Bap,Aap]=zp2tf(Z,P,K); [b,a]=lp2lp(Bap,Aap,Wn); [bz,az]=bilinear(b,a,Fs);%用双线性变换法实现模拟滤波器到数字滤波 器的转换 [H,W]=freqz(bz,az);%绘制频率响应曲线 y=filter(bz,az,x);%调用上边滤波器函数 sound(y);

% --- Executes on button press in pushbutton8. function pushbutton8_Callback(hObject, eventdata, handles) % hObject handle to pushbutton8 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) wp=0.08*pi;ws=0.1*pi; %两个频率的信号 Rp=1;Rs=15;Fs=44100;Ts=1/Fs;%阻带衰减和通带衰减,中间是过渡区, 采样频率 44100 wp1=2/Ts*tan(wp/2);%将数字指标转换成模拟指标 ws1=2/Ts*tan(ws/2); [N,Wn]=buttord(wp1,ws1,Rp,Rs,'s');%选择滤波器的最小阶数 [Z,P,K]=buttap(N);%创建 butterworth 模拟滤波器 [Bap,Aap]=zp2tf(Z,P,K); [b,a]=lp2lp(Bap,Aap,Wn); [bz,az]=bilinear(b,a,Fs);%用双线性变换法实现模拟滤波器到数字滤波 器的转换 [H,W]=freqz(bz,az);%绘制频率响应曲线 plot(handles.axes4,abs(H))

16


赞助商链接

课程设计---IIR数字低通滤波器的MATLAB实现

课程设计---IIR数字低通滤波器MATLAB实现 - IIR 数字低通滤波器MATLAB 实现 一、设及计任务要求: 设计任务: 在 matlab 基础上,利用相关的命令实现语音信号...

基于MATLAB的低通IIR滤波器设计_图文

吉首大学信息科学与工程学院 课程设计报告书 课课姓学 程 通信系统设计与仿真 题:基于 MATLAB 的低通 IIR 滤波器设计 名: 号: 曾杰、刘潇雄、刘送杰 ...

基于MATLAB的IIR滤波器设计

基于MATLAB的IIR滤波器设计 - 基于 MATLAB 的 IIR 数字滤波器的设计 摘要:利用MATLAB 设计滤波器,可以按照设计要求非常方便地调整设计参数,极大地减轻了设计的工作...

基于Matlab的IIR数字滤波器设计(毕业论文)

基于Matlab的IIR数字滤波器设计(毕业论文)_工学_高等教育_教育专区。基于 Matlab...重点设计Chebyshev I型和Chebyshev II型数字低通滤波 器,并介绍最优化设计。 【...

基于Matlab的IIR数字滤波器设计

基于Matlab的IIR数字滤波器设计_信息与通信_工程科技_专业资料。基于 Matlab 的 ...(1)寻找一个截止频率为 1 的模拟低通滤波器并将这个滤波器的原型转换为 所...

基于matlab的IIR数字滤波器的设计毕业设计(论文)

基于matlab的IIR数字滤波器设计毕业设计(论文) - 基于 matlab 的 IIR 数字滤波器设计 摘要:IIR 数字滤波器在 MATLAB 环境下的设计方法和实现方法, 在无限脉...

基于Matlab的IIR数字低通滤波器的计

基于Matlab的IIR数字低通滤波器的计_信息与通信_工程科技_专业资料。陕西理工学院课程设计 引言当今,数字信号处理技术正飞速发展,它不但自成一门学科,更是以不同的...

基于Matlab的IIR数字滤波器设计毕业设计(论文)

基于Matlab的IIR数字滤波器设计毕业设计(论文)_工学_高等教育_教育专区。毕业...重点设计Chebyshev I型和Chebyshev II型数字低通滤波 器,并介绍最优化设计。 【...

基于Matlab的IIR数字滤波器设计(论文)

基于Matlab的IIR数字滤波器设计(论文) - 摘要 在现代通信系统中,由于信号中经常混有各种复杂成分,所以很多信号分 析都是基于滤波器而进行的,而数字滤波器是通过...

基于IIR数字滤波器的设计matlab毕业设计(含源文件)

基于IIR数字滤波器的设计matlab毕业设计(含源文件) - 引言 MATLAB矩阵实验室(Matrix Laboratory)的简称,是美国 MathWorks 公司出品的商 业数学软件...