(语音编码)
姓名:***
学号:**********
指导老师:***
语音编码
一、 上机目的
1、复习语音信号各类处理方法的基础上,掌握语音信号编码的基本原理、主要流程和软件实现方法,把理论知识转变为工程实践经验。 2、分析语音信号处理中的LPC编码、VQ技术等源代码。 二、 上机内容
1、自学MATLAB软件的简单使用。
2、运行MATLAB环境中的warplpc程序,注意听变换前后的语音变化。 3、分析warplpc程序中LPC编码源程序的原理、极点变化的影响和LPC逆过程。 4、运行MATLAB环境中的vq程序,注意显示图中两个说话者2D vector codebook的差异。
5、分析vq程序中,VQLBG迭代算法,给出原理框图。 三、 实验步骤
1、运行MATLAB环境中的warplpc的程序,注意前后的语音变化,在MATLAB中打开warplpc文件中的main文件,程序如下:
%2.运行MATLAB环境中的warplpc程序,注意听变换前后的语音变化。
%在MATLAB中打开warplpc文件夹中的main文件,程序如下: [d,sr]=wavread('0804210117 陈航特1.wav');%读取声音文件 [a,g,e]=lpcfit(d,20);%进行21阶的线性预测编码(LPC) alpha=-0.01;
[bhat,ahat]=warppoles(a,alpha);%对极点进行偏差运算
dw=filter(bhat(1,:),1,lpcsynth(ahat,g,e));%对改过的LPC进行逆运算,求得变换后的声音
soundsc(d,sr);pause
soundsc(dw,sr);%播放原始声音,按任意键播放变换后的 声音 wavwrite(dw,sr,'0804210117 陈航特2.wav');%存储变换后的声音
%听到原始声音后按任意键,可以听到极点变换后的声音,保存到“DSP2.wavl”文件中。
在MATLAB中运行上述的程序,点击保存运行,听到原始声音后按任意键,可以听到极点变换后的声音,保存到“0804210117 陈航特2.wav”文件中。 2、1 LPC分析基本原理
LPC分析为线性时不变因果稳定系统V(z)建立一个全极点模型,并利用均方误差准则,对已知的语音信号s(n)进行模型参数估计。
如果利用P个取样值来进行预测,则称为P阶线性预测。假设用过去P个取样值
Sn1,Sn2,pSnp的加权之和来预测信号当前取样值
Sn,则预测信号
Sn为:
Snaknkk1 (1)
其中加权系数用ak表示,称为预测系数,则预测误差为:
ensnSnsnaknkk1p (2)
要使预测最佳,则要使短时平均预测误差最小有:
2Eenmin (3)
2enak0,(1kp) (4)
令
i,kEsni,Snk (5)
最小的可表示成:
min0,0ak0,kk1p (6)
显然,误差越接近于零,线性预测的准确度在均方误差最小的意义上为最佳,由此可以计算出预测系数。
通过LPC分析,由若干帧语音可以得到若干组LPC参数,每组参数形成一个描绘该帧语音特征的矢量,即LPC特征矢量。由LPC特征矢量可以进一步得到很多种派生特征矢量,例如线性预测倒谱系数、线谱对特征、部分相关系数、对数面积比等等。不同的特征矢量具有不同的特点,它们在语音编码和识别领域有着不同的应用价值。
3、在MATLAB中运行VQ中的demo程序,程序如下:
[s1 fs1]=wavread('0804210117 陈航特1.wav'); [s2 fs2]=wavread('0804210117 陈航特2.wav');
c1=mfcc(s1,fs1); c2=mfcc(s2,fs2); d1=vqlbg(c1,16); d2=vqlbg(c2,16); plot(c1(5,:),c1(6,:),'xr') hold on
plot(d1(5,:),d1(6,:),'vk') plot(c2(5,:),c2(6,:),'xb')
plot(d2(5,:),d2(6,:),'+k') xlabel('5th Dimension'); ylabel('6th Dimension');
legend('Speaker1','Codebook1', 'Speaker2','Codebook2'); title('2D plot of acoustic vectors');
点击保存运行,其结果如下图:
MATLAB的牛顿迭代算法如下: % 用牛顿下山法求解方程
function [x,k]=myfun_newton(f,x0,emg)
% f表示非线形方程
% x0迭代初值,此种方法是局部收敛,初值要选择恰当 % emg是精度指标
% k,u分别表示迭代次数和下山因子 % d1表示非线形方程f在x0处的导数值 [f1,d1]=feval(f,x0); k=1; x(1)=x(0); x(2)=x(1)-f1/d1; while abs(f1)>emg u=1; k=k+1;
[f1,d1]=feval(f,x(k)); x(k+1)=x(k)-u*f1/d1; while abs(f2)>abs(f1) u=u/2;
x(k+1)=x(k)-u*f1/d1; [f2,d2]=feval(f,x(k+1)); end end
原理图如下:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务