语音信号进行倒谱分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三 语音信号进行倒谱分析
一、 实验目的、要求
1. 理解倒谱分析的作用
2. 掌握倒谱分析求基音周期的方法
3. 了解LPC 倒谱分析方法
二、实验原理
1.倒谱分析原理
同态信号处理也称为同态滤波,实现将卷积关系变换为求和关系的分离处理,即解卷。
如 进行如下3步处理
对于语音信号进行解卷,可将语音信号的声门激励信息及声道响应信息分离开来,从而求得声道共振特征和基音周期,用于语音编码、合成和识别。 同态信号处理的基本原理
(1)第一个子系统D*[](特征系统)完成将卷积信号转化为加性信号的运算。 )(ˆ1n x 和 )(ˆ2n x
信号也均是时域序列,但它们所处的离散时域显然不同于x(n)所处的离散时域,故把它称之为复倒频谱域。)(ˆn x
是x(n)的复倒频谱,简称为复倒谱,有时也称为对数复倒谱。复倒谱具体计算公式
其中倒谱计算公式为: 2 线性预测原理
线性预测分析的基本思想
由于语音样点之间存在相关性,所以可以用过去的样点值来预测现在或未来的样点值。通过使实际语音抽样和线性预测抽样之间的误差在某个准则下达到最小值来决定唯一的一组预测系数,而这组系数就能反映语音信号的特性,可以作为语音信号特征参数来用于语音编码、语音合成和语音识别等应用中去。
线性预测分析的基本原理
每个采样值由前面的p 个采样值线性组合所构成。记为x (n),有:
要提高预测精度,就是要预测系数{k a }的取值使e(n)最小。理论上通常采用均方误差E[e2(n)]最小的准则。
根据e(n)均方误差最小的原则来求解k a ,有三种方法:自相关法(Levinson-Durbin 算法)、协方差法和格型合成滤波算法。
自相关法,就是先解出Yule-Walker 方程,再计算G 。Levinson-Durbin 算法是自相关算法中的一种,形成递推算法。
三、使用仪器、材料
12()()()
x n x n x n =*1ˆ()[ln (())]
x n Z Z x n -=
微机(带声卡)、耳机,话筒。
四、 实验步骤
(1)采集语音(浊音,轻音)信号
(2)分帧计算语音信号倒谱
(3)倒谱作FFT 并加短时窗,取大于25以上的样值,进行IFFT ,得到基音周期的倒谱。
(3)运用Levinson-Durbin 计算一帧语音信号线形预测系数
(4)对该帧语音信号进行逆滤波处理
(5)对逆滤波后的信号进行倒谱分析确定基音周期
五、实验过程原始记录(数据,图表,计算)
1.倒谱计算公式为:
2.线形预测系数计算公式为: 1)0(0)n n E R = 2)
11
1
1)()(--=-∑--=i n i j n i j n i E j i R a i R k 3) i i
i k a =
4) 5)
12)1(--=i n i i n E k E if i
6) p j j a a =
1≤j ≤p
LPC 倒谱流程如下
六:实验结果,及分析
倒谱分析
LPC 倒谱分析波形图
逆滤波后波形图
分析
倒谱分析可以观察倒浊音的基音周期。相邻两个峰值之间的距离为基音周期。
七、实验参考程序
N=256;R=zeros(1,N);
p=12;a=zeros(p,p);En=zeros(1,p);
K=zeros(1,p);
sp=wavread('D:\语音信号处理试验\a1.wav');%11000采样频率
qq=max(sp);
sp=sp-qq;
%相关函数
for j=1:p
for n=j:N-1
R(j)=R(j)+sp(n)*sp(n-j+1);
11i i i j j i i j
a a k a ---=-
end
end
% (Levinson-Durbin算法)预测系数%完成程序
En(1)=R(1);
K(1)=R(2)/R(1);
a(1,1)=K(1);
En(2)=(1-K(1)^2)*En(1);
%K(2)=(R(3)-a(1,1)*R(2))/En(2);
%a(2,2)=K(2);
%a(2,1)=a(1,1)-K(2)*a(1,1);
for i=2:p
po=0;
for j=1:i-1
po=po+a(i-1,j)*R(i-j+1);
end
K(i)=(R(i+1)-po)/En(i);
a(i,i)=K(i);
for j=1:i-1
a(i,j)=a(i-1,j)-K(i)*a(i-1,i-j);
end
En(i+1)=(1-K(i)^2)*En(i);
end
source=sp(1:256);
for i=1:12
mm(i)=a(12,13-i);
end
mm1=zeros(1,300);
% 逆滤波
for k=1:256
if k
for m=1:k
mm1(k)=mm1(k)+mm(p-k+m)*source(m);
end
else
if k<256
for m=1:p
mm1(k)=mm1(k)+mm(m)*source(m+k-p);
end
else
for m=k-p+1:256
mm1(k)=mm1(k)+mm(m-k+p)*source(m);
end
end
end
end
DFTmm=abs(fft(mm1));
Ln=zeros(1,300);
%取对数,高频风量置零
for i=1:60
Ln(i)=logm(DFTmm(i));
end
% IDFT
ifftLn=real(ifft(Ln));