语音的线性预测编码(LPC)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
rss=sxcorr(length(sxcorr)-space+1:length(sxcorr)); %预测系数与相关系数的互相关 reconv=conv(fliplr(ra),rss); re=reconv(length(reconv)-space+1:length(reconv)); %清音浊音判断 max=0.25;period=0; for k=24:space
语音信号加载
clear,clc,close all %读取语音信号 [voice,fs,bits]=wavread('voice'); y=voice(1:8*fs)'; %将语音信号分为段长为160样本的若干段 space=160; N=floor(length(y)/space);
计算LPC系数 能量 周期
b=re(k)/re(1); if b>max
max=b; period=k; end end A(i,:)=a; G(i)=g; T(i)=period; end
声音合成
result=[]; for i=1:N
x=zeros(1,space); if T(i)>0
%周期冲激串发生器,做为浊音 for k=0:floor(space/T(i))
p=10; %LPC阶数 A=zeros(N,p+1);%LPC预测系数 G=zeros(N,1); %能量 T=zeros(N,1); %周期 for i=1:N
s=y((i-1)*160+1:(i*160)); %利用lpc函数求解预测系数a和能量g [a,g]=lpc(s,p); %预测系数的自相关序列 raxcorr=xcorr(a,a); ra=raxcorr(length(a):2*length(a)-1); %语音自相关序列 sxcorr=xcorr(s,s);
x(k*T(i)+1)=1*100*G(i)*(-1)^k; end %全极点滤波器 x=filter(1,A(i,:),x); else %白噪声发生器,做为清音 x=randn(1,length(x))*G(i)*10; end result((i-1)*160+1:(i*160))=x(1:space); end
信号波形比较
subplot(211);plot(y);title('输入语音波形'); subplot(212);plot(result);title('合成后的语音波形');
Байду номын сангаас
信号声音比较
sound(y,fs); sound(result,fs);
Pub lished with MATLAB® R2012b
Conte nts
语音的线性预测编码(LPC) 语音信号加载 计算LPC系数 能量 周期 声音合成 信号波形比较 信号声音比较
语音的线性预测编码(LPC)
%{ 目的:
理解和掌握语音的线性预测编码(LPC)算法原理,掌握自相关互相关的计算方法,掌握基音周期的求法。 要求:
1.使用MATLAB语言实现基于线性预测编码(LPC)的语音信号分析与合成; 2.将合成的语音信号与原语音信号作比较,评估合成效果。 步骤: 1.读取语音信号(采样频率8000赫兹,8位编码,wavread),并将语音信号分为帧长为160的若干帧; 2.利用lpc函数求解预测系数,设全极点滤波器阶数为10; 3.利用自相关序列判断每帧是清音还是浊音,并求出浊音的基因周期; 4.合成语音信号,清音帧用白噪声,浊音帧用周期冲激串通过相应的全极点滤波器而合成; 5.分别画出原始语音信号和合成语音信号的波形作对比,通过试听比较效果。 作者: 王龙河 2011010501 时间: 2014.1.1星期三 %}