语音信号的采集与时频域分析系统的设计 精品.docx
《语音信号的采集与时频域分析系统的设计 精品.docx》由会员分享,可在线阅读,更多相关《语音信号的采集与时频域分析系统的设计 精品.docx(24页珍藏版)》请在冰点文库上搜索。
语音信号的采集与时频域分析系统的设计精品
燕山大学
课程设计说明书
题目:
语音信号的采集与时频域分系统的设计
学院(系):
电气工程学院
年级专业:
09精仪一班
学号:
090103020048
学生姓名:
乔召杰
指导教师:
刘永红
教师职称:
副教授
目录
引言...................................................................2
第1章语音信号时域分析.................................................3
1、1窗口选择.......................................................3
1、2短时能量.......................................................4
1、3短时平均过零率.................................................5
1、4短时自相关函数.................................................6
1、5时域分析方法的应用.............................................7
第2章语音信号频域分析.................................................8
2、1短时傅里叶变换.................................................8
2、2语谱图.........................................................9
2、3复倒谱和倒谱...................................................9
第3章加噪与滤波处理...................................................11
3、1原始信号加噪处理...............................................11
3、2加噪信号滤波处理...............................................12
第4章总结.............................................................13
参考文献................................................................14
附录...................................................................15
引言
语音信号是一种非平稳的时变信号,它携带着各种信息。
在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。
语音信号分析的目的就在与方便有效的提取并表示语音信号所携带的信息。
语音信号分析可以分为时域和频域等处理方法。
语音信号可以认为在短时间内(一般认为在10~30ms的短时间内)近似不变,因而可以将其看作是一个准稳态过程,即语音信号具有短时平稳性。
任何语音信号的分析和处理必须建立在“短时”的基础上,即进行“短时分析”。
时域分析:
直接对语音信号的时域波形进行分析,提取的特征参数有短时能量,短时平均过零率,短时自相关函数等。
频域分析:
对语音信号采样,并进行傅里叶变换来进行频域分析。
主要分析的特征参数:
短时谱、倒谱、语谱图等。
本文采集作者的声音信号为基本的原始信号。
对语音信号进行时频域分析后,进行加白噪声处理并进行了相关分析,设计滤波器并运用所设计的滤波器对加噪信号进行滤波,绘制滤波后信号的时域波形和频谱。
整体设计框图如下图所示:
图0.1时频域分析设计图
图0.2加噪滤波分析流程图
第一章语音信号时域分析
语音信号的时域分析可直接对语音信号进行时域波形分析,在此只只针对语音信号的短时能量、短时平均过零率、短时自相关函数进行讨论。
1.1窗口选择
由人类的发生机理可知,语音信号具有短时平稳性,因此在分析讨论中需要对语音信号进行加窗处理进而保证每个短时语音长度为10~30ms。
通常选择矩形窗和哈明窗能得到较理想的“短时分析”设计要求。
两种窗函数的时域波形如下图2.1所示:
图1.1矩形窗和Hamming窗的时域波形
矩形窗的定义:
一个N点的矩形窗函数定义为如下
(1.1)
哈明窗的定义:
一个N点的哈明窗函数定义为如下
(1.2)
这两种窗函数都有低通特性,通过分析这两种窗的频率响应幅度特性可以发现(如图1.2):
矩形窗的主瓣宽度小(4*pi/N),具有较高的频率分辨率,旁瓣峰值大(-13.3dB),会导致泄漏现象;哈明窗的主瓣宽8*pi/N,旁瓣峰值低(-42.7dB),可以有效的克服泄漏现象,具有更平滑的低通特性。
因此在语音频谱分析时常使用哈明窗,在计算短时能量和平均幅度时通常用矩形窗。
表1.1对比了这两种窗函数的主瓣宽度和旁瓣峰值。
图1.2矩形窗和哈明窗的频率响应
表1.1矩形窗和哈明窗的主瓣宽度和旁瓣峰值
窗函数
主瓣宽度
旁瓣峰值
矩形窗
4*pi/N
13.3dB
哈明窗
8*pi/N
42.7dB
1.2短时能量
短时能量主要分析语音信号能量随时间的变化,由于语音信号的清音和浊音之间能量有较大的差距,进而可通过短时能量对语音的清浊音进行分析。
定义短时能量为:
(1.3)
其中N为窗长,当选用矩形窗时则有:
(1.4)
由式(2.3)能量函数反应语音信号的幅度,同时由图2.3~2.4可知窗长对能量函数起着决定性作用。
窗长太大,不能反应能量
的变化,窗长太小,不能得到平滑的能量函数。
短时能量函数的应用:
1)可用于区分清音段与浊音段。
值大对应于浊音段,
值小对应于清音段。
2)可用于区分浊音变为清音或清音变为浊音的时间(根据
值的变化趋势)。
3)对高信噪比的语音信号,也可以用来区分有无语音(语音信号的开始点或终止点)。
无信号(或仅有噪声能量)时,
值很小,有语音信号时,能量显著增大。
图1.3不同矩形窗长的短时能量函数
图1.4不同哈明窗长的短时能量函数
1.3短时平均过零率
短时过零率可以粗略估计语音的频谱特性。
高频率对应着高过零率,低频率对应着低过零率,那么过零率与语音的清浊音就存在着对应关系:
清音的过零率高,浊音的过零率低。
定义短时平均过零率:
(1.5)
其中
为符号函数,
。
在矩形窗条件下,可以简化为:
(1.6)
图1.5矩形窗(N=320)条件下的短时平均过零率
由图1.5可知为某一语音在矩形窗条件下求得的短时能量和短时平均过零率。
分析可知:
清音的短时能量较低,过零率高,浊音的短时能量较高,过零率低。
清音的过零率为0.5左右,浊音的过零率为0.1左右,两但者分布之间有相互交叠的区域,所以单纯依赖于平均过零率来准确判断清浊音是不可能的,在实际应用中往往是采用语音的多个特征参数进行综合判决
短时平均过零率的应用:
1)区别清音和浊音。
例如,清音的过零率高,浊音的过零率低。
此外,清音和浊音的两种过零分布都与高斯分布曲线比较吻合。
2)从背景噪声中找出语音信号。
语音处理领域中的一个基本问题是,如何将一串连续的语音信号进行适当的分割,以确定每个单词语音的信号,亦即找出每个单词的开始和终止位置。
3)在孤立词的语音识别中,可利用能量和过零作为有话无话的鉴别。
1.4短时自相关函数
自相关函数用于衡量信号自身时间波形的相似性。
浊音的时间波形呈现出一定的周期性,波形之间相似性较好;清音的时间波形呈现出随机噪声的特性,样点间的相似性较差。
因此,我们用短时自相关函数来测定语音的相似特性。
短时自相关函数定义为:
(1.7)
令
,并且
,可以得到:
(1.8)
进而则有:
(1.9)
自相关函数常用来作以下两种语音信号特征的估计:
1)区分语音是清音还是浊音:
清音的短时自相关函数不具有周期性,浊音是周期信号
2)估计浊音语音信号的基音周期。
图1.6语音信号的自相关函数与平均过零率
图(1.6)给出了语音采集信号N=460的短时自相关函数波形和平均过零率。
短时自相关函数波形分析可知:
浊音是周期信号,浊音的短时自相关函数呈现明显的周期性,自相关函数的周期就是浊音信号的周期,根据这个性质可以判断一个语音信号是清音还是浊音,还可以判断浊音的基音周期。
浊音语音的周期可用自相关函数中第一个峰值的位置来估算。
反之,清音接近于随机噪声,清音的短时自相关函数不具有周期性,也没有明显突起的峰值,且随着延时k的增大迅速减小。
1.5时域分析方法的应用
1)基音频率的估计
a)可利用时域分析判定某一语音有效的清音和浊音段。
b)针对浊音段,可直接利用短时自相关函数估计基音频率。
2)语音端点的检测与估计
可利用时域分析判定某一语音信号的端点,尤其在有噪声干扰时,如何准确检测语音信号的端点,这在语音处理中是富有挑战性的一个课题。
第二章语音信号频域分析
语音信号的频域分析主要应用傅立叶变换来分析,由于语音信号是随着时间变化的,因此一般标准的傅立叶表示虽然适用于周期及平稳随机信号的表示,但不能直接用于语音信号。
由于语音信号可以认为在短时间内,近似不变,因而可以采用短时分析法。
2.1短时傅立叶变换
由于语音信号是短时平稳的随机信号,某一语音信号帧的短时傅立叶变换的定义为:
(2.1)
其中w(n-m)是实窗口函数序列,n表示某一语音信号帧。
令n-m=k',则得到
(2.2)
于是可以得到:
(2.3)
假定:
(2.4)
则可以得到:
(2.5)
同样,不同的窗口函数,将得到不同的傅立叶变换式的结果。
由上式可见,短时傅立叶变换有两个变量:
n和ω,所以它既是时序n的离散函数,又是角频率ω的连续函数。
与离散傅立叶变换逼近傅立叶变换一样,如令ω=2πk/N,则得离散的短时傅立叶吧如下:
(2.6)
2.2语谱图
语谱图反映了语音信号的动态频率特性,在语音分析中具有重要的实用价值。
被成为可视语言。
语谱图的时间分辨率和频率分辨率是由窗函数的特性决定的。
时间分辨率高,可以看出时间波形的每个周期及共振峰随时间的变化,但频率分辨率低,不足以分辨由于激励所形成的细微结构,称为宽带语谱图;而窄带语谱图正好与之相反。
宽带语谱图可以获得较高的时间分辨率,反映频谱的快速时变过程;窄带语谱图可以获得较高的频率分辨率,反映频谱的精细结构。
两者相结合,可以提供带两与语音特性相关的信息。
语谱图上因其不同的灰度,形成不同的纹路,称之为“声纹”。
声纹因人而异,因此可以在司法、安全等场合得到应用。
语音采集信号的的语谱图如下图(2.1)所示
图2.1语音信号的语谱图
2.3复倒谱和倒谱
复倒谱
是
的
变换取对数后的逆
变换,其表达式如下:
(2.7)
倒谱
定义为
取
变换后的幅度对数的逆
变换,即
(2.8)
在时域上,语音产生模型实际上是一个激励信号与声道冲激响应的卷积。
对于浊音,激励信号可以由周期脉冲序列表示;对于清音,激励信号可以由随机噪声序列表示。
声道系统相当于参数缓慢变化的零极点线性滤波器。
这样经过同态处理后,语音信号的复倒谱,激励信号的复倒谱,声道系统的复倒谱之间满足下面的关系:
(2.9)
由于倒谱对应于复倒谱的偶部,因此倒谱与复倒谱具有同样的特点,很容易知道语音信号的倒谱,激励信号的倒谱以及声道系统的倒谱之间满足下面关系:
(2.10)
浊音信号的倒谱中存在着峰值,它的出现位置等于该语音段的基音周期,而清音的倒谱中则不存在峰值。
利用这个特点我们可以进行清浊音的判断,并且可以估计浊音的基音周期。
图2.2语音信号的倒普图
从上图2.2语音信号的倒谱图可以看出,语音信号0.9s~1.3s和2s~2.3s所对应的频率大概在200Hz左右,这与人的语音信号频率集中在200Hz到4000Hz之间是相一致的。
而在未发声的时间段内,相对的小高频部分(150~500Hz)应该属于背景噪声。
第三章加噪与滤波处理
3.1原始信号加噪处理
利用awgn函数对原始信号进行信噪比50dB的白噪声的加噪处理,接下来分别对原始信号和加噪信号的采样数据作快速傅里叶(fft)变换并画出以dB为单位的信号频谱图。
如下图3.1所示:
图3.1原始信号与加噪信号的频谱图
由上图3.1分析加噪声后的频谱图的幅度变化较小,表示白噪声基本覆盖了原始信号的频谱。
同时利用sound函数对语音信号进行回放在听到“信号处理—滤波器”这句话时,伴随著着明显的噪声。
图3.2加噪信号的倒谱图
为方便设计滤波器进行滤噪,现在对加噪信号进行倒普分析,利用Matlab对加噪信号进行倒普图绘制如上图3.2所示。
从上图分析可知加噪后的倒谱图信号频率在100Hz~500Hz,而语音信号0.9s~1.3s和2s~2.3s所对应的频率已不再集中于200Hz左右。
3.2加噪信号滤波处理
针对语音信号的频谱分析,采用低通滤波方案设计滤波器。
相应的低通指标为:
Ws=0.35*pi;Wp=0.15*pi;Rp=0.25;As=50;
采用椭圆低通滤波器(ellipord)设计滤波后的信号信号频谱图如下图3.3所示:
图3.3滤波前后的频谱
由上图3.3图谱分析可知对噪声滤波后与原始信号相近,达到理想的滤波效果。
当用sound函数回放时,噪声消失达到滤波效果,但是声音与原始信号比较相对沉闷。
若要达到较高的滤波要求可对滤波器的参数进行高精度调试。
或者设计高通、带通、带阻滤波器进行对比选择更合适的方案设计。
第四章总结
本文系统介绍了语音信号的采集与时频域分析,并对原始信号进行加噪处理,再次滤波得到理想的滤波效果,下面是我一周来的感想和体会。
为期一周的信号处理课设,感慨颇多,受益匪浅。
刚开始接到课题是一种兴奋,因为新的考验即将开始。
当分析以下课题后发现本次课题难度不大,并且相对比较熟悉。
此时有一种莫名的庆幸和失落,庆幸自己的课题并不是毫无头绪,失落的是感觉太轻松了,会没有成就感。
但是当自己第一天开始做时,没有太大的感觉。
因为自己还没有真正体会到该课题的深度与难度。
第一天把查阅的相关资料进行了系统的分析和理解。
其中着重对Matlab软件进行深入学习。
第二天着手分析语音信号的处理的基本方法和步骤,发现好多原理没有搞清楚,造成进度很慢,同时也感觉到了一种压迫感。
第三天开始全方面的设计调试程序,其中让我体会到Matlab软件功能的强大,学好该软件对以后的学习和工作具有重要的意义。
在设计和调试程序的过程中遇到很多问题,更多的感受是Matlab函数库认识尚浅。
但是在老师的指导帮助下和同学共同讨论最后攻克诸多程序的时候自己高兴地无法言表。
希望今后能有跟多的实践机会,从中不断提升自己。
再次感谢老师的悉心教导!
参考文献
[1]程佩青.数字信号处理教程[M].北京:
清华大学出版社,2002.
[2]刘敏,魏玲.Matlab通信仿真与应用[M].北京:
国防工业出版社,2001.
[3]楼顺天,刘小东,李博菡.基于Matlab7.x的系统分析与设计[J].信号处理.西安:
西安电子科技大学,2005.
[4]谢平,王娜,林洪彬.信号处理原理及应用.北京:
机械工业出版社,2008.
[5]赵力.语音信号处理.北京:
机械工业出版社,2003.
附录
程序一:
;;;;;;短时能量函数;;;;;;;;;;;;
[x,fs,bits]=
wavread('F:
\xinhaochuli\SHENG.wav');
t=(0:
length(x)-1)/fs;
plot(t,x);
subplot(6,1,1),plot(a);
N=32;
fori=2:
6
h=linspace(1,1,2^(i-2)*N);
%形成一个矩形窗,长度为2.^(i-2)*N
En=conv(h,a*a);
%求短时能量函数En
subplot(6,1,1),plot(En);
if(i==2)legend('N=32');
elseif(i==3)legend('N=64');
elseif(i==4)legend('N=128');
elseif(i==5)legend('N=256');
elseif(i==6)legend('N=512');
end
end
程序二:
;;;;;短时平均过零率;;;;;;;;;;;
a=wavread('F:
\xinhaochuli\hun.wav');
n=length(a);
N=320;
subplot(3,1,1),plot(a);xlabel('频率'),ylabel('采样幅度');
h=linspace(1,1,N);
En=conv(h,a.*a);%求卷积得其短时能量函数En
subplot(3,1,2),plot(En);xlabel('频率'),ylabel('短时能量');
fori=1:
n-1
ifa(i)>=0
b(i)=1;
else
b(i)=-1;
end
ifa(i+1)>=0
b(i+1)=1;
else
b(i+1)=-1;
end
w(i)=abs(b(i+1)-b(i));
%求出每相邻两点符号的差值的绝对值
end
k=1;
j=0;
while(k+N-1)Zm(k)=0;
fori=0:
N-1;
Zm(k)=Zm(k)+w(k+i);
end
j=j+1;
k=k+N/2;%每次移动半个窗
end
forw=1:
j
Q(w)=Zm(160*(w-1)+1)/(2*N);
%短时平均过零率
end
subplot(3,1,3),plot(Q),
ylabel('短时平均过零率');grid;
程序三:
;;;;;;;;;;自相关函数;;;;;;;;;;;;
N=460
a=wavread('F:
\xinhaochuli\hun.wav');
x=a(25000:
25459);
x=x.*rectwin(460);
R=zeros(1,460);
fork=1:
460
forn=1:
460-k
R(k)=R(k)+x(n)*x(n+k);
end
end
j=1:
460;
subplot(2,1,2),plot(j,R);
title('自相关函数');
xlabel('采样点'),ylabel('自相关函数值');
grid;
n=length(a);
%subplot(3,1,1),plot(a);
xlabel('频率'),ylabel('采样幅度');
h=linspace(1,1,N);
En=conv(h,a.*a);
%求卷积得其短时能量函数En
%subplot(3,1,2),plot(En);
xlabel('频率'),ylabel('短时能量');
fori=1:
n-1
ifa(i)>=0
b(i)=1;
else
b(i)=-1;
end
ifa(i+1)>=0
b(i+1)=1;
else
b(i+1)=-1;
end
w(i)=abs(b(i+1)-b(i));
%求出每相邻两点符号差值的绝对值
end
k=1;
j=0;
while(k+N-1)Zm(k)=0;
fori=0:
N-1;
Zm(k)=Zm(k)+w(k+i);
end
j=j+1;
k=k+N/2;%每次移动半个窗
end
forw=1:
j
Q(w)=Zm(230*(w-1)+1)/(2*N);%短时平均过零率
end
subplot(2,1,1),plot(Q),xlabel('采样点'),ylabel('短时平均过零率');grid;
程序四:
;;;;;;;到谱图程序;;;;;;;;;;;;;
[x,fs,nb]=
wavread('F:
\xinhaochuli\hun.wav');
tt=floor(fs*0.002);
tt1=floor(fs*.01);
tt2=floor(fs*0.02);
tt3=floor(fs*0.03);
%画波形图
t=(0:
length(x)-1)/fs;
subplot(2,1,1);
plot(t,x);
legend('Waveform');
title('波形图');
xlabel('时间');
ylabel('幅度');
%加窗
w=hamming(tt3);
pos=1;
fx=[];
while(pos+tt3)<=length(x)
y=x(pos:
pos+tt3-1);
y=y-mean(y);
Y=fft(y.*w);
%作加窗信号的傅利叶变换
C=fft(log(abs(Y)+eps));%倒谱分析
[c,fxval]=max(abs(C(tt:
tt2)));
%找出2ms(=500Hz)和20m(=50Hz)之间的最大值
fx=[fxfs/(tt+fxval-1)];
pos=pos+tt1;
end;
%画出倒谱图
t2=(0:
length(fx)-1)*0.01;
subplot(2,1,2);
plot(t2,fx);
legend('FXTrace');
title('倒谱图');
ylabel('频率(Hz)');
程序五:
;;;;滤波器设计与滤波;;;;;;;;;;;;
[z,fs,bits]=
wavread('F:
\xinhaochuli\hun.wav');
y=awgn(z,50);
ws=0.35*pi;wp=0.15*pi;Rp=0.25;As=50;
[N,wn]=ellipord(wp/pi,ws/pi,Rp,As);
[b,a]=ellip(N,Rp,As,wn);
[Rows,Cols]=size(y);
y(:
1)=y(:
1)-mean(y(:
1));
Y=abs(fft(y)+eps);%为防止出现0值
Y
(1)=Y
(2);
L=Rows;
w=0:
(L-1);
w=2*pi/Rows*w;
x=filter(b,a,y);
X=abs(fft(x)+eps);%为防止出现0值
X
(1)=X
(2);
figure
(1);
subplot(3,2,1);plot(z);t
itle('原始信号波形');
subplot(3,2,2);plot(w/pi,Y(1: