课程设计基于Matlab的数字滤波器设计及其对语音信号的应用.docx
《课程设计基于Matlab的数字滤波器设计及其对语音信号的应用.docx》由会员分享,可在线阅读,更多相关《课程设计基于Matlab的数字滤波器设计及其对语音信号的应用.docx(19页珍藏版)》请在冰豆网上搜索。
课程设计基于Matlab的数字滤波器设计及其对语音信号的应用
基于Matlab的数字滤波器设计及其对语音信号的应用
班级:
姓名:
学号:
指导教师:
徐秀芝
日期:
2012-11-23
摘要:
MATLAB语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,信号处理是MATLAB重要应用的领域之一。
本课程设计介绍了基于Matlab的对语音信号采集、处理及滤波器的设计,并使之实现的过程。
理解与掌握课程中的基本概念、基本原理、基本分析方法,用Matlab进行数字语音信号处理,并阐述了课程设计的具体方法、步骤和内容。
综合运用本课程的理论知识进行频谱分析以及滤波器设计,通过理论推导得出相应结论,并利用MATLAB作为工具进行实现,从而复习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,并从实践上初步实现对数字信号的处理。
关键词:
MATLAB工具信号语音采集滤波器
一课程设计的目的:
1.掌握数字信号的频谱分析及数字滤波器的基本概念;
2.掌握基于MATLAB的FIR和IIR数字滤波器的设计方法;
3.掌握在MATLAB下语音信号的采集、时域波形分析、频谱分析及滤波设计;
4.培养学生分析、解决问题的能力;
5.初步培养学生撰写论文的能力,为下一步毕业设计做准备。
二滤波器设计方法综述:
1).直接设计数字滤波器;
数字滤波器是数字信号处理的一个重要组成部分。
数字滤波实际上是一种运算过程,其功能是将一组输入的数字序列通过一定的运算后转变为另一组输出的数字序列。
数字滤波器一般可以用两种方法来实现:
一种是根据描述数字滤波器的数学模型或信号流图,用数字硬件装配成一台专门的设备,构成专用的信号处理机;另一种方法就是直接利用通用计算机,将所需要的运算编成程序让计算机来执行,这也是用软件来实现数字滤波器。
数字滤波器是离散时间系统,所处理的信号是离散时间信号。
一般时域离散系统或网络可以用差分方程、单位脉冲响应以及系统函数进行描述。
如果输入、输出服从N阶差分方程
则其系统函数,即滤波器的传递函数为
2).脉冲响应不变法;
利用模拟滤波器来设计数字滤波器,就是从已知的模拟滤波器传递函数Ha(s)设计数字滤波器的系统函数H(z)。
因此,它归根结底是一个由S平面映射到Z平面的变换,这个变换通常是复变函数的映射变换,为了保证转换后的H(z)稳定且满足技术要求,这个映射变换必须满足以下两条基本要求:
(1)因果稳定的模拟滤波器转换成数字滤波器,仍是因果稳定的。
即S平面的左半平面必须映射到Z平面单位圆的内部。
(2)数字滤波器的频率响应模仿模拟滤波器的频响,s平面的虚轴映射为z平面的单位圆,相应的频率之间成线性关系。
核心原理:
通过对连续函数ha(t)等间隔采样得到离散序列ha(nT)。
令h(n)=ha(nT),T为采样间隔。
它是一种时域上的转换方法。
转换步骤:
3).双线性变换;
脉冲响应不变法的主要缺点是频谱交叠产生的混淆,这是从S平面到Z平面的标准变换的多值对应关系导致的,为了克服这一缺点,设想变换分为两步:
第一步:
将整个S平面压缩到S1平面的一条横带里;
第二步:
通过标准变换关系将此横带变换到整个Z平面上去。
由此建立S平面与Z平面一一对应的单值关系,消除多值性,也就消除了混淆现象。
与脉冲响应不变法相比,双线性变换的主要优点:
靠频率的严重非线性关系得到S平面与Z平面的单值一一对应关系,整个jΩ轴单值对应于单位圆一周。
在零频率附近,Ω~ω接近于线性关系,Ω进一步增加时,ω增长变得缓慢,(ω终止于折叠频率处),所以双线性变换不会出现由于高频部分超过折叠频率而混淆到低频部分去的现象。
双线性变换法的缺点:
Ω与ω的非线性关系,导致数字滤波器的幅频响应相对于模拟滤波器的幅频响应有畸变,(使数字滤波器与模拟滤波器在响应与频率的对应关系上发生畸变)。
双线性变换比脉冲响应法的设计计算更直接和简单。
由于s与z之间的简单代数关系,所以从模拟传递函数可直接通过代数置换得到数字滤波器的传递函数。
4).使用MATLAB下的FilterDesignedTool3。
在CommandWindow窗口中输入fdatool,出现滤波器设计工具界面
图1滤波器设计界面
设计思路:
首先将数字高通滤波器的技术指标转化为模拟滤波器的技术指标,再采用Buttetworth逼近的方法求得其系统函数H(S),再利用冲激响应不变法将模拟滤波器的系统函数H(s)变为相应的数字滤波器的系统函数H(Z),然后用MATALB进行仿真,然后确定数字滤波器的结构。
5).IIR滤波器设计的基本思想
将数字滤波器的设计为模拟滤波器的设计。
设计满足技术指标的模拟滤波器。
将模拟滤波器转换为数字滤波器。
无限长单位脉冲响应(IIR)数字滤波器的单位脉冲响应h(n)是一个无限长序列,器滤波器的结构采用递归结构,即在信号流图中包含反馈支路。
基本网络结构有直接型、级联型和并联型三种。
其中,直接型有可以分为直接Ⅰ型和直接Ⅱ型两种。
直接Ⅰ型
直接Ⅱ型
级联型
并联型
6).设计FIR滤波器
用窗函数法设计上面要求的3种滤波器。
可以利用函数fir1设计FIR滤波器。
滤波器的单位脉冲响应h(n)长度为N,那么
H(z)是
的N-1次多项式(FIR滤波器的阶数是N-1),该系统在z平面上有N-1个零点,在z=0处有一个N-1重极点。
系统永远稳定。
与IIR滤波器比较,设计方法差别很大,由于h(n)长度为有限的,因此FIR滤波器设计通常是找出这有限个值。
直接型
级联型
频率采样型
三课程设计的总体内容:
给定滤波器的性能指标,在MATLAB平台下设计各种FIR和IIR数字滤波器,画出滤波器的频率响应;
录制一段语音信号,画出语音信号的时域波形和频谱图,然后给原始语音信号加入噪声,然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号频谱图进行对比,分析信号的变化,回放语音信号。
四课程设计的准备工作:
1.准备相关参考书,查阅相关文献,复习数字信号处理中各种滤波器的性能指标及设计方法;
2.准备基于MATLAB的语音信号的录音、读取、时域波形、频谱分析等基本知识。
3.根据你对滤波器原理及其应用的理解,制定自己的设计方案,使用Matlab进行设计,写出源代码,得出仿真结果。
五具体步骤与要求:
1.设计数字滤波器,画出其频率响应曲线
各滤波器的性能指标:
(1)低通滤波器性能指标 fp=1000Hz,fs=1200Hz,As=40dB,Ap=1dB。
(2)高通滤波器性能指标 fs=4000Hz,fp=4300Hz,As=40dB,Ap=1dB
(3)带通滤波器性能指标 fp1=1200Hz,fp2=3000Hz,fs1=1000Hz,fs2=3200Hz,As=40dB,Ap=1dB。
要求:
(1)设计IIR滤波器:
利用函数butter设计低通、利用函数cheby1设计高通,利用函数ellip设计带通。
(2)(选做)设计IIR滤波器:
用双线性变换法设计上面要求的3种滤波器。
(3)(选做)设计FIR滤波器:
用窗函数法设计上面要求的3种滤波器。
可以利用函数fir1设计FIR滤波器。
(4)函数freqz画出各滤波器的频率响应。
①低通滤波器
图1cheby1滤波器设计流程图
程序为:
[y,fs,bit]=wavread('xm.wav');
fp=1000;
fr=1200;
ap=1;
as=40;
[n,fn]=buttord(fp/(fs/2),fr/(fs/2),ap,as,'z');
[b,a]=buttap(n,ap,fn);
freqz(b,a);
[h,w]=freqz(b,a);
subplot(221);plot(w*fs/(2*pi),abs(h));title('buttap低通滤波');
y1=filter(b,a,y);
subplot(222);plot(y);title('原始语音信号');
subplot(223);plot(y1);title('IIR滤波后语音信号');
X=fft(y1,4096);
subplot(224);plot(abs(X));title('滤波后信号频谱');
显示为:
图1butter高通滤波(a)原始语音信号(b)
IIR滤波后语音信号(c)滤波后信号频谱(d)
②高通滤波器
图2cheby1滤波器设计流程图
程序为:
[y,fs,bit]=wavread('xm.wav');
fp=4300;
fr=4000;
ap=1;
as=40;
[n,fn]=cheb1ord(fp/(fs/2),fr/(fs/2),ap,as,'z');
[b,a]=cheby1(n,ap,fn,'high');
freqz(b,a);
[h,w]=freqz(b,a);
subplot(221);plot(w*fs/(2*pi),abs(h));title('cheby1高通滤波');
y1=filter(b,a,y);
subplot(222);plot(y);title('原始语音信号');
subplot(223);plot(y1);title('IIR滤波后语音信号');
X=fft(y1,4096);
subplot(224);plot(abs(X));title('滤波后信号频谱');
显示为:
图2cheby1高通滤波(a)原始语音信号(b)
IIR滤波后语音信号(c)滤波后信号频谱(d)
③带通滤波器
程序为:
[y,fs,bit]=wavread('xm.wav');
fp1=1200;
fr1=1000;
fp2=3000;
fr2=3200;
ap=1;
as=40;
fp=[fp1,fp2];
fr=[fr1,fr2];
[n,fn]=cheb1ord(fp/(fs/2),fr/(fs/2),ap,as,'z');
[b,a]=cheby1(n,ap,fn);
[h,w]=freqz(b,a);
subplot(221);plot(w*fs/(2*pi),abs(h));title('cheby1带通滤波');
y1=filter(b,a,y);
subplot(222);plot(y);title('原始语音信号');
subplot(223);plot(y1);title('IIR滤波后语音信号');
X=fft(y1,4096);
subplot(224);plot(abs(X));title('滤波后信号频谱');
显示为:
图3cheby1带通滤波(a)原始语音信号(b)
IIR滤波后语音信号(c)滤波后信号频谱(d)
2.语音信号的采集
录制一段自己的话音,或利用老师给的语音,在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。
图4语音采集流程图
程序为:
[y,fs,bite]=wavread('xm.wav');
sound(y);
wavrecord(2*fs,fs);
fft(y);
Y=fft(y);
fp=1000;
fr=1200;as=40;ap=1;
[N,Wn]=BUTTORD(2*fp/fs,2*fr/fs,ap,as);
[B,A]=BUTTER(N,Wn);
显示为:
图4语音信号的采集
3.语音信号的频谱分析
要求画出语音信号的时域波形,然后对语音号进行快速傅里叶变换,得到信号的幅频特性、对数幅度谱及相频特性。
程序为:
[y,fs,bite]=wavread('xm.wav');
sound(y);
Y=fft(y);
mag=abs(Y);
phase=angle(Y);
phase=phase*180/pi;
dB=20*log10(abs(Y)+eps);
t=(0:
length(y)-1)/fs;
figure
(1)
subplot(221);plot(t,y);title('波形图');xlabel('时间(s)');ylabel('幅度');
f=(1:
length(Y))*fs/length(Y);
subplot(222);plot(f,mag);title('幅度谱');xlabel('频率(Hz)');ylabel('频谱幅度');
subplot(223);plot(f,phase);title('相位谱');xlabel('频率(Hz)');ylabel('频谱相位');
subplot(224);plot(f,dB);title('对数幅度谱');xlabel('频率(Hz)');ylabel('频谱幅度(dB)');
显示为:
图5波形图(a)幅度谱(b)相位谱(c)对数幅度谱(d)
4.给语音信号加入噪声,自己设计滤波器对带噪语音信号进行滤波,比较滤波前后语音信号的波形及频谱,并在一个窗口同时画出滤波前后的波形及频谱。
(1)IIR滤波器利用函数filter对信号进行滤波;
(2)FIR滤波器利用函数fftfilt对信号进行滤波。
5.回放语音信号
在Matlab中,函数sound可以对声音进行回放。
其调用格式:
sound(x,fs,bits);可以感觉滤波前后的声音有变化。
程序为:
fs=22050;
x1=wavread('xm.wav');
t=0:
1/22050:
(size(x1)-1)/22050;
Au=0.03;
d=[Au*cos(2*pi*5000*t)]';
x2=x1+d;
wp=0.25*pi;
ws=0.3*pi;
wdelta=ws-wp;
N=ceil(6.6*pi/wdelta);%取整
wn=(0.2+0.3)*pi/2;
b=fir1(N,wn/pi,hamming(N+1));%选择窗函数,并归一化截止频率
figure
(1)
freqz(b,1,512)
f2=filter(bz,az,x2)
figure
(2)
subplot(2,1,1)
plot(t,x2)
title('滤波前的时域波形');
subplot(2,1,2)
plot(t,f2);
title('滤波后的时域波形');
sound(f2,22050);%播放滤波后的语音信号
F0=fft(f2,1024);
f=fs*(0:
511)/1024;
figure(3)
F1=fft(x2,1024);
subplot(2,1,1);
plot(f,abs(y2(1:
512)));
title('滤波前的频谱')
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2)
F2=plot(f,abs(F0(1:
512)));
title('滤波后的频谱')
xlabel('Hz');
ylabel('fuzhi');
显示为:
6设计总结
通过这次设计,使我对语音信号有了全面的认识,对数字信号处理又有了深刻的理解,加深了我对数字信号处理的基本概念、基本理论和基本方法的理解,更加全面的掌握了MATLAB设计FIR和IIR数字滤波器的方法,对语音信号采集以及时域、频域分析以及滤波器设计放方法更加熟练。
通过本次课程设计我感受到只有在了解课本知识的前提下,才能更好的应用这个工具;同时要感谢徐秀芝老师对本次课程设计的大力指导,老师严谨的治学态度让学生受益匪浅,今后还要继续努力,不断推陈出新,加深自己对数字图像处理的不断理解。
7参考文献
(1)唐建锋,游开明,陈列尊.基于Matlab的数字滤波器设计研究型实验探讨(B).现代电子技术,2006;14-001-02,1-2.
(2)侯宁.Matlab在数字滤波器设计中的应用,化学工程与装备,2008;59-62.
(3)李铖,蒋维.定点DSP中的数字滤波器应用.仪器仪表用,2006;06-0067-02.
(4)[美]哈里Y-F拉姆.模拟和数字滤波器设计与实现.北京市:
人民邮电出版社,1985.405-450.
(5)[美]A·安东尼奥.数字滤波器分析与设计.西安市:
陕西科学技术出版社,1984.210-240.
(6)邹理和.数字滤波器.北京市:
国防工业出版社,1979.80-100.