倒谱计算与分析.docx

上传人:b****1 文档编号:2098469 上传时间:2023-05-02 格式:DOCX 页数:16 大小:310.55KB
下载 相关 举报
倒谱计算与分析.docx_第1页
第1页 / 共16页
倒谱计算与分析.docx_第2页
第2页 / 共16页
倒谱计算与分析.docx_第3页
第3页 / 共16页
倒谱计算与分析.docx_第4页
第4页 / 共16页
倒谱计算与分析.docx_第5页
第5页 / 共16页
倒谱计算与分析.docx_第6页
第6页 / 共16页
倒谱计算与分析.docx_第7页
第7页 / 共16页
倒谱计算与分析.docx_第8页
第8页 / 共16页
倒谱计算与分析.docx_第9页
第9页 / 共16页
倒谱计算与分析.docx_第10页
第10页 / 共16页
倒谱计算与分析.docx_第11页
第11页 / 共16页
倒谱计算与分析.docx_第12页
第12页 / 共16页
倒谱计算与分析.docx_第13页
第13页 / 共16页
倒谱计算与分析.docx_第14页
第14页 / 共16页
倒谱计算与分析.docx_第15页
第15页 / 共16页
倒谱计算与分析.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

倒谱计算与分析.docx

《倒谱计算与分析.docx》由会员分享,可在线阅读,更多相关《倒谱计算与分析.docx(16页珍藏版)》请在冰点文库上搜索。

倒谱计算与分析.docx

倒谱计算与分析

倒谱计算与分析

上式中,虽然,的范围均在内,但的值可能超过范围。

计算机处理时总相位值只能用其主值表示,然后把这个相位

主值“展开”,得到连续相位。

所以存在下面的情况:

(K为整数)

此时即产生了相位卷绕。

下面介绍几种避免相位卷绕求复倒谱的方法。

最小相位信号法

这是解决相位卷绕的一种较好的方法。

但它有一个限制条件:

被处理的信号想x(n)必须是最小相位信号。

实际上许多信号就是最小相位信号,或可以看作是最小相位信号。

语音信号的模型就是极点都在z平面单位圆内的全极点模型,或者极零点都在z平面单位圆内的极零点模型。

设信号x(n)的z变换为X(z)=N(z)/D(z),则有

根据z变换的微分特性有

 

若x(n)是最小相位信号,则必然是稳定的因果序列。

由Hilbert变换的性质可知,任一因果复倒谱序列都可分解为偶对称分量和奇对称分量之和:

其中

这两个分量的傅里叶变换分别为的傅里叶变换的实部和虚部。

从而可得

 

此即复倒谱的性质3,也就是说一个因果序列可由其偶对称分量来恢复。

如果引入一个辅助因子g(n),上式可写作

其中

 

最小相位信号法求复倒谱原理框图如下

 

递归法

这种方法仅限于是最小相位信号的情况。

根据z变换的微分特性得

 

对上式求逆z变换,根据z变换的微分特性,有

所以

 

设x(n)是最小相位序列,而最小相位信号序列一定为因果序列,所以有

 

由于及可得递推公式

 

递归运算后由复倒谱定义

 

可知

如果x(n)是最大相位序列,则变为

 

 

其中

2、基音检测;

语音的倒谱是将语音的短时谱取对数后再进行IDFT得到的,所以浊音信号的周期性激励反映在倒谱上是同样周期的冲激。

借此,可从倒谱波形中估计出基音周期。

一般把倒谱波形中第二个冲激,认为是对应激励源的基频。

下面给出一种倒谱法求基音周期的框图及流程图如下

 

 

3.共振峰检测

倒谱将基音谐波和声道的频谱包络分离开来。

对倒谱进行低时窗选,通过语音倒谱分析系统的最后一级,进行DFT后的输出即为平滑后的对数模函数,这个平滑的对数谱显示了特定输入语音段的谐振结构,即谱的峰值基本上对应于共振蜂频率,对平滑过的对数谱中的峰值进行定位,即可估计共振峰。

原理框图及流程图如下。

 

四、实验步骤(包括主要步骤、代码分析等)

1.倒谱MATLAB实现代码段

clearall;%倒谱

[s,fs,nbit]=wavread('beijing.wav');%读入一段语音

b=s';%将s转置

x=b(5000:

5399);%取400点语音

N=length(x);%读入语音的长度

S=fft(x);%对x进行傅里叶变换

Sa=log(abs(S));%log为以e为底的对数

sa=ifft(Sa);%对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);

time=(1:

length(y))/fs;

frameSize=floor(50*fs/1000);%帧长

startIndex=round(5000);%起始序号

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);

fori=1:

ylen/2;

cepstrum1(i)=rwy(ylen/2+1-i);

end

fori=(ylen/2+1):

ylen;

cepstrum1(i)=rwy(i+1-ylen/2);

end

%基因检测

LF=floor(fs/500);%基因周期的范围是70~500Hz

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('幅度');

运行结果如下图:

倒谱法求浊音的基音周期

清音的倒谱

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<=2

formant(t)=formant1(t);

else

formant(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])

运行结果如图所示:

 

五、结果分析与总结

对语音信号进行同态分析可得到语音信号的倒谱参数。

语音的倒谱是将语音的短时谱取对数后再进行IDFT得到的,所以浊音信号的激励反映在倒谱上是同样周期的冲激,借此,可从倒谱波形中估计出基音周期。

对倒谱进行低时窗选,通过语音倒谱分析的最后一级,进行DFT后的输出即为平滑后的对数模函数,这个平滑的对数谱显示了特定输入语音段的谐振结构,即谱的峰值基本上对应于共振峰频率,对于平滑过的对数谱中的峰值进行定位,即可估计共振峰。

 

教师签名:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2