基于MATLAB有噪声语音信号处理算法设计

获取项目源文件,联系Q:1415736481,可指导毕设,课设

摘要

 

滤波器设计在数字信号处理中占有极其重要的地位,FIR数字滤波器和IIR滤波器是滤波器设计的重要组成部分。利用MATLAB信号处理工具箱可以快速有效地设计各种数字滤波器。课题基于MATLAB有噪音语音信号处理的设计与实现,综合运用数字信号处理的理论知识对加噪声语音信号进行时域、频域分析和滤波。通过理论推导得出相应结论,再利用 MATLAB 作为编程工具进行计算机实现。在设计实现的过程中,使用窗函数法来设计FIR数字滤波器,用巴特沃斯、切比雪夫和双线性变法设计IIR数字滤波器,并利用MATLAB 作为辅助工具完成设计中的计算与图形的绘制。通过对对所设计滤波器的仿真和频率特性分析,可知利用MATLAB信号处理工具箱可以有效快捷地设计FIR和IIR数字滤波器,过程简单方便,结果的各项性能指标均达到指定要求。

 

 

关键词 数字滤波器 MATLAB 窗函数法 巴特沃斯 切比雪夫 双线性变换

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目录

 

1 绪论············································································································ 1

2 毕业设计内容······························································································ 2

3 毕业设计的具体实现···················································································· 2

3.1 语音信号的采集····················································································· 2

3.2 语音信号的时频分析··············································································· 2

3.3 语音信号加噪与频谱分析········································································· 4

3.4 设计FIR和IIR数字滤波器······································································· 5

3.5 用滤波器对加噪语音信号进行滤波···························································· 12

3.6 比较滤波前后语音信号的波形及频谱························································· 12

3.7回放语音信号························································································ 19

3.8设计系统界面························································································ 19

3.9小结···································································································· 21

结论····························································································· 22

致谢····························································································· 23

参考文献························································································ 24

 

 

1 绪论

数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、抽样、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。它在语音、雷达、图像、系统控制、通信、航空航天、生物医学等众多领域都获得了极其广泛的应用。具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等优点。

数字滤波器, 是数字信号处理中及其重要的一部分。随着信息时代和数字技术的发展,受到人们越来越多的重视。数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精度高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特殊功能。数字滤波器种类很多,根据其实现的网络结构或者其冲激响应函数的时域特性,可分为两种,即有限冲激响应( FIR,Finite Impulse Response)滤波器和无限冲激响应( IIR,Infinite Impulse Response)滤波器。

FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H (z)在处收敛,极点全部在z = 0处(因果系统),因而只能用较高的阶数达到高的选择性。FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频率分量的信号经过fir滤波器后他们的时间差不变,这是很好的性质。FIR数字滤波器是有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要。 FIR滤波器因具有系统稳定,易实现相位控制,允许设计多通带(或多阻带)滤波器等优点收到人们的青睐。

IIR滤波器采用递归型结构,即结构上带有反馈环路。IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。同时,IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。

滤波器的设计可以通过软件或设计专用的硬件两种方式来实现。随着MATLAB软件及信号处理工具箱的不断完善,MATLAB很快成为应用学科等领域不可或缺的基础软件。它可以快速有效地实现数字滤波器的设计、分析和仿真,极大地减轻了工作量,有利于滤波器设计的最优化。

2 毕业设计内容

选择一个语音信号作为分析的对象,或录制一段各人自己的语音信号,对其进行频谱分析;利用MATLAB中的随机函数产生噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析;设计FIR和IIR数字滤波器, 并对被噪声污染的语音信号进行滤波, 分析滤波后信号的时域和频域特征,回放语音信号;最后,设计一个信号处理系统界面。在所设计的系统界面上可以选择滤波器的类型。

3 毕业设计的具体实现

3.1 语音信号的采集   

利用PC 机上的声卡和WINDOWS 操作系统可以进行数字信号的采集。将话筒输入计算机的语音输入插口上,启动录音机。按下录音按钮,接着对话筒说话语音信号处理,说完后停止录音,屏幕左侧将显示所录声音的长度。点击放音按钮,可以实现所录音的重现。以文件名speech保存入g :\ MATLAB \ work 中。可以看到,文件存储器的后缀默认为. wav ,这是WINDOWS 操作系统规定的声音文件存的标准。

3.2 语音信号的时频分析

利用MATLAB中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。再对其进行采样,记住采样频率和采样点数。下面介绍Wavread 函数几种调用格式。

(1)y=wavread(file)

功能说明:读取file所规定的wav文件,返回采样值放在向量y中。

(2)[y,fs,nbits]=wavread(file)

功能说明:采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。

(3)y=wavread(file,N)

功能说明:读取钱N点的采样值放在向量y中。

(4)y=wavread(file,[N1,N2])

功能说明:读取从N1到N2点的采样值放在向量y中。

接下来,对语音信号OriSound.wav进行采样。其程序如下:

>> [y,fs,nbits]=wavered (‘OriSound’); %把语音信号加载入Matlab 仿真软件平台中

然后,画出语音信号的时域波形,再对语音信号进行频谱分析。MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:

Xk=fft(xn,N)

参数xn为被变换的时域序列向量,N是DFT变换区间长度,当N大于xn的长度时,fft函数自动在xn后面补零。,当N小于xn的长度时,fft函数计算xn的前N个元素,忽略其后面的元素。

在本次设计中,我们利用fft对语音信号进行快速傅里叶变换,就可以得到信号的频谱特性。其程序如下:

[y,fs,nbits]=wavread ('OriSound');

sound(y,fs,nbits); %回放语音信号

N= length (y) ;    %求出语音信号的长度

Y=fft(y,N);       %傅里叶变换

subplot(2,1,1);

plot(y);title('原始信号波形');

subplot(2,1,2);

plot(abs(Y));

title('原始信号频谱')

程序结果如下图:

 

基于MATLAB有噪声语音信号处理算法设计

图1 原始信号波形及频谱

 

3.3 语音信号加噪与频谱分析

MATLAB中产生高斯白噪声非常方便,有两个产生高斯白噪声的两个函数 。我们可以直接应用两个函数:一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。也可直接用randn函数产生高斯分布序列。

在本次毕业设计中,我们是利用MATLAB中的随机函数(rand或randn)产生噪声加入到语音信号中,模仿语音信号被污染,并对其频谱分析。Randn函数有两种基本调用格式:Randn(n)和Randn(m,n),前者产生n×n服从标准高斯分布的随机数矩阵,后者产生m×n的随机数矩阵。在这里,我们选用Randn(m,n)函数。语音信号添加噪声及其频谱分析的主要程序如下:

[y,fs,nbits]=wavread ('OriSound);

N = length (y) ;                    %求出语音信号的长度

Noise=0.01*randn(n,2);                       %随机函数产生噪声

Si=y+Noise;                      %语音信号加入噪声    

sound(Si);

subplot(2,1,1);

plot(Si);title('加噪语音信号的时域波形');

S=fft(Si);                        %傅里叶变换

subplot(2,1,2);

plot(abs(S));  

title('加噪语音信号的频域波形');

程序结果如下图:

 

基于MATLAB有噪声语音信号处理算法设计

图2 加噪后的波形及频谱分析

3.4 设计FIR和IIR数字滤波器

IIR滤波器和FIR滤波器的设计方法完全不同。IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。其设计步骤是:先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。FIR滤波器比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。对于线性相位滤波器,经常采用FIR滤波器。

 对于数字高通、带通滤波器的设计,通用方法为双线性变换法。可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。具体设计步骤如下:

(1)确定所需类型数字滤波器的技术指标。

(2)将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为Ω=2/T tan(0.5ω)

(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。

(4)设计模拟低通滤波器。

(5)通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。

(6)采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器。

我们知道,脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器的频响偏离模拟滤波器的频响特性。为了克服之一缺点,可以采用双线性变换法。

下面我们总结一下利用模拟滤波器设计IIR数字低通滤波器的步骤:

(1)确定数字低通滤波器的技术指标:通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。

(2)将数字低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标。

(3)按照模拟低通滤波器的技术指标设计及过渡模拟低通滤波器。

(4)用双线性变换法,模拟滤波器系统函数转换成数字低通滤波器系统函数。

如前所述,IIR滤波器和FIR滤波器的设计方法有很大的区别。下面我们着重介绍用窗函数法设计FIR滤波器的步骤。如下:

(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。先按照阻带衰减选择窗函数类型。原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数。

(2)构造希望逼近的频率响应函数。

(3)计算h(n).。

(4)加窗得到设计结果。

接下来,我们根据语音信号的特点给出有关滤波器的技术指标:

①低通滤波器的性能指标:

fp=1000Hz,fc=1200Hz,As=100db ,Ap=1dB

②高通滤波器的性能指标:

fp=3500Hz,fc=4000Hz,As=100dB,Ap=1dB;

③带通滤波器的性能指标:

fp1=1200Hz,fp2=3000hZ,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB

在Matlab中,可以利用函数fir1设计FIR滤波器,利用函数butter,cheby1和ellip设计IIR滤波器,利用Matlab中的函数freqz画出各步步器的频率响应。

hn=fir1(M,wc,window),可以指定窗函数向量window。如果缺省window参数,则fir1默认为哈明窗。其中可选的窗函数有Rectangular Barlrtt Hamming Hann Blackman窗,其相应的都有实现函数。

MATLAB信号处理工具箱函数buttp buttor butter是巴特沃斯滤波器设计函数,其有5种调用格式,本毕业设计中用到的是[N,wc]=butter(N,wc,Rp,As,’s’),该格式用于计算巴特沃斯模拟滤波器的阶数N和3dB截止频率wc。

MATLAB信号处理工具箱函数cheblap,cheblord和cheeby1是切比雪夫I型滤波器设计函数。我们用到的是cheeby1函数,其调用格式如下:

[B,A]=cheby1(N,Rp,wpo,’ftypr’)

[B,A]=cheby1(N,Rp,wpo,’ftypr’,’s’)

 函数butter,cheby1和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。下面我们将给出FIR和IIR数字滤波器的主要程序。

%=========================IIR低通滤波器=======================

wp=2*pi*Fp/Ft;

ws=2*pi*Fs/Ft;

fp=2*Ft*tan(wp/2);

fs=2*Fs*tan(wp/2);

[n11,wn11]=buttord(wp,ws,1,50,'s');  %求低通滤波器的阶数和截止频率

[b11,a11]=butter(n11,wn11,'s');      %求S域的频率响应的参数

[num11,den11]=bilinear(b11,a11,0.5); %双线性变换实现S域到Z域的变换

[h,w]=freqz(num11,den11);         %根据参数求出频率响应

plot(w*8000*0.5/pi,abs(h));

legend('用butter设计');

基于MATLAB有噪声语音信号处理算法设计

图3 IIR低通滤波器

%======================IIR带通==========================

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,'s');       %求低通滤波器阶数和截止频率

[b12,a12]=butter(n12,wn12,'s');           %求S域的频率响应参数

[num2,den2]=lp2bp(b12,a12,sqrt(wp1*wp2),bw);%将S域低通参数转为带通的

[num12,den12]=bilinear(num2,den2,0.5);%双线性变换实现S域到Z域的转换

[h,w]=freqz(num12,den12);                  %根据参数求出频率响应

plot(w*8000*0.5/pi,abs(h));

axis([0 4000 0 1.5]);

legend('用butter设计');

基于MATLAB有噪声语音信号处理算法设计

图4 IIR带通滤波器

%======================IIR高通==========================

Ft=8000;

Fp=4000;

Fs=3500;

wp1=tan(pi*Fp/Ft);                 %高通到低通滤波器参数转换

ws1=tan(pi*Fs/Ft);

wp=1;

ws=wp1*wp/ws1;

[n13,wn13]=cheb1ord(wp,ws,1,50,'s'); %求模拟的低通滤波器阶数和截止频率

[b13,a13]=cheby1(n13,1,wn13,'s');    %求S域的频率响应的参数

[num,den]=lp2hp(b13,a13,wn13);     %将S域低通参数转为高通的

[num13,den13]=bilinear(num,den,0.5); %利用双线性变换实现S域到Z域转换

[h,w]=freqz(num13,den13);

plot(w*21000*0.5/pi,abs(h));

title('IIR高通滤波器');

legend('用cheby1设计');

基于MATLAB有噪声语音信号处理算法设计

图5 IIR 高通滤波器

%**************************FIR低通滤波器*****************************

% 用窗函数设计低通滤波器的程序如下

rp=1;

rs=50;

p=1-10.^(-rp/20);                %通带阻带波纹

s=10.^(-rs/20);

fpts=[wp ws];

mag=[1 0];

dev=[p s];

[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev);%kaiserord求阶数截止频率

b21=fir1(n21,wn21,Kaiser(n21+1,beta));    %由fir1设计滤波器

[h,w]=freqz(b21,1);                     %得到频率响应

plot(w/pi,abs(h));

title('FIR低通滤波器');

基于MATLAB有噪声语音信号处理算法设计

图6  FIR低通滤波器

%************************FIR带通滤波器************************

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=(wp*wp2-w.^2)/(bw*w);

[n22,wn22]=buttord(wp,ws,1,50,'s');   %求低通滤波器阶数和截止频率

[b22,a22]=butter(n22,wn22,'s');       %求S域的频率响应的参数

[num2,den2]=lp2bp(b22,a22,sqrt(wp1*wp2),bw); %将S域低通参数转为带通的

[num22,den22]=bilinear(num2,den2,0.5);%双线性变换实现S域到Z域的转换

[h,w]=freqz(num22,den22);          %根据参数求出频率响应

plot(w*8000*0.5/pi,abs(h));

axis([0 4000 0 1.5]);

legend('用butter设计');

基于MATLAB有噪声语音信号处理算法设计

图7 FIR带通滤波器

%***************************%FIR高通滤波器*******************

p=1-10.^(-rp/20);                           %通带阻带波纹

s=10.^(-rs/20);

fpts=[ws wp];

mag=[0 1];

dev=[p s];

[n23,wn23,beta,ftype]=kaiserord(fpts,mag,dev);

b23=fir1(n23,wn23,'high',Kaiser(n23+1,beta));    %由fir1设计滤波器

[h,w]=freqz(b23,1);                          %得到频率响应

plot(w*12000*0.5/pi,abs(h));

title('FIR高通滤波器');

axis([3000 6000 0 1.2]);

基于MATLAB有噪声语音信号处理算法设计

图8 FIR高通滤波器

3.5 用滤波器对加噪语音信号进行滤波

用自己设计的各滤波器分别对加噪的语音信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。

函数fftfilt用的是重叠相加法实现线性卷积的计算。调用格式为:y=fftfilter(h,x,M)。其中,h是系统单位冲击响应向量;x是输入序列向量;y是系统的输出序列向量;M是有用户选择的输入序列的分段长度,缺省时,默认的输入向量的重长度M=512。

函数filter的调用格式:yn=filter(B,A.xn),它是按照直线型结构实现对xn的滤波。其中xn是输入信号向量,yn输出信号向量。

3.6 比较滤波前后语音信号的波形及频谱

% ======================双线性变换法=======================

%*************************低通滤波器************************

[y,fs,nbits]=wavread ('speech');

n = length (y) ;                  %求出语音信号的长度

noise=0.01*randn(n,2);            %随机函数产生噪声

s=y+noise;                      %语音信号加入噪声

S=fft(s);                         %傅里叶变换

z11=filter(num11,den11,s);

sound(z11);

m11=fft(z11);                      %求滤波后的信号

subplot(2,2,1);

plot(abs(S),'g');

title('滤波前信号的频谱');

grid;

subplot(2,2,2);

plot(abs(m11),'r');

title('滤波后信号的频谱');

grid;

subplot(2,2,3);

plot(s);

title('滤波前信号的波形');

grid;

subplot(2,2,4);

plot(z11);

title('滤波后的信号波形');

基于MATLAB有噪声语音信号处理算法设计

图9 双线性法低通滤波

%**********************带通滤波器*****************************

[y,fs,nbits]=wavread ('speech');

n = length (y) ;                    %求出语音信号的长度

noise=0.01*randn(n,2);              %随机函数产生噪声

s=y+noise;                        %语音信号加入噪声

S=fft(s);                           %傅里叶变换

z12=filter(num12,den12,s);

sound(z12);

m12=fft(z12);                       %求滤波后的信号

subplot(2,2,1);

plot(abs(S),'g');

title('滤波前信号的频谱');

subplot(2,2,2);

plot(abs(m12),'r');

title('滤波后信号的频谱');

subplot(2,2,3);

plot(s);

title('滤波前信号的波形');

subplot(2,2,4);

plot(z12);

title('滤波后的信号波形');

基于MATLAB有噪声语音信号处理算法设计

图10 双线性法带通滤波

%*****************************高通滤波器*****************************

[y,fs,nbits]=wavread ('speech');

n = length (y) ;                      %求出语音信号的长度

noise=0.01*randn(n,2);                %随机函数产生噪声

s=y+noise;                          %语音信号加入噪声

S=fft(s);                            %傅里叶变换

z13=filter(num13,den13,s);

sound(z13);

m13=fft(z13);                       %求滤波后的信号

subplot(2,2,1);

plot(abs(S),'g');

title('滤波前信号的频谱');

subplot(2,2,2);

plot(abs(m13),'r');

title('滤波后信号的频谱');

subplot(2,2,3);

plot(s);        

 title('滤波前信号的波形');

subplot(2,2,4);

plot(z13);

title('滤波后的信号波形');

基于MATLAB有噪声语音信号处理算法设计

图11 双线性法高通滤波

%========================窗函数法==========================

%**************************低通滤波器****************************

[y,fs,nbits]=wavread ('speech');

n = length (y) ;                    %求出语音信号的长度

noise=0.01*randn(n,2);              %随机函数产生噪声

s=y+noise;                        %语音信号加入噪声    

S=fft(s);                          %傅里叶变换

z21=fftfilt(b21,s);

sound(z21);

m21=fft(z21);                    %求滤波后的信号

subplot(2,2,1);

plot(abs(S),'g');

title('滤波前信号的频谱');

subplot(2,2,2);

plot(abs(m21),'r');  title('滤波后信号的频谱');

subplot(2,2,3);

plot(s);          title('滤波前信号的波形');

subplot(2,2,4);

plot(z21);        title('滤波后的信号波形');

基于MATLAB有噪声语音信号处理算法设计

 

图12 窗函数法低通滤波

 

%****************************带通滤波器***************************

[y,fs,nbits]=wavread ('speech');

n = length (y) ;                    %求出语音信号的长度

noise=0.01*randn(n,2);              %随机函数产生噪声

s=y+noise;                       %语音信号加入噪声    

S=fft(s);                         %傅里叶变换

z22=fftfilt(b22,s);

sound(z22);

m22=fft(z22);                     %求滤波后的信号

subplot(2,2,1);

plot(abs(S),'g');

title('滤波前信号的频谱');

subplot(2,2,2);

plot(abs(m22),'r');

title('滤波后信号的频谱');

subplot(2,2,3);

plot(s);

title('滤波前信号的波形');

subplot(2,2,4);

plot(z22);

title('滤波后的信号波形');

基于MATLAB有噪声语音信号处理算法设计

图13 窗函数法带通滤波

%*************************高通滤波器*****************************

[y,fs,nbits]=wavread ('speech');

n = length (y) ;                 %求出语音信号的长度

noise=0.01*randn(n,2);          %随机函数产生噪声

s=y+noise;                    %语音信号加入噪声    

S=fft(s);                      %傅里叶变换

z23=fftfilt(b23,s);

sound(z23);

m23=fft(z23);                 %求滤波后的信号

subplot(2,2,1);

plot(abs(S),'g');

subplot(2,2,2);

plot(abs(m23),'r');

title('滤波后信号的频谱');

subplot(2,2,3);

plot(s);

title('滤波前信号的波形');

subplot(2,2,4);

plot(z23);

title('滤波后的信号波形');

基于MATLAB有噪声语音信号处理算法设计

图14 窗函数法高通滤波

3.7回放语音信号

 经过以上的加噪声处理后,可在Matlab中用函数sound对声音进行回放。其调用格式:sound(y,Fs),sound(y)和sound(y,Fs,bits)。可以察觉滤波前后的声音有明显的变化。

3.8设计系统界面

3.8.1 系统界面设计工具—GUI概述

图形用户界面(graphical user interfaces ,GUI)则是由窗口、光标、按键、菜单、文字说明等对象(objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、**这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。在MATLAB中GUI是一中包含多种对象的图形窗口,并为GUI开发提供一个方便高效的集成开发环境GUIDE。GUIDE主要是一个界面设计工具集,MAYLAB将所有GUI支持度控件都集成在这个环境中,并提供界面外观、属性和行为响应方式的设置方法。GUIDE将设计好的GUI保存在一个FIG文件中,同时生成M文件框架。

 FIG文件:包括GUI图形窗口及其所有后裔的完全描述,包括所有对象属性的属性值。它是一个二进制文件调用hsave课保存图形窗口时将生车该文件。M文件包括GUI设计、控件函数以及定义为子函数的用户控件回调函数,主要用于控制GUI展开时的各种特征。 GUI创建包括界面设计和控件编程两部分,主要步骤如下。第一步:通过设置GUIDE应用程序的选项来运行GUIDE;第二步:使用界面设计编辑器进行面设计;第三步:编写控件行为响应控制(即回调函数)代码。

3.8.2 界面设计及使用说明

首先我们新建一个GUI文件:File/New/GUI 如下图所示:

基于MATLAB有噪声语音信号处理算法设计

图15 GUI创建界面

选择Blank GUI(Default)。

其次,进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下图所示;

基于MATLAB有噪声语音信号处理算法设计

图16  GUI开发环境

布置好各控件以后,我们就可以来为这些控件编写程序来实现两数相加的功能了。

最后,使用说明。单击相应的按钮,便跳出对应的界面,如按下按钮“低通滤波器”,就得到如图所示结果。

基于MATLAB有噪声语音信号处理算法设计

图17 系统运行界面

3.9小结

本设计圆满的完成了对加噪声语音信号的读取与打开,与课题的要求十分相符;也较好的完成了对原始语音信号和加噪声后的语音信号的频谱分析,通过fft变换,得出了语音信号的频谱图;在滤波这一部分,课题主要是从巴特沃斯滤波器入手来设计滤波器等入手,实现了预期的滤波效果;完成了界面的设计,但也存在许多的不足,只是很勉强的达到了打开语音文件、显示已定滤波前后的波形图,界面没有用到其它的一些控件,如列表框、下拉菜单等等,GUI的界面设计功能没能得到充分的发挥。

 

 

 

 

 

 

结 论

 

语音信号处理是语音学与数字信号处理技术相结合的交叉学科,课题在这里不讨论语音学,而是将语音当做一种特殊的信号,即一种“复杂向量”来看待。也就是说,课题更多的还是体现了数字信号处理技术。

从课题的中心来看,课题“基于MATLAB的有噪声语音信号处理”是希望将数字信号处理技术应用于某一实际领域,这里就是指对语音及加噪处理。作为存储于计算机中的语音信号,其本身就是离散化了的向量,我们只需将这些离散的量提取出来,就可以对其进行处理了。这一过程的实现,用到了处理数字信号的强有力工具MATLAB。通过MATLAB里几个命令函数的调用,很轻易的在实际语音与数字信号的理论之间搭了一座桥。

课题的特色在于它将语音信号看作一个向量,于是就把语音数字化了。那么,就可以完全利用数字信号处理的知识来解决语音及加噪处理问题。我们可以像给一般信号做频谱分析一样,来对语音信号做频谱分析,也可以较容易的用数字滤波器来对语音进行滤波处理。通过比较加噪前后,语音的频谱和语音回放,能明显的感觉到加入噪声后回放的声音与原始的语音信号有很大的不同,前者随较尖锐的干扰啸叫声。从含噪语音信号的频谱图中可以看出含噪声的语音信号频谱,在整个频域范围内分是布均匀。其实,这正是干扰所造成的。通过滤波前后的对比,低通滤波后效果最好,高通滤波后的效果最差。由此可见,语音信号主要分布在低频段,而噪声主要分布在高频段。

最后,还利用了MATLAB的另一强大功能——GUI界面设计。设计出了一个简易的用户应用界面,可以让人实现界面操作,更加方便的进行语音的频谱分析与加噪滤波处理。