倒谱计算与分析..

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《视频语音处理技术》
倒谱计算与分析
学院名称:计算机与信息工程学院
专业名称:计算机科学与技术
年级班级:
姓名:
学号:
计算机与信息技术学院综合性、设计性实验报告
一、 实验目的:
对语音信号进行同态分析可得到语音信号的倒谱参数。

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

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

对于倒谱计算与分析的设计实验可作如下训练: 1、复倒谱的几种计算方法: 2、最小相位信号法和递归法; 3、基音检测; 4、共振峰检测。

二、实验仪器或设备:windowsXP 下的Matlab 编程环境 三、总体设计(设计原理、设计方案及流程等)
1.复倒谱的几种计算方法:
在复倒谱分析中,z 变换后得到的是复数,所以取对数时要进行复对数运算。

这时存在相位的多值性问题,称为“相位卷绕”。

设信号为
则其傅里叶变换为
对上式取复对数为 则其幅度和相位分别为:
)()()(21n x n x n x *=)()()(21ω
ω
ω
j j j e X e X e X ⋅=)
(ln )(ln )(ln 21ωωωj j j e X e X e X +=)(ln )(ln )(ln 21ω
ωωj j j e X e X e X +=)
()()(21ωϕωϕωϕ+=)
()()(21ωϕωϕωϕ+=
上式中,虽然 , 的范围均在 内,但 的值可能超过
范围。

计算机处理时总相位值只能用其主值
表示,然后把这个相位 主值“展开”,得到连续相位。

所以存在下面的情况:
(K 为整数) 此时即产生了相位卷绕。

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

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

但它有一个限制条件:被处理的信号想x(n)必须是最小相位信号。

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

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

设信号x (n )的z 变换为X (z )=N (z )/ D (z ) ,则有
根据z 变换的微分特性有
若x (n )是最小相位信号,则 必然是稳定的因果序列。

由Hilbert 变换的性质可知,任一因果复倒谱序列都可分解为偶对称分量和奇对称分量之和: 其中
这两个分量的傅里叶变换分别为 的傅里叶变换的实部和虚部。

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

如果引入一个
)(1ωϕ)(2ωϕ()ππ,-)(ωϕ()
ππ,-)(ωΦπωωϕk 2)()(+Φ=)
()(ln )(ln )(ˆz D z N z X z X
==⎥

⎤⎢⎣⎡-=-=-∞
-∞
=∑
)()(ln )(ˆ)(ˆz D z N dz d z z X dz
d z z n x n n
n []
)
()()()()()(z D z N z D z N z N z D z
'-'-=)(ˆn x )(ˆ)(ˆ)(ˆn x n x n x
o e +=[]2/)(ˆ)(ˆ)(ˆn x n x n x
e -+=[]2/)(ˆ)(ˆ)(ˆn x n x n x
o --=)(ˆn x )(ˆ)(ˆ)(ˆ)(ˆωωωωj I
j R jn n j e X j e X e n x e X +==-∞
-∞
=∑
⎪⎩⎪⎨⎧>=<=0
)(ˆ20 )(ˆ0
0)(ˆn n x n n x n n x
e e
辅助因子g (n ),上式可写作 其中
最小相位信号法求复倒谱原理框图如下
这种方法仅限于是最小相位信号的情况。

根据z 变换的微分特性得
对上式求逆z 变换,根据z 变换的微分特性,有
所以
设x (n )是最小相位序列,而最小相位信号序列一定为因果序列 ,所以有
由于 及 可得递推公式 递归运算后由复倒谱定义
可知 如果x (n )是最大相位序列,则变为
00
()1
020n g n n n <⎧⎪==⎨⎪>⎩
)n )()()(z X dz
d
z z X dz d z zX -=- []
)()()(ˆn x n n x n x n ⋅=*⋅0)()(ˆ)(≠-⎪⎭
⎫ ⎝⎛=∑∞
-∞
=n k n x k x
n k n x k ∑∑-==+-⎪⎭⎫ ⎝
⎛=-=1
00)0()(ˆ)()(ˆ)()(ˆ)()(n k n
k x n x k n x k x n k k n x k x n k n x )0(0)(ˆ<=k k x )(0)(ˆn k k n x
>=-)
0()()(ˆ)0()()(ˆ10x k n x k x
n k x n x n x n k -⎪⎭⎫ ⎝⎛-=∑-=[]{}⎭
⎬⎫
⎩⎨⎧==∑∞
-∞=---])(ln[)(ln )(ˆ1
1
n n z n x z n x z z n x
[][])0(ln )()0(ln )0(ln )0(1
x n x x z z x ===-δ⎪⎩

⎨⎧<=>=0 20
10 0)(n n n n g 0
)
0()()(ˆ)()0()()(ˆ01<--=∑+=n x k n x k x n k x n x n x n k
其中 2、基音检测;
语音的倒谱是将语音的短时谱取对数后再进行IDFT 得到的,所以浊音信号的周期性激励反映在倒谱上是同样周期的冲激。

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

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

下面给出一种倒谱法求基音周期的框图及流程图如下
3.共振峰检测
倒谱将基音谐波和声道的频谱包络分离开来。

对倒谱进行低时窗选,通过语音倒谱
)
0(ln )0(ˆx x =
图5.8 一种倒谱法求基音周期的实现
框图
分析系统的最后一级,进行DFT后的输出即为平滑后的对数模函数,这个平滑的对数谱显示了特定输入语音段的谐振结构,即谱的峰值基本上对应于共振蜂频率,对平滑过的对数谱中的峰值进行定位,即可估计共振峰。

原理框图及流程图如下。

图5.12 共振峰检测框图
四、实验步骤(包括主要步骤、代码分析等)
1.倒谱MATLAB实现代码段
clear all; %倒谱
[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);
for i=1:ylen/2;
sal(i)=sa(ylen/2+1-i);
end
for i=(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. 倒谱法求浊音、清音的基音周期
function s=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);
for i=1:ylen/2;
cepstrum1(i)=rwy(ylen/2+1-i);
end
for i=(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_cep ind]=max(cn);
if mx_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('语音波形');
%axis tight
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);
for t=3:NN
% do some median filtering
z=formant1(t-2:t);
md=median(z);
formant2(t)=md;
end
for t=1:NN-1
if t<=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])
运行结果如图所示:
020406080
100120140160180200220
-0.5
0.5
倒谱
样点数幅度
500
1000
1500
2000
2500300035004000
4500
5000
5500
-100
-500
50
频谱
频率/Hz 幅度/d B
500
1000
1500
2000
250030003500
4000
4500
5000
5500
-80-60-40-20
平滑对数幅度谱
频率/Hz
幅度/d B
五、结果分析与总结
对语音信号进行同态分析可得到语音信号的倒谱参数。

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

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

教师签名:
年月日。

相关文档
最新文档