1、语音信号处理实验讲义时间:2011-12 目录实验一 语音信号生成模型分析.3实验二 语音信号时域特征分析.7实验三 语音信号频域特征分析12实验四 语音信号的同态处理和倒谱分析16实验一 语音信号生成模型分析一、 实验目的1、了解语音信号的生成机理,了解由声门产生的激励函数、由声道产生的调制函数和由嘴唇产生的辐射函数。2、编程实现声门激励波函数波形及频谱,与理论值进行比较。3、编程实现已知语音信号的语谱图,区分浊音信号和清音信号在语谱图上的差别。二、实验原理语音生成系统包含三部分:由声门产生的激励函数、由声道产生的调制函数和由嘴唇产生的辐射函数。语音生成系统的传递函数由这三个函数级联而成,即
2、 1、激励模型发浊音时,由于声门不断开启和关闭,产生间隙的脉冲。经仪器测试它类似于斜三角波的脉冲。也就是说,这时的激励波是一个以基音周期为周期的斜三角脉冲串。单个斜三角波的频谱表现出一个低通滤波器的特性。可以把它表示成z变换的全极点形式这里c是一个常数,T是脉冲持续时间。周期的三角波脉冲还得跟单位脉冲串的z变换相乘:这就是整个激励模型,是一个幅值因子。2、声道模型当声波通过声道时,受到声腔共振的影响,在某些频率附近形成谐振。反映在信号频谱图上,在谐振频率处其谱线包络产生峰值,把它称为共振峰。一个二阶谐振器的传输函数可以写成实践表明,用前3个共振峰代表一个元音足够了。对于较复杂的辅音或鼻音共振峰
3、要到5个以上。多个叠加可以得到声道的共振峰模型3、辐射模型从声道模型输出的是速度波,而语音信号是声压波。二者倒比称为辐射阻抗,它表征了口唇的辐射效应,可用下式表示:三、实验内容1、设声门脉冲单个三角波的数学表达式为试画出三角波波形图及其频谱。取。参考程序:%三角波及其频谱n=linspace(0,25,125);g=zeros(1,length(n);i=0;for i=0:40 if n(i+1)=5 g(i+1)=0.5*(1-cos(n(i+1)*pi/5); else g(i+1)=cos(n(i+1)-5)*pi/8); endendfigure(1)subplot(1,2,1)pl
4、ot(n,g)xlabel(时间/ms)ylabel(幅度)axis(0,25,-0.4,1.2)r=fft(g,1024);r1=abs(r);yuanlai=20*log10(r1);signal(1:512)=yuanlai(1:512);pinlv=(0:1:511)*8000/1024;subplot(1,2,2)plot(pinlv,signal);xlabel(频率/Hz)ylabel(幅度/dB)axis(0,620,0,30) 图1-1 三角波及其频谱2、给出语音段“数字信号处理”(speech.wav),画出它的语谱图。clear all;x,sr=wavread(spee
5、ch_dsp.wav);s=length(x);w=round(44*sr/1000);n=w;shift=w/2;h=w-shift;%win=hanning(n);win=hamming(n);c=1;ncols=1+fix(s-n)/h);d=zeros(1+n/2),ncols);for b=0:h:(s-n) u=win.*x(b+1):(b+n); t=fft(u); d(:,c)=t(1:(1+n/2); c=c+1;endtt=0:h:(s-n)/sr;ff=0:(n-2)*sr/n;imagesc(tt,ff/1000,20*log10(abs(d);colormap(gra
6、y);axis xyxlabel(时间/s)ylabel(频率/kHz) 图1-2 语谱图四、思考题1、声门激励脉冲信号是高频衰减的还是高频增强的?2、画语谱图时为什么要给语音信号加汉明窗?若加矩形窗会有什么区别?3、在语谱图上观察,浊音信号的和清音信号的频谱有什么区别?实验二 语音信号时域特征分析一、实验目的1、了解自相关函数及自相关函数在语音信号处理中的应用。2、编写程序分析语音信号的短时自相关特征,计算语音信号的基音周期。3、编写修正短时自相关函数的程序,并与未修正的函数进行比较。二、实验原理自相关函数用于衡量信号自身时间波形的相似性。由前面的讨论可知,清音和浊音的发声机理不同,因而在波
7、形上也存在着较大的差异。浊音的时间波形呈现出一定的周期性,波形之间相似性较好;清音的时间波形呈现出随机噪声的特性,杂乱无章,样点间的相似性较差,这样,可以用短时自相关函数来测定语音的相似特性。时域离散确定信号的自相关函数定义为:对于语音信号来说,采用短时分析方法,可以定义短时自相关函数为因为,所以定义,则上式可以写成 如果长基音周期用窄的窗,将得不到预期的基音周期;但是如果短的基音周期用长的窗,自相关函数将对多个基因周期做平均计算,从而模糊语音的短时特性,这是不希望的。为了解决这个问题,可以采用修正的短时自相关函数,选择的窗长不一定要等于自相关函数的最大自变量取值。这种方法可以采用较窄的窗,同
8、时避免了短时自相关函数随k增加而衰减的不足。三、实验内容1、根据给出的浊音信号,分别画出浊音信号的时域波形、加矩形窗和加汉明窗后计算短时自相关归一化后的结果。语音的抽样频率为8kHz,窗长为320。参考程序:x,fs,nbits=wavread(speech_dsp.wav);s1=x(2500:2819);N=320;A=;for k=1:320 sum=0; for m=1:N-k+1 sum=sum+s1(m)*s1(m+k-1); end A(k)=sumendfor k=1:320 A1(k)=A(k)/A(1);endf=zeros(1,320);n=1,j=1;while j0.
9、08 a=fs/(LF+ind);else a=0;endpitch=a%画图figure(1);subplot(3,1,1);plot(time1,y);title(语音波形);axis tightylim=get(gca,ylim);line(time1(startIndex),time1(startIndex),ylim,color,r);line(time1(endIndex),time1(endIndex),ylim,color,r);xlabel(样点数);ylabel(幅度);subplot(3,1,2);plot(frame);axis(0,240,-0.5,0.5)title
10、(一帧语音);xlabel(样点数);ylabel(幅度);subplot(3,1,3);time2=-119:1:-1,0:1:120;plot(time2,cepstrum1);axis(-120,120,-0.5,0.5)title(一帧语音的倒谱);xlabel(样点数);ylabel(幅度); 图4-1 对浊音信号进行基音检测2、利用同态处理计算给出语音信号的共振峰。y,fs,nbits=wavread(speech_dsp.wav);time1=1:length(y);time=(1:length(y)/fs;frameSize=floor(30*fs/1000);startInd
11、ex=round(2080);endIndex=startIndex+frameSize-1;frame=y(startIndex:endIndex);%frameSize=length(frame);frame2=frame.*hamming(length(frame);rwy=rceps(frame2);ylen=length(rwy);cepstrum=rwy(1:ylen/2);%基音检测LF=floor(fs/500);HF=floor(fs/70);cn=cepstrum(LF:HF);mx_cep,ind=max(cn);%共振峰检测核心代码%找到最大的突起的位置NN=ind+L
12、F;ham=hamming(NN);cep=cepstrum(1:NN);ceps=cep.*ham;%formant1=20*log(abs(fft(ceps);formant1=abs(fft(ceps);formant(1:2)=formant1(1:2);for t=3:NN%do some median filtering z=formant1(t-2:t); md=median(z); formant2(t)=md;endfor t=1:NN-1 if t0.08 a=fs/(LF+ind);else a=0;end的作用是什么?3、解释共振峰的含义。不同人发同音时共振峰相同吗?21