基于MATLAB的数字滤波器设计文档格式.docx
《基于MATLAB的数字滤波器设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的数字滤波器设计文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
四、进程安排
周一:
资料收集
周二:
利用MATLAB完成GUI界面绘制
周三:
程序调试
周四:
书写课程设计说明书
周五:
答辩
五、主要参考资料
1、楼顺天,李博菡.基于MATLAB的系统分析与设计—信号处理.西安电
子科技大学出版社,1998
2、奥本海姆.离散时间信号处理.科学出版社,2000
3、宗孔德,胡广书.数字信号处理.清华大学出版社,1997
指导教师(签名):
教研室主任(签名):
课程设计成绩评定表
出勤
情况
出勤天数
缺勤天数
成
绩
评
定
出勤情况及设计过程表现(20分)
课设答辩(20分)
设计成果(60分)
总成绩(100分)
提问
(答辩)
问题
综
合
指导教师签名:
年月日
1绪论
与模拟滤波器相对应,在离散系统中广泛应用数字滤波器。
它的作用是利用离散时间系统的特性对输入信号波形或频率进行加工处理。
或者说,把输入信号变成一定的输出信号,从而达到改变信号频谱的目的。
数字滤波器一般可以用两种方法来实现:
一种方法是用数字硬件装配成一台专门的设备,这种设备称为数字信号处理机;
另一种方法就是直接利用通用计算机,将所需要的运算编成程序让通用计算机来完成,即利用计算机软件来实现。
模拟滤波器在测试系统或专用仪器仪表中是一种常用的变换装置。
例如:
带通滤波器用作频谱分析仪中的选频装置;
低通滤波器用作数字信号分析系统中的抗频混滤波;
高通滤波器被用于声发射检测仪中剔除低频干扰噪声;
带阻滤波器用作电涡流测振仪中的陷波器,等等。
MATLAB是由美国Mathworks公司推出的用于数值计算和图形处理的科学计算系统环境。
MATLAB是英文MATrixLABoratory(矩形实验室)的缩写。
在MATLAB环境下,用户可以集成地进行程序设计,数值计算,图形绘制,输入输出,文件管理等各项操作。
除此之外,MATLAB还具有很强的功能扩展能力,与它的主系统一起,可以配备各种各样的工具箱,以完成一些特定的任务。
目前,Mathworks公司推出了18种工具箱。
用户可以根据自己的工作任务,开发自己的工具箱。
2数字滤波器的设计
2.1数字滤波器的基本概念
滤波器从功能上分类可以分为经典滤波器和现代滤波器,经典滤波器主要用于在频率域的滤波选取,现代滤波器是通过复杂的统计学理论,用于在大量的同频率信号中选取需要的信号数据,数字滤波器从实现方法上可以分为无限冲击响应滤波器和有限冲击响应滤波器。
它们是用单位采样响应h(n)的特性来区分的,IIR滤波器的h(n)是无限长序列,而FIR滤波器的h(n)是有限长序列。
2.2利用双线性变换法设计IIR数字滤波器
变换原理:
双线性变换法是使数字滤波器的频率响应与模拟滤波器的频率响应相似的一种变换方法。
为了克服脉冲响应不变法的多值映射这一缺点,首先把整个s平面压缩变换到某一中介的s1平面的一横带里,然后再通过标准变换关系将此横带变换到整个z平面上去,这样就使s平面与z平面是一一对应关系,消除了多值变换性,同时也就消除了频谱混叠现象。
IIR滤波器的设计原理
IIR数字滤波器的设计一般是利用目前已经很成熟的模拟滤波器的设计方法来进行设计,通常采用模拟滤波器原型有butterworth函数、chebyshev函数、bessel函数、椭圆滤波器函数等。
IIR数字滤波器的设计步骤:
1.按照一定规则把给定的滤波器技术指标转换为模拟低通滤波器的技术指标;
2.根据模拟滤波器技术指标设计为响应的模拟低通滤波器;
3.很据脉冲响应不变法和双线性不变法把模拟滤波器转换为数字滤波器;
4.如果要设计的滤波器是高通、带通或带阻滤波器,则首先把它们的技术指标转化为模拟低通滤波器的技术指标,设计为数字低通滤波器,最后通过频率转换的方法来得到所要的滤波器。
本课程设计设计思想:
首先利用MATLAB分别产生低频中频高频信号,然后进行叠加得到连续时间信号;
对所产生的连续时间信号进行采样,得到数字信号;
对信号进行FFT频谱分析,绘制其频谱图;
根据信号频谱分析的结果,分别设计高通,低通,带通滤波器,得到滤波器的幅频及相频特性。
3课程设计的具体实现
3.1对语音信号进行滤波的滤波器设计
3.1.1IIR数字滤波器的流程图
图3.1IIR数字滤波器流程图
3.1.2IIR低通滤波器设计
根据数字滤波器的设计原理,首先将数字域的指标转化为模拟域的指标设计模拟低通滤波器,然后应用双线性变换法将模拟滤波器转化为数字滤波器将指标转换成归一化模拟低通滤波器的指标,通过归一化的模拟低通滤波器阶数N和3dB截止频率的计算,将模拟域频率变换成模拟低滤波器H(s),并用双线性变换法将H(s)转换成数字低通滤波器H(z),由此得到低通数字滤波器。
IIR低通滤波器的设计程序为:
wb=fb*2*pi/fs;
wc=fc*2*pi/fs;
Wb=2*fs*tan(wb/2);
Wc=2*fs*tan(wc/2);
[n,wn]=buttord(Wb,Wc,Ap,As,'
s'
);
[b,a]=butter(n,wn,'
[bd,ad]=bilinear(b,a,fs);
[h,w]=freqz(bd,ad,1024);
figure
(1);
subplot(1,1,1);
plot(w*fs/(2*pi),20*log10(abs(h)));
title('
IIR低通滤波器幅频特性'
图3.2IIR低通滤波器的幅频特性
读入信号对信号傅里叶变换进行频谱分析,利用filter函数滤波,对得到的信号傅里叶变换进行频谱分析,与滤波前进行比较。
并在滤波前后用sound函数播放语音信号,观察滤波前后的变化。
图3.3滤波前后信号的波形和频谱比较
分析滤波前后信号的变化,波形图变窄,频谱变化表明:
信号的低频率段被保留,高频率段被滤除。
分析滤波前后的声音变化,滤波后声音明显变低而沉闷,这说明滤波器设计基本符合指标要求
3.1.3IIR高通滤波器设计
与低通滤波器的设计原理相似,首先将数字域的指标转化为模拟域的指标设计模拟低通滤波器,然后应用双性变换发将模拟滤波器转化为数字滤波器。
将指标转换成归一化模拟低通滤波器的指标,通过归一化的模拟低通滤波器阶数N和3dB截止频率的计算,将模拟域频率变换成模拟低滤波器H(s),并用双线性变换法将H(s)转换成数字低通滤波器H(z),由此得到低通数字滤波器。
IIR高通滤波器的设计程序为:
wb=fb*2*pi/fs;
wc=fc*2*pi/fs;
Wb=2*fs*tan(wb/2);
Wc=2*fs*tan(wc/2);
[n,wn]=buttord(Wb,Wc,ap,as,'
high'
'
figure(3);
plot(w,abs(h));
grid;
IIR高通滤波器幅频特性'
)
图3.4IIR高通滤波器的幅频特性
图3.5滤波前后信号的波形和频谱比较
分析滤波前后信号的变化,波形图变窄,频谱变化表明:
信号的高频率段被保留,低频率段被滤除。
分析滤波前后的声音变化,滤波后声音明显变高而尖锐,这说明滤波器设计基本符合指标要求。
3.1.4IIR带通滤波器设计
IIR带通滤波器的设计程序为:
wb=[fb1fb2]*2*pi/fs;
wc=[fc1fc2]*2*pi/fs;
Wb=2*fs*tan(wb/2);
Wc=2*fs*tan(wc/2);
[h,w]=freqz(bd,ad);
figure(5);
IIR带通滤波器幅频特性'
图3.6IIR带通滤波器的幅频特性
图3.7滤波前后信号的波形和频谱比较
分析滤波前后信号的变化,波形图变窄。
频谱变化表明:
信号的低频率段和高频率段被滤除,中间频率段被保留;
分析滤波前后的声音变化,滤波后声音一定程度上变的尖锐,与高通滤波器滤波后的声音相比较低。
这说明滤波器设计基本符合指标。
3.2对合成信号进行滤波的滤波器设计
3.2.1设计目的和要求
产生一个连续信号,包含低频、中频、高频分量,对其进行采样,进行频谱分析,分别设计三种高通、低通、带通滤波器对信号进行滤波处理,观察滤波后信号的频谱。
3.2.2合成信号的程序设计
f1=20;
f2=200;
f3=500;
t=(1:
100)/2000;
x1=sin(2*pi*t*f1);
x2=sin(2*pi*t*f2);
x3=sin(2*pi*t*f3);
x=sin(2*pi*t*f1)+sin(2*pi*t*f2)+sin(2*pi*t*f3);
axes(handles.axes1);
plot(x);
合成信号'
图3.8合成信号波形
3.2.3合成信号的频谱程序设计
n=[1:
100];
t=n/2000
X=fft(x,512);
w=(0:
255)/256*1000;
plot(w,abs([X(1:
256)]));
xlabel('
Hz'
ylabel('
频率响应幅度'
合成信号频谱'
图3.9合成信号频谱
3.2.4低通滤波器设计
Ft=8000;
Fp=1000;
Fs=1200;
As=100;
Ap=1;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
fp=2*Fp*tan(wp/2);
);
fs=2*Fs*tan(ws/2);
[n11,wn11]=buttord(wp,ws,1,50,'
[b11,a11]=butter(n11,wn11,'
[num11,den11]=bilinear(b11,a11,0.5);
[h,w]=freqz(num11,den11);
z11=filter(num11,den11,x);
m11=fft(z11);
axes(handles.axes2);
plot(abs(x),'
g'
滤波前信号频谱'
axes(handles.axes3);
plot(abs(m11),'
r'
滤波后信号频谱'
axes(handles.axes4);
滤波前信号波形'
axes(handles.axes5);
plot(z11);
滤波后信号波形'
如图3.10所示:
图3.10低通滤波前后信号的波形和频谱比较
这说明滤波器设计基本符合指标要求。
3.2.5IIR带通滤波器设计
Fp1=1200;
Fp2=3000;
Fs1=1000;
Fs2=3200;
As=100;
wp1=tan(pi*Fp1/Ft);
wp2=tan(pi*Fp2/Ft);
ws1=tan(pi*Fs1/Ft);
ws2=tan(pi*Fs2/Ft);
w=wp1*wp2/ws2;
bw=wp2-wp1;
wp=1;
ws=(wp1*wp2-w.^2)/(bw*w);
[n12,wn12]=buttord(wp,ws,1,50,'
[b12,a12]=butter(n12,wn12,'
[num2,den2]=lp2bp(b12,a12,sqrt(wp1*wp2),bw);
[num12,den12]=bilinear(num2,den2,0.5);
[h,w]=freqz(num12,den12);
z12=filter(num12,den12,x);
m12=fft(z12);
plot(abs(m12),'
plot(z12);
如图3.11所示
图3.11带通滤波前后信号的波形和频谱比较
信号的低频率段和高频率段被滤除,中间频率段被保留。
3.2.6IIR高通滤波器滤波
Fp=4000;
Fs=3500;
wp1=tan(pi*Fp/Ft);
ws1=tan(pi*Fs/Ft);
ws=wp1*wp/ws1;
[n13,wn13]=cheb1ord(wp,ws,1,50,'
[b13,a13]=cheby1(n13,1,wn13,'
[num,den]=lp2hp(b13,a13,wn13);
[num13,den13]=bilinear(num,den,0.5);
[h,w]=freqz(num13,den13);
z13=filter(num13,den13,x);
sound(z13);
m13=fft(z13);
plot(abs(m13),'
plot(z13);
如图3.12所示:
图3.12高通滤波前后信号的波形和频谱比较
4软件简介
4.1系统界面设计工具—GUI概述
图形用户界面(graphicaluserinterfaces),GUI则是由窗口、光标、按键、菜单、文字说明等对象(objects)构成的一个用户界面。
用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。
在MATLAB中GUI是一中包含多种对象的图形窗口,并为GUI开发提供一个方便高效的集成开发环境GUIDE。
GUIDE主要是一个界面设计工具集,MAYLAB将所有GUI支持度控件都集成在这个环境中,并提供界面外观、属性和行为响应方式的设置方法。
GUIDE将设计好的GUI保存在一个FIG文件中,同时生成M文件框架。
FIG文件:
包括GUI图形窗口及其所有后裔的完全描述,包括所有对象属性的属性值。
M文件包括GUI设计、控件函数以及定义为子函数的用户控件回调函数,主要用于控制GUI展开时的各种特征。
GUI创建包括界面设计和控件编程两部分,主要步骤如下。
第一步:
通过设置GUIDE应用程序的选项来运行GUIDE;
第二步:
使用界面设计编辑器进行面设计;
第三步:
编写控件行为响应控制(即回调函数)代码。
4.2界面设计及使用说明
首先我们新建一个GUI文件:
File/New/GUI如下图所示:
图4.1GUI创建界面
选择BlankGUI(Default)。
其次,进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下图所示;
图4.2GUI开发环境
布置好各控件以后,就可以来为这些控件编写程序来实现对语音或合成信号进行滤波的功能了。
最后,单击相应的按钮,便跳出对应的界面,进行操作。
图4.3系统运行界面
5结论
语音信号处理是语音学与数字信号处理技术相结合的交叉学科,课题在这里不讨论语音学,而是将语音当做一种特殊的信号,即一种“复杂向量”来看待。
也就是说,课题更多的还是体现了数字信号处理技术。
从课题的中心来看,课题“基于MATLAB的有噪声语音信号处理”是希望将数字信号处理技术应用于某一实际领域,这里就是指对语音及加噪处理。
作为存储于计算机中的语音信号,其本身就是离散化了的向量,我们只需将这些离散的量提取出来,就可以对其进行处理了。
这一过程的实现,用到了处理数字信号的强有力工具MATLAB。
通过MATLAB里几个命令函数的调用,很轻易的在实际语音与数字信号的理论之间搭了一座桥。
课题的特色在于它将语音信号看作一个向量,于是就把语音数字化了。
那么,就可以完全利用数字信号处理的知识来解决语音及加噪处理问题。
我们可以像给一般信号做频谱分析一样,来对语音信号做频谱分析,也可以较容易的用数字滤波器来对语音进行滤波处理。
通过比较加噪前后,语音的频谱和语音回放,能明显的感觉到加入噪声后回放的声音与原始的语音信号有很大的不同,前者随较尖锐的干扰啸叫声。
从含噪语音信号的频谱图中可以看出含噪声的语音信号频谱,在整个频域范围内分是布均匀。
其实,这正是干扰所造成的。
通过滤波前后的对比,低通滤波后效果最好,高通滤波后的效果最差。
由此可见,语音信号主要分布在低频段,而噪声主要分布在高频段。
最后,还利用了MATLAB的另一强大功能——GUI界面设计。
设计出了一个简易的用户应用界面,可以让人实现界面操作,更加方便的进行语音的频谱分析与加噪滤波处理。
6致谢
通过这次课设,我认识到了MATLAB功能非常的强大,使得我们在使用的时候用户直接调用这些库函数并赋予实际参数就能解决实际问题,具有极高的变成效率。
我也熟悉了MATLAB的工作环境,可以很熟练的对MATLAB进行常规的操作,快速进行程序编辑和仿真。
本文次课设通过一个设计实例,利用MATLAB实现IIR数字滤波器设计与滤波的三种方法,从仿真结果可以看出它们均可以达到技术指标要求,而且方法简单、快捷,大大减轻了工作量。
滤波器的设计工作完成后,可以借助于MATLAB的export操作导出所设计滤波器的系统函数H(z)。
由于MATLAB具有强大的接口功能,仿真后的结果可以很方便的移植到DSP、CPLD。
在实际应用中,只需按要求修改滤波器参数,并对程序作较少的改动,即可实现不同截止频率的FIR滤波器,实用性较强。
完成任务后才发现这次训练的内容并不算难。
首先要做的工作就是如何把设计条件写入到MATLAB中,其次就是对条件进行分析,主要是得出一些参数。
以上的内容全都要通过程序的编写来完成,不过主要的操作是对函数的调用,这就要我们熟悉MATLAB的一些函数的基本功能以及它们的基本语句。
这次课程设计的主要目的是基于MATLAB的语音信号分析及滤波。
通过设计IIR和FIR的各种滤波器,并对声音信号进行滤波处理,加深对DSP数字信号处理的理解和对MATLAB的进一步学习,将理论转化成实践,并在实践中检验理论。
在设计完滤波器后,要求设计一个图形用户界面GUI,通过此界面来实现各个滤波器的功能,初步认识人机交互界面的开发,为以后的学习和设计打下基础。
当然,经过了课程设计,我也发现了自己的很多不足。
但是通过自己的动手动脑,既增加了知识,又给了我专业知识以及专业技能上的提升,我也会更加努力,认真学习,争取在以后的课程中做得更好!
最后,我要在这里对给我这次课程设计提供帮助的老师还有同学们说声诚挚的:
谢谢。
因为你们的帮助才使得我的这次课程设计得意圆满完成,并从中学到了很多知识,不仅巩固了已有知识,而且强化了一些关于数学MATLAB软件应用方面的知识,非常感谢你们的帮助。
参考文献
[1]高西全,丁玉美.数字信号处理.北京:
西安电子科技大学出版社,2008
[2]刘泉,阙大顺.数字信号处理原理与实现.北京:
电子工业出版