当前位置:文档之家› (完整版)复倒谱的计算和matlab实现1

(完整版)复倒谱的计算和matlab实现1

复倒谱的计算 和matlab 实现
一、计算原理 在复倒谱分析中,z 变换后得到的是复数,所以取对数时要进行复对数运算。

这时存在相位的多值性问题,称为“相位卷绕” 设信号为 则其傅里叶变换为
对上式取复对数为 则其幅度和相位分别为
上式中,虽然 , 的范围均在
之内,但 的值可能超过
范围。

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

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

这会是后面求复倒谱以及由复倒谱恢复语音带来不确定性产生错误 改进方法
1、最小相位信号法 适用条件:
被处理的信号想x(n)必须是最小相位信号。

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

语音信号的模型就是
)
()()(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 +=)
()()(21ωϕωϕωϕ+=)
(ln )(ln )(ln 21ω
ωωj j j e X e X e X +=)(ωϕ()ππ,-)(2ωϕ)(ππ,-)(ωΦ)
()()(21ωϕωϕωϕ+=πωωϕk 2)()(+Φ=)(1ωϕ
极点都在z 平面单位圆内的全极点模型,或者极零点都在z 平面单位圆内的极零点模型。

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

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

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

如果引入一个辅助因子g(n),上式可写作
其中:
原理框图:
)
()(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 --=)(ˆ)(ˆ)(ˆ)(ˆωωω
ω
j I
j R jn n j e X j e X e n x
e X
+==-∞
-∞
=∑)(ˆn x ⎪⎩⎪⎨⎧>=<=0
)(ˆ20 )(ˆ0 0)(ˆn n x n n x n n x
e e )(ˆ)()(ˆn x n g n x e ⋅=00()1
020
n g n n n <⎧⎪==⎨⎪>⎩
)
n
2.递归法
同样只能适用于 x(n)是最小相位信号的情况。

根据z 变换的微分特性得
; 对上式求逆z 变换,根据z 变换的微分特性,有 所以:

设x(n)是最小相位序列,而最小相位信号序列一定为因果序列 ,所
以有 ;
由于
及 ,可得递推公式 ; 递归运算后由复倒谱定义:
可知: 同理 若x(n)是最大相位序列:
其中的。

二.Matlab 实现 M 程序clear all ;
)()()(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()()(ˆ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(0)(ˆ<=k k x )(0)(ˆn k k 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()()(ˆ0
1<--=∑+=n x k n x k x n k x n x n x n k )0(ln )0(ˆx x =
%倒谱
[s,fs,nbit]=wavread('yuyin.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
sa1(i)=sa(ylen/2+1-i); end
for i=(ylen/2+1):ylen sa1(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('幅度');
采集的是普通室内的语音 hello world 采样率8KHZ 单声道 试验结果
0 50
100
150
200 250 300
350
400
-0.5 0.5 截取的语音段
样点数 幅度
-200
-150 -100 -50
0 50 100 150 200
-0.5 0.5 截取语音的倒谱
样点数
幅度
081182039 朱熹
参考书籍
1.《数字语音处理及仿真》张雪英
2.《语音信号处理》韩纪庆张磊郑铁然。

相关主题