基于matlab语音编码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

原理图如下:

相关文档
最新文档