倒谱计算与分析综述.docx
《倒谱计算与分析综述.docx》由会员分享,可在线阅读,更多相关《倒谱计算与分析综述.docx(16页珍藏版)》请在冰豆网上搜索。
倒谱计算与分析综述
《视频语音处理技术》
倒谱计算与分析
学院名称:
计算机与信息工程学院
专业名称:
计算机科学与技术
年级班级:
姓名:
学号:
计算机与信息技术学院综合性、设计性实验报告
专业:
计算机科学技术年级/班级:
2011级2012—2013学年第一学期
课程名称
视频语音处理技术
指导教师
张新明
本组成员学号姓名
1108114153王彦秋
实验地点
计科楼324
实验时间
项目名称
倒谱计算与分析
实验类型
设计性
一、实验目的:
对语音信号进行同态分析可得到语音信号的倒谱参数。
语音的倒谱是将语音的短时谱取对数后再进行IDFT得到的,所以浊音信号的激励反映在倒谱上是同样周期的冲激,借此,可从倒谱波形中估计出基音周期。
对倒谱进行低时窗选,通过语音倒谱分析的最后一级,进行DFT后的输出即为平滑后的对数模函数,这个平滑的对数谱显示了特定输入语音段的谐振结构,即谱的峰值基本上对应于共振峰频率,对于平滑过的对数谱中的峰值进行定位,即可估计共振峰。
对于倒谱计算与分析的设计实验可作如下训练:
1、复倒谱的几种计算方法:
2、最小相位信号法和递归法;
3、基音检测;
4、共振峰检测。
二、实验仪器或设备:
windowsXP下的Matlab编程环境
三、总体设计(设计原理、设计方案及流程等)
1.复倒谱的几种计算方法:
在复倒谱分析中,z变换后得到的是复数,所以取对数时要进行复对数运算。
这时存在相位的多值性问题,称为“相位卷绕”。
设信号为x(n)=为(n)X2(n)
则其傅里叶变换为X(e')二Xje八)/(e八)
对上式取复对数为lnX(e')=lnX1(e「)7nX2(e「)
则其幅度和相位分别为:
lnX(e鬥=lnX'e鬥+lnX2(e今
「)「(•)*)
(■)=-i(■)2()
上式中,虽然iCO,2()的范围均在—二,二内,但(.)的值可能超过
(―.兀)范围。
计算机处理时总相位值只能用其主值①(国)表示,然后把这个相位
主值“展开”,得到连续相位。
所以存在下面的情况:
2k二(K为整数)
此时即产生了相位卷绕。
下面介绍几种避免相位卷绕求复倒谱的方法。
最小相位信号法
这是解决相位卷绕的一种较好的方法。
但它有一个限制条件:
被处理的信号想x(n)
必须是最小相位信号。
实际上许多信号就是最小相位信号,或可以看作是最小相位信号。
语音信号的模型就是极点都在z平面单位圆内的全极点模型,或者极零点都在z平
面单位圆内的极零点模型。
设信号x(n)的z变换为X(z)=N(z)/D[z),则有
根据z变换的微分特性有
D(z)N(z)-N(z)D(z)1
N(z)D(z)
若x(n)是最小相位信号,则対必然是稳定的因果序列。
由Hilbert变换的性质可知,任一因果复倒谱序列都可分解为偶对称分量和奇对称分量之和:
X(n)=鬼(n)XO(n)
其中xe(n)-x(n)x(_n)1/2
xO(n)-x(n)-?
(-n)1/2
这两个分量的傅里叶变换分别为x(的傅里叶变换的实部和虚部。
)?
(er)x(n)e$二)?
R(e?
)j*(ej)
n=•:
:
:
从而可得
0n£0
x(n)二鬼(n)n=0
2?
e(n)n0
其中
此即复倒谱的性质3,也就是说一个因果序列可由其偶对称分量来恢复。
如果引入一个
最小相位信号法求复倒谱原理框图如下
递归法
这种方法仅限于是最小相位信号的情况。
根据z变换的微分特性得
对上式求逆z变换,根据z变换的微分特性,有
n?
(n)丨x(n)二nx(n)
设x(n)是最小相位序列,而最小相位信号序列一定为因果序列,所以有
x(n)=瓦(b)x(k)x(n-k)=迟-*(k)x(n-k)+?
n)x(0)
k=onk=0in丿
由于?
(k)=0(k:
:
0)及x(n-k)=0(kn)可得递推公式
x(0)心in
递归运算后由复倒谱定义
x(n)=zrnzk(n)D=z°」ln[送x(n)z^可知x(0)=z,lnz〔x(0)H-Inx(0)、(n)二Inx(0)如果x(n)是最大相位序列,则变为
0n0
g(n)=」1n=0
2nC0
x(0)k卅nx(0)
其中5?
(0)=1nx(0)
2、基音检测;
语音的倒谱是将语音的短时谱取对数后再进行IDFT得到的,所以浊音信号的周期
性激励反映在倒谱上是同样周期的冲激。
借此,可从倒谱波形中估计出基音周期。
一般把倒谱波形中第二个冲激,认为是对应激励源的基频。
下面给出一种倒谱法求基音周期的框图及流程图如下
w(n)
图5.8一种倒谱法求基音周期的实现
框图
图5.9一种倒谱法求基音周期的流程图
3.共振峰检测
倒谱将基音谐波和声道的频谱包络分离开来。
对倒谱进行低时窗选,通过语音倒谱
分析系统的最后一级,进行DFT后的输出即为平滑后的对数模函数,这个平滑的对数谱显示了特定输入语音段的谐振结构,即谱的峰值基本上对应于共振蜂频率,对平滑过
的对数谱中的峰值进行定位,即可估计共振峰。
原理框图及流程图如下。
分帧加窗H~|FFT|卜「Og~}TIFFTH加窗卜I|FFT|卜厂lQg~—|平滑处斗{共振峰
图5.12共振峰检测框图
读入一段语音
将s转置
取400点语音
读入语音的长度
对x进行傅里叶变换
为以e为底的对数
图5.13共振峰检测流程图
四、实验步骤(包括主要步骤、代码分析等)
1.倒谱MATLAB实现代码段
clearall;%倒谱
[s,fs,nbit]=wavread('beijing.wav');%b=s';%
x=b(5000:
5399);%
N=length(x);%
S=fft(x);%
Sa=log(abs(S));%log
对Sa进行傅里叶逆变换
sa=ifft(Sa);ylen=length(sa);fori=1:
ylen/2;
sal(i)=sa(ylen/2+1-i);
end
fori=(ylen/2+1):
ylen;sal(i)=sa(i+1-ylen/2);
end
淤图
figure
(1);
subplot(2,1,1);plot(x);
%axis([0,400,-0.5,0.5])title('截取的语音段');
xlabel('样点数');
ylabel('幅度');subplot(2,1,2);time2=[-199:
1:
-1,0:
1:
200];plot(time2,sa1);
%axis([-200,200,-0.5,0.5])title('截取语音的倒谱');
xlabel('样点数');
ylabel('幅度');
运行结果如图:
2.倒谱法求浊音、清音的基音周期
functions=p5_2pitchdetect
waveFile='beijing.wav';
[y,fs,nbits]=wavread(waveFile);
time1=1:
length(y);
HF=floor(fs/70);
cn=cepstrum(LF:
HF);
[mx_cepind]=max(cn);
ifmx_cep>0.08&ind>LF;
a=fs/(LF+ind);
else
a=0;
end
pitch=a
%画图
figure
(1);
subplot(3,1,1);
plot(time1,y);
title('语音波形');
%axistight
ylim=get(gca,'ylim');
line([time1(startIndex),time1(startIndex)],ylim,'color','r');line([time1(endIndex),time1(endIndex)],ylim,'color','r');xlabel('样点数');
ylabel('幅度');
subplot(3,1,2);
plot(frame);
%axis([0,400,-0.5,0.5])
title('一帧语音');
xlabel('样点数');
ylabel('幅度')
subplot(3,1,3);
time2=[-199:
1:
-1,0:
1:
200];
plot(time2,cepstrum1);
%axis([-200,200,-0.5,0.5])
title('—帧语音的倒谱’);
xlabel('样点数');
ylabel('幅度');
运行结果如下图:
倒谱法求浊音的基音周期
语音波形
0511.622.5335
一帧语音的倒谱
语音波形
0.511522.533.5
0.5
赳0
蚩
样点数
一帧语音
□50100150200250300390400
样点数
SO6
清音的倒谱
3.共振峰检测程序
waveFile='qinghua.wav';
[y,fs,nbits]=wavread(waveFile);time=(1:
length(y))/fs;
frameSize=floor(40*fs/1000);%
startIndex=round(15000);%
endIndex=startIndex+frameSize-1;%frame=y(startIndex:
endIndex);%frameSize=length(frame);
帧长
起始序号
结束序号
取出该帧
加汉明窗
倒谱求
frame2=frame.*hamming(length(frame));%
rwy=rceps(frame2);%ylen=length(rwy);
cepstrum=rwy(1:
ylen/2);
%基音检测
LF=floor(fs/500);
HF=floor(fs/70);
cn=cepstrum(LF:
HF);
[mx_cepind]=max(cn);%找到最大的突起的位置
%共振峰检测核心代码
NN=ind+LF;ham=hamming(NN);
cep=cepstrum(1:
NN);
ceps=cep.*ham;%汉明窗formant1=20*log(abs(fft(ceps)));
formant(1:
2)=formant1(1:
2);
fort=3:
NN
%dosomemedianfiltering
z=formant1(t-2:
t);
md=median(z);
formant2(t)=md;
end
fort=1:
NN-1
ift<=2formant(t)=formant1(t);
elseformant(t)=formant2(t-1)*0.25+formant2(t)*0.5+formant2(t+1)*0.25;
end
end
subplot(3,1,1);plot(cepstrum);title('倒谱');
xlabel('样点数');ylabel('幅度')
%axis([0,220,-0.5,0.5])
spectral=20*log(abs(fft(frame2)));subplot(3,1,2);
xj=(1:
length(spectral)/2)*fs/length(spectral);
plot(xj,spectral(1:
length(spectral)/2));
title('频谱');
xlabel('频率/Hz');
ylabel('幅度/dB')
%axis([0,500,-100,50])subplot(3,1,3);
xi=(1:
NN/2)*fs/NN;
plot(xi,formant(1:
NN/2));
title('平滑对数幅度谱');
xlabel('频率/Hz');
ylabel('幅度/dB');
%axis([0,5500,-80,0])
运行结果如图所示:
020406080100120140160180200220
样点数
频谱
50
B0
度-50
-100
05001000150020002500300035004000450050005500
频率/Hz
平滑对数幅度谱
五、结果分析与总结
对语音信号进行同态分析可得到语音信号的倒谱参数。
语音的倒谱是将语音的短时谱取对数后再进行IDFT得到的,所以浊音信号的激励反映在倒谱上是同样周期的冲激,借此,可从倒谱波形中估计出基音周期。
对倒谱进行低时窗选,通过语音倒谱分析的最后一级,进行DFT后的输出即为平滑后的对数模函数,这个平滑的对数谱显示了特定输入语音段的谐振结构,即谱的峰值基本上对应于共振峰频率,对于平滑过的对数谱中的峰值进行定位,即可估计共振峰。
教师签名:
年月日