实验一、用MATLAB实现语音信号的时域分析11.实验目的观察并验证语音信号的时域特性,理解并掌握典型的语音信号时域分析方法和时域特征,为深入学习语音信号处理的各种应用奠定基础。2.MATLAB程序代码(1)由麦克风采集语音数据,将采集的数据存成WAV文件(采样率为8000Hz),存在本人的文件夹中。所用程序代码为:clear;closeall;Fs=8000;y=wavrecord(5*Fs,Fs,'double');wavwrite(y,'f:\\a');soundview(y,Fs,'name')(2)读取WAV文件,显示语音信号的波形。所用程序代码为:x=wavread('f:\\a.wav');figure;plot(x);axis([0,size(x,1),-0.35,0.3]);%坐标轴范围title('语音信号时域波形');xlabel('样点数');ylabel('幅度');(3)读取WAV文件,计算并显示语音的短时能量(窗函数为矩形窗,帧长为20)。所用程序代码为:x=wavread('f:\\a.wav');x=double(x);f=enframe(x,20,100);energy=sum(abs(f),2);subplot(2,2,1);plot(x);axis([0,size(x,1),-0.7,0.9]);title('语音信号时域波形');xlabel('样点数');ylabel('幅度');subplot(2,2,2);plot(energy);title('语音信号的短时能量');legend('帧长LEN=20');f=enframe(x,20,200);energy=sum(abs(f),2);subplot(2,2,3);plot(energy);title('语音信号的短时能量');legend('帧长LEN=100');f=enframe(x,20,400);energy=sum(abs(f),2);subplot(2,2,4);plot(energy);title('语音信号的短时能量');legend('帧长LEN=200');2(4)读取WAV文件,计算并显示语音的短时过零率(窗函数为矩形窗,帧长为256,帧移为128),所用程序代码为:x=wavread('f:\\a.wav');x=double(x);LEN=100;INC=100;f=enframe(x,LEN,INC);%分帧%计算短时过零率z=zeros(size(f,1),1);difs=0.01;fori=1:size(f,1)s=f(i,:);forj=1:(length(s)-1)ifs(j)*s(j+1)0&abs(s(j)-s(j+1))difs;z(i)=z(i)+1;endendendsubplot(2,1,1);plot(x);axis([0,size(x,1),-0.35,0.3]);title('语音信号时域波形');xlabel('样点数');ylabel('幅度');subplot(2,1,2);plot(z);title('语音信号的短时过零率');xlabel('帧数');ylabel('短时过零率');(5)读取WAV文件,当窗函数为矩形窗、帧长为20时,计算一帧浊音的短时自相关函数所用的程序代码为:x=wavread('f:\\a.wav');x=double(x);LEN=100;INC=100;f=enframe(x,LEN,INC);ff=f(72,:);%选取一帧浊音信号ff=ff'.*rectwin(length(ff));%计算短时自相关N=LEN;R=zeros(1,N);fork=1:NR(k)=sum(ff(k:N).*ff(1:N-k+1));endfork=1:NR1(k)=R(k)/R(1);end3subplot(2,1,1);plot(ff);axis([0,N,-0.5,0.5])title('加矩形窗的语音帧');xlabel('样点数');ylabel('幅度');subplot(2,1,2);plot(R1);axis([0,N,-1,1])title('加矩形窗的短时自相关函数');xlabel('k');ylabel('R(k)');3.实验结果及其分析(1)本实验利用8000Hz的采样频率对输入的语音信号进行采样,采样点数为40000个,持续时间为4秒,存储格式为double。之后将数字语音数据写入F盘的a.wav文件,这段波形是读音为’ke’的波形,并通过放音设备进行回放。回放的GUI界面如图1所示,通过该界面可以观察采集的语音信号。图1用soundview函数显示的语音信号(2)本实验将L盘的a.wav文件读取出来,并显示文件中的语音信号波形,显示的波形如图2所示。该波形是汉语拼音“ke”的时域波形。从图2可以看出,[K]是清音,它的波形峰值较低;[e]是浊音,它的波形峰值较高。400.511.522.533.54x104-0.3-0.2-0.100.10.2语音信号时域波形样点数幅度图2语音“ke”的时域波形(3)本实验将L盘的a.wav文件读取出来,当帧长取不同值时计算语音信号的短时能量,如图3所示。从图3可以看出,浊音短时能量大,短时平均幅度大,短时过零率低,浊音具有较强的能量值,音段内隐藏信息的能力高。清音短时能量小,短时平均幅度小,能量值较低,音段内隐藏信息的能力较低;501234x104-0.500.5语音信号时域波形样点数幅度0100200300400051015语音信号的短时能量帧长LEN=200501001502000510语音信号的短时能量帧长LEN=1000501000510语音信号的短时能量帧长LEN=200图3不同帧长对应的短时能量(4)本实验首先读取a.wav中的语音数据,之后计算每一帧的短时过零率,最后将原始语音信号和短时过零率显示出来,如图4所示。从图4可以看出,清音的过零率较高,浊音的过零率较低。600.511.522.533.54x104-0.200.2语音信号时域波形样点数幅度050100150200250300350020406080语音信号的短时过零率帧数短时过零率图4短时过零率(5)本实验首先读取a.wav中的语音数据,之后对数据进行分帧加窗处理,帧长为256,帧移为128。选取其中的一帧浊音(第*帧)并计算这帧的短时自相关函数。当窗函数分别为矩形窗和汉明窗时,截取的语音信号和短时自相关函数如图5和图6所示。从图5和图6可以看出,矩形窗能够比汉明窗更明显的显示出第一个峰值。当窗函数为矩形窗,不同帧长(帧移=帧长)的一帧浊音对应的短时自相关函数如图7和图8所示。从图7和图8可以看出,帧长越长,越容易区分其最大值。当窗函数为矩形窗,帧长为256,帧移为128,选取一帧清音,获得的短时自相关函数如图9所示。从图5和图9可以看出,浊音具有明显的周期性,清音无明显周期。702468101214161820-0.500.5加矩形窗的语音帧样点数幅度02468101214161820-1-0.500.51加矩形窗的短时自相关函数kR(k)图5加矩形窗的短时自相关函数050100150200250-0.500.5加汉明窗的语音帧样点数幅度050100150200250-1-0.500.51加矩形窗的短时自相关函数kR(k)8图6加汉明窗的短时自相关函数05101520253035404550-0.500.5加矩形窗的语音帧样点数幅度05101520253035404550-1-0.500.51加矩形窗的短时自相关函数kR(k)图7帧长为50时的短时自相关函数0102030405060708090100-0.500.5加矩形窗的语音帧样点数幅度0102030405060708090100-1-0.500.51加矩形窗的短时自相关函数kR(k)图8帧长为100时的短时自相关函数90102030405060708090100-0.500.5一帧清音样点数幅度0102030405060708090100-1-0.500.51短时自相关函数kR(k)图9清音的短时自相关函数4.思考题短时能量的主要用途有哪些?答:可以区分清音段与浊音段,可以用来区分,有声与无声的分界,生母和韵母的分界等,也可以用于语音识别中。