资源描述:
《南邮信息技术综合实验-实验二-语音编码实验.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、南京邮电大学实验报告实验名称语音编码实验课程名称信息处理技术专业综合实验班级学号B姓名陈超开课时间2016/2017学年,第一学期实验二语音编码一、实验目的熟悉语音基本压缩编码的方法,观察语音压缩效果,加深对语音线性预测编码(LPC)的理解。二、实验内容1、编写并调试语音LPC参数提取程序。2、编写并调试语音基音周期提取程序。3、编写并调试语音LPC合成程序。三、实验原理语音信号中含有大量的冗余信息,采用各种信源编码技术减除语音信号的冗余度,并充分利用人耳的听觉掩蔽效应,就可以将其编码速率压缩很多倍,而仍能提供可懂语音。LPC声码器是一种比较简单实用的语音压缩方法,其基本原理是
2、:根据语音生成模型,将语音看作激励源通过一个线性时不变系统产生的输出,利用线性预测分析对声道参数进行估值,将求得的线性预测系数,结合基音周期等少量参数进行传输,就可以在接收端利用合成滤波器重构语音信号。线性预测系数的估计方法为:假设语音的当前样值可以用过去的个语音样值来进行预测式中即为线性预测系数。实际值和预测值之间的均方误差可表示为要求均方误差总和最小,将关于的偏导数设置为零,可以得到通过采用自相关法、协方差法或格形法求解该方程,即可得到最优的。四、实验方法及程序1.调用xcorr命令计算一帧语音的自相关函数。2.调用toeplitz命令形成该帧语音的自相关矩阵。3.调用du
3、rbin命令,采用杜宾递推算法计算该帧语音的线性预测系数。4.编写lpcauto.m函数,求取一句语音信号的线性预测系数及预测残差。选择设当的窗函数对语音信号进行分幀。5.编写lpcpitch函数,由残差信号计算该句语音的基音周期。6.编写lpcgain函数,由预测残差能量,求出该句语音的增益。7.编写lpcsyn函数,由该句语音的基音周期、预测残差能量和增益进行LPC合成。五、实验结果与分析1.如何对全极点模型的线性预测参数进行提取?加窗等预处理对提取结果有何影响?2.如何实现线性预测参数的各种表现方式之间的转换?3.使用预测残差求基音周期有何优点?4.如何根据线性预测系数求
4、得LPC频谱?5.LPC频谱与基于DFT求得的语音对数幅度谱相比有何不同?6.LPC合成语音的质量如何?有何改进措施?实验过程记录与结果分析1、计算短时自相关函数1.1分别计算正弦信号和白噪声的短时自相关函数,估计正弦信号的基音周期。其Matlab代码如下:x=sin(2*pi*0.01*(0:499)');[r,eta]=xcorr(x,100,'unbiased');stem(eta,r);w=randn(500,1);[r,eta]=xcorr(w,100,'unbiased');stem(eta,r);1.2计算正弦信号叠加白噪声的短时自相关函数,试估计正弦信号的基音周
5、期。其Matlab代码如下:x=sin(2*pi*0.01*(0:499)');w=randn(500,1);x1=x+w;[r,eta]=xcorr(x1,100,'unbiased');stem(eta,r);1.3分别画出一帧浊音和一帧清音的语音自相关波形(采样频率为10kHz,帧长为25.6ms,每帧有256个样点),估计浊音的基音周期。loaddigits;x=digits.three1;m=2756;N=256;n=m-N+1:m;[r,eta]=xcorr(x(n),250,'unbiased');plot(eta,r);m=500;N=256;n=m-N+1:m
6、;[r,eta]=xcorr(x(n),250,'unbiased');plot(eta,r);2、求取LPC系数2.1加载“digits.three1”语音数据。基于自相关法,求出其中一帧数据(采样频率为10kHz,帧长为25.6ms,每帧有256个样点)的14阶LPC系数。画出相应的LPC谱。loaddigits;x=digits.three1;m=2756;N=256;n=m-N+1:m;M=14;[r,eta]=xcorr(x(n),250,'unbiased');Rx=toeplitz(r(M+1:2*M));rx=r(M+2:2*M+1);a=Rxrx;NFFT=
7、1024;k=1:NFFT/2;X=fft(x(n).*hann(N),NFFT);Theta=1./fft([1:-a],NFFT);plot(k,20*log10(abs([353*Theta(k)’X(k)])))axis([0NFFT/2-infinf])2.2编写一个用以实现杜宾递推算法的函数“durbin.m”,其Matlab代码如下:function[a,xi,kappa]=durbin(r,M)kappa=zeros(M,1);a=zeros(M,1);xi=[r(1);ze