《MATLAB语音滤波实验》由会员分享,可在线阅读,更多相关《MATLAB语音滤波实验(12页珍藏版)》请在金锄头文库上搜索。
1、数字信号处理实验报告实验目的1、学会MATLAB的使用,掌握其程序设计方法,学会对信号进行分析和处理;2、掌握语音信号的采集、存储和时频分析;3、要求掌握IIR数字滤波器的设计原理、设计方法和设计步骤;4、学习用窗函数法设计FIR数字滤波器的原理及其设计步骤;5、了解学习GUI图形用户界面,进行实验程序的演示。二. 实验内容1、录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的 时域波形和频谱图;2、给定滤波器的性能指标,采用窗函数法和双线性变换法设计滤波器,并画出滤波器 的频率响应;3、用设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对 滤波前后的
2、信号进行对比,分析信号的变化;回放语音信号;4、换一个性别相异的人录制同样一段语音内容,分析两段内容相同的语音信号频谱之 间的特点;5、录制一段同样长时间的背景噪声叠加到语音信号中,分析叠加前后信号频谱的变化, 设计一个合适的滤波器,能够把该噪声滤除。三. 实验原理分析实验的几个要求可以看出,实验主要考察的是数字滤波器的设计及语音信号的 滤波,涉及到男声和女声的分析。从本质上说,本实验涉及的信号是人的语言,众所周 知,人声的频率范围是20Hz到20000Hz,进一步的分析知声音范围大约在65-950 Hz, 所以设计的是低通滤波器。1. 语音信号的采集熟悉并掌握MATLAB中有关声音(wave
3、)录制、播放、存储和读取的函数,在MATLAB 环境中,有关声音的函数有:a: y=wavrecord(N,fs,Dtype);利用系统音频输入设备录音,以fs为采样频率,默认值 为11025,即以11025HZ进行采样。Dtype为采样数据的存储格式,用字符串指定,可以是: double、single、int16、int8其中只有int8是采用8位精度进行采样, 其它三种都是16位采样结果转换为指定的MATLAB数据;b: wavplay(y,fs);利用系统音频输出设备播放,以fs为播放频率,播放语音信号y; c: wavwrite(y,fs,wavfile);创建音频文件;d: y=wa
4、vread(file);读取音频文件;关于声音的函数还有sound() ; soundsc();等。2. 滤波器的设计原理: 数字滤波器是数字信号处理中及其重要的一部分。随着信息时代和数字技术的发展,受 到人们越来越多的重视。数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精度 高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特 殊功能。数字滤波器种类很多,根据其实现的网络结构或者其冲激响应函数的时域特性,可 分为两种,即有限冲激响应(FIR, Finite Impulse Response)滤波器和无限冲激响应(IIR, Infinite Impulse
5、Response )滤波器。FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H (z)在处收敛,极点全部在z = 0处(因果系统),因而只能用较高的阶数达到高的选择性。 FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频 率分量的信号经过fir滤波器后他们的时间差不变,这是很好的性质。FIR数字滤波器 是有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这 对实时的信号处理很重要。FIR滤波器因具有系统稳定,易实现相位控制,允许设计多通 带(或多阻带)滤波器等优点收到人们的青睐。IIR滤波器采用递归型结构,即结构上带有反馈环路
6、。IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联 型四种结构形式,都具有反馈回路。同时,IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图 表可查,在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式,然 后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。滤波器的设计可以通过软件或设计专用的硬件两种方式来实现。随着MATLAB软件及信 号处理工具箱的不断完善,MATLAB很快成为应用学科等领域不可或缺的基础软件。它可以 快速有效地实现数字滤波器的设计、分析和
7、仿真,极大地减轻了工作量,有利于滤波器设计 的最优化。2.1 IIR滤波器原理冲激响应不变法是使数字滤波器在时域上模拟滤波器,但是它们的缺点是产生频率响应 的混叠失真,这是由于从s平面到z平面是多值的映射关系所造成的。双线性变换法是使数字滤波器的频率响应与模拟滤波器的频率响应相似的一种变换方 法。为了克服多值映射这一缺点,我们首先把整个s平面压缩变换到某一中介的si平面的 一条横带里,再通过变换关系将此横带变换到整个z平面上去,这样就使得s平面与z平面 是一一对应的关系,消除了多值变换性,也就消除了频谱混叠现象。双线性法设计IIR数字滤波器的步骤:1) 将数字滤波器的频率指标 k 由Wk=(2
8、/T) *tan( Wk),转换为模拟滤波器的频率指标 k .2) 由模拟滤波器的指标设计H(s).3) 由H(s)转换为H(z)2.2 FIR滤波器原理FIR滤波器与IIR滤波器特点不同,IIR滤波器的相位是非线性的,若需线性相位则要 采用全通网络进行相位校正。而有限长单位冲激响应(FIR)数字滤波器就可以做成具有严 格的线性相位,同时又可以具有任意的幅度特性。由于FIR系统的冲激响应就是其系统函数各次项的系数,所以设计FIR滤波器的方法之 一可以从时域出发,截取有限长的一段冲激响应作为H(z)的系数,冲激响应长度N就是 系统函数H (z)的阶数。只要N足够长,截取的方法合理,总能满足频域的
9、要求。这种时 域设计、频域检验的方法一般要反复几个回合,不像IIR DF设计靠解析公式一次计算成功。给出的理想滤波器频率响应是恥严,它是w的周期函数,周期2药,因此可展开成傅1fh (n) = J H (ejw 0wndw 氏级数由傅立叶反变换导出,即d2兀d,再将hd(n)与窗函数w相乘就可以得到h,。褊)的计算可采用傅氏变换的现成公式和程序,窗函数他仪)也是现成的。但整个设计过程不能一次完成,因为窗口类型和大小的选择没有解析公式可一次算,整个设计可用计算 机编程来做。窗函数的傅式变换W(ejs)的主瓣决定了 H(ejs)过渡带宽W(ejs)的旁瓣大小和多少 决定了 H(ejs)在通带和阻带
10、范围内波动幅度,常用的几种窗函数有:w(n)=RN(n);矩形窗.-1Hanning 窗吩)=0.54-0.46(cos)应坤価)Hamming 窗Blackmen 窗N 1wg) =0.42-0.5(cos)十O.OScc-()夙舌3)”一127-1Kaiser 窗 式中Io(x)为零阶贝塞尔函数。根据题目要求选择窗函数法设计FIR滤波器。窗函数设计线性相位FIR滤波器步骤如下:(1) 确定数字滤波器的性能要求,临界频率叭,滤波器单位脉冲响应长度N(2) 根据性能要求,合理选择单位脉冲响应h(n)的奇偶对称性,从而确定理想频率响应H (ej )的幅频特性和相频特性d(3) 求理想单位脉冲响应
11、h (n),在实际计算中,可对H (ejw)采样,并对其求IDFTdd的 h (n),用 h (n)代替 h (n)MMd(4) 选择适当的窗函数w (n),根据h(n) = h (n) - w (n)求所需设计的FIR滤波器dN单位脉冲响应(5) 求H (ejw),分析其幅频特性,若不满足要求,可适当改变窗函数形式或长度dN,重复上述设计过程,以得到满意的结果3. 语音信号滤波用自己设计的各滤波器分别对加噪的语音信号进行滤波,在Matlab中,FIR滤波器利 用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。函数 fftfilt 用的是重叠相加法实现线性卷积
12、的计算。调用格式为: y=fftfilter(h,x,M)。其中,h是系统单位冲击响应向量;x是输入序列向量;y是系统的 输出序列向量;M是有用户选择的输入序列的分段长度,缺省时,默认的输入向量的重长度 M=512。函数filter的调用格式:yn=filter(B,A.xn),它是按照直线型结构实现对xn的滤波。 其中xn是输入信号向量,yn输出信号向量。4. GUI设计系统界面图形用户界面(graphical user in terfaces , GUI)则是由窗口、光标、按键、菜单、 文字说明等对象(objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘) 选择、激活这些图
13、形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。在MATLAB 中GUI是一中包含多种对象的图形窗口,并为GUI开发提供一个方便高效的集成开发环境 GUIDE。GUIDE主要是一个界面设计工具集,MAYLAB将所有GUI支持度控件都集成在这个环 境中,并提供界面外观、属性和行为响应方式的设置方法o GUIDE将设计好的GUI保存在一 个FIG文件中,同时生成M文件框架。FIG文件:包括GUI图形窗口及其所有后裔的完全描述,包括所有对象属性的属性值。 它是一个二进制文件调用hsave课保存图形窗口时将生车该文件。M文件包括GUI设计、控 件函数以及定义为子函数的用户控件回调函数,主要用
14、于控制GUI展开时的各种特征。GUI 创建包括界面设计和控件编程两部分,主要步骤如下。第一步:通过设置GUIDE应用程序的 选项来运行GUIDE;第二步:使用界面设计编辑器进行面设计;第三步:编写控件行为响应 控制(即回调函数)代码。四. 设计步骤与结果1、录音、保存与回放(以男音为例)在Matlab软件平台下,利用wavread对语音进行采样,记住采样频率和采样点数。代码如下:t=5;fs=11025;xn=wavrecord(t*Fs,Fs,1);plot(xn,r)wavwrite(xn,Fs,d:nanyin2)wavplay(xn,fs)2、语音信号的频谱可以用函数ff t对信号进行
15、快速傅里叶变换,得到信号的频谱特性。代码如下:x=wavread(f:nanyin2.wav,5*fs);N=length(x);t=(1:N)/Fs;f0=Fs/N;n=1:N/2;figure(1);subplot(3,1,1);plot(t, x);title(男音信号时域波形);xlabel(时间t);ylabel(振幅A);grid ;y=fft(x,N);k=(n-1)*f0;subplot(3,1,2);plot(k,abs(y(n);tit le(FFT变换后的频谱特性);xlabel(频率/Hz);ylabel (幅值/A);grid;subplot(3,1,3);if y=0plot(k,20*log10(abs(y(n);endxlabel(Hz);ylabel(振幅/db);tit le(FFT变换后声音的频谱特性);grid ;下图给出所录语音信号的时域波形和频谱。从图上分析可得到,男生的声音信号频率基本上在0 lOOOhz之间,主要集中在50到550 低频部分。3、设计数字信号滤波器,画出频率响应 根