基于matlab语音编码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
语音信号处理实验报告
(语音编码)
姓名:***
学号:**********
指导老师:***
语音编码
一、上机目的
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 个取样值()()(){}1,2,
S n S n S n p ---的加权之和来预测信号当前取样值()S n ,则预测信号()S n ∧为:
()()
1p k k S n a n k ∧==-∑ (1)
其中加权系数用k a 表示,称为预测系数,则预测误差为:
()()()()()
1p k k e n s n S n s n a n k ∧==-=--∑ (2)
要使预测最佳,则要使短时平均预测误差最小有:
()2min E e n ε⎡⎤==⎣⎦ (3)
()20,(1)k e n k p a ⎡⎤∂⎣⎦
=≤≤∂ (4)
令
()()(),,i k E s n i S n k φ=--⎡⎤⎣⎦ (5) 最小的ε可表示成:
()()
min 10,00,p k k a k εφφ==-∑ (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
原理图如下: