语音信号处理实验报告专业:电子信息工程班级:电子信息二班姓名:学号:指导教师:杨立东目录实验一特征提取..........................................3一、实验目的:.......................................3二、实验原理:........................................3三、实验内容.........................................3程序:................................................3实验二基音周期估计.....................................9一、实验目的..........................................9二、实验原理.........................................9三、实验内容.........................................10程序:...............................................10实验三倒谱的获取与应用.................................13一、实验目的........................................13二、实验原理........................................13三、实验内容........................................14程序.................................................14实验四HMM的训练.......................................17一、实验目的........................................17二、实验原理........................................17三、实验内容........................................17程序.................................................17实验总结................................................20实验一语音信号的特征提取一、实验目的:1、了解语音信号处理基本知识,语音信号的生成的数学模型。2、理解和掌握语音信号的特征提取。二、实验原理:语音信号随时间变化的频谱特性可以用语谱图直观的表示,语谱图的纵坐标对应频率,横坐标对应时间,而图像的黑白度对应于信号的能量。因此声道的谐振频率在图上就表示成为黑带,浊音部分则以出现条纹图形为其特征,这是因为此时的时域波形有周期性,而在浊音的时间间隔内图形显得很致密。三、实验内容Matlab编程实验步骤:1.新建M文件,扩展名为“.m”,编写程序;2.选择File/Save命令,将文件保存在F盘新建文件夹中;3.运行程序;程序:语谱图clearall;[x,sr]=wavread('welcome.wav');%sr为采样频率if(size(x,1)size(x,2))%size(x,1)为x的行数,size(x,2)为x的列数x=x';ends=length(x);w=round(44*sr/1000);%窗长,取离44*sr/100最近的整数n=w;%fft的点数ov=w/2;%50%的重叠h=w-ov;%win=hanning(n)';%哈宁窗win=hamming(n)';%哈宁窗c=1;ncols=1+fix((s-n)/h);%fix函数是将(s-n)/h的小数舎去d=zeros((1+n/2),ncols);forb=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/1000,ff/1000,20*log10(abs(d)));colormap(gray);axisxyxlabel('时间/s');ylabel('频率/kHz');时间/s频率/kHz0246810121416x10-40246810时间/s频率/kHz0246810121416x10-40246810预加重(高频提取)[x,sr]=wavread('mmm.wav');%读数据ee=x(200:455);%选取原始文件e的第200到455点的语音,也可选其他样点r=fft(ee,1024);%对信号ee进行1024点傅立叶变换r1=abs(r);%对r取绝对值r1表示频谱的幅度值pinlv=(0:1:255)*8000/512%点和频率的对应关系yuanlai=20*log10(r1)%对幅值取对数signal(1:256)=yuanlai(1:256);%取256个点,目的是画图的时候,维数一致[h1,f1]=freqz([1,-0.98],[1],256,4000);%高通滤波器pha=angle(h1);%高通滤波器的相位H1=abs(h1);%高通滤波器的幅值r2(1:256)=r(1:256)u=r2.*h1'%将信号频域与高通滤波器频域相乘相当于在时域的卷积u2=abs(u)%取幅度绝对值u3=20*log10(u2)%对幅值取对数un=filter([1,-0.98],[1],ee)%un为经过高频提升后的时域信号figure(1);subplot(211);plot(f1,H1);title('高通滤波器的幅频响应');xlabel('频率/Hz');ylabel('幅度');subplot(212);plot(pha);title('高通滤波器的相位响应');xlabel('频率/Hz');ylabel('角度/radians');figure(2);subplot(211);plot(ee);title('原始语音信号');xlabel('样点数');ylabel('幅度');axis([0256-0.10.1]);subplot(212);plot(real(un));title('经高通滤波后的语音信号');xlabel('样点数');ylabel('幅度');axis([0256-11]);figure(3);subplot(211);plot(pinlv,ee);title('原始语音信号频谱');xlabel('频率/Hz');ylabel('幅度/dB');subplot(212);plot(pinlv,u3);title('经高通滤波后的语音信号频谱');xlabel('频率/Hz');ylabel('幅度/dB');05001000150020002500300035004000-50510x10-3原始语音信号频谱频率/Hz幅度/dB05001000150020002500300035004000-80-60-40-20经高通滤波后的语音信号频谱频率/Hz幅度/dB050100150200250-0.1-0.0500.050.1原始语音信号样点数幅度050100150200250-1-0.500.51经高通滤波后的语音信号样点数幅度05001000150020002500300035004000-50510x10-3原始语音信号频谱频率/Hz幅度/dB05001000150020002500300035004000-80-60-40-20经高通滤波后的语音信号频谱频率/Hz幅度/dB短时能量[x,sr]=wavread('welcome.wav');%读入语音文件%计算N=50,帧移=50时的语音能量s=fra(50,50,x);s2=s.^2;%一帧内各样点的能量energy=sum(s2,2);%求一帧能量subplot(2,2,1)%定义画图数量和布局plot(energy);%画N=50时的语音能量图xlabel('帧数')%横坐标ylabel('短时能量E')%纵坐标legend('N=50')%曲线标识axis([0,1500,0,2*10])%定义横纵坐标范围%计算N=100,帧移=100时的语音能量s=fra(100,100,x);s2=s.^2;energy=sum(s2,2);subplot(2,2,2)plot(energy)%画N=100时的语音能量图xlabel('帧数')ylabel('短时能量E')legend('N=100')axis([0,600,0,4*10])%定义横纵坐标范围%计算N=400,帧移=400时的语音能量s=fra(400,400,x);s2=s.^2;energy=sum(s2,2);subplot(2,2,3)plot(energy)%画N=400时的语音能量图xlabel('帧数')ylabel('短时能量E')legend('N=400')axis([0,150,0,1.5*10^2])%定义横纵坐标范围%计算N=800,帧移=800时的语音能量s=fra(800,800,x);s2=s.^2;energy=sum(s2,2);subplot(2,2,4)plot(energy)%画N=800时的语音能量图xlabel('帧数')ylabel('短时能量E')legend('N=800')axis([0,95,0,3*10^2])%定义横纵坐标范围定义fra()functionf=fra(len,inc,x)fh=fix(((size(x,1)-len)/inc)+1);f=zeros(fh,len);i=1;n=1;whilei=fhj=1;whilej=lenf(i,j)=x(n);j=j+1;n=n+1;endn=n-len+inc;i=i+1;end05001000150005101520帧数短时能量EN=500200400600010203040帧数短时能量EN=100050100150050100150帧数短时能量EN=4000204060800100200300帧数短时能量EN=800短时平均过零率clearall[x1,sr]=wavread('welcome.wav');%读入语音文件x=awgn(x1,15,'measured');%加入15dB的噪声s=fra(220,110,x);%分帧,帧移110zcr=zcro(s);%求过零率figure(1);subplot(2,1,1)plot(x);title('原始信号');xlabel('样点数');ylabel('幅度');axis([0,300,-2*10,2*10]);subplot(2,1,2)plot(zcr);xlabel('帧数');ylabel('过零次数');title('原始信号的过零率');axis([0,360,0,200]);定义zcro()functionf=zcro(x)f=zeros(size(x,1),1);%生成全零矩阵fori=1:size(x,1)z=x(i,:);%提取一行数据forj=1:(length(z)-1);ifz(j)*z(j+1)0;f(i)=f(i)+1;endendend050100150200250300-20-1001020原始信号样点数幅度050100150200250300350050100150200帧数过零次数原始信号的过零率实验二基音周期估计一、实验目的在理论学习的基础上,进一步的理解和掌握基音周期估计中两种最基本的方法:基于短时自相关法和基于短时平均幅度差法。二、实验原理(1)基于短时自相关法的基音周期估计:自相关函数的性质是:如果是一个周期信