语音信号处理基础(三)

语音信号处理基础(三)

倒谱分析(Cepstrum Analysis)

下面是一个语音的频谱图。峰值表示语音的主要频率成分,我们把这些峰值称为共振峰(formants),共振峰携带了声音的辨识属性(就像个人身份证一样),特别重要,用它就可以识别不同的声音。
语音信号处理基础(三)
我们要提取的不仅仅是共振峰的位置,还得提取它们转变的过程。所以我们提取的是频谱的包络(Spectral Envelope)。这包络就是一条连接这些共振峰点的平滑曲线。
语音信号处理基础(三)
将原始的频谱由两部分组成:包络和频谱的细节。这里用到的是对数频谱,所以单位是dB(分贝)。我们需要把这两部分分离,就可以得到包络了。
语音信号处理基础(三)
在给定log X[k]的基础上,求得log H[k] 和 log E[k]以满足log X[k] = log H[k] + log E[k]。为了达到这个目标,我们需要对频谱做FFT。在频谱上做傅里叶变换就相当于逆傅里叶变换Inverse FFT (IFFT)。需要注意的一点是,我们是在频谱的对数域上面处理的。在对数频谱上面做IFFT就相当于在一个伪频率(pseudo-frequency)坐标轴上描述信号。
语音信号处理基础(三)
由上图可以看到,包络主要是低频成分(这时需要转变思维,横轴不要看成是频率,可以看成时间,把它看成是一个每秒4个周期的正弦信号),这样我们在伪坐标轴上面的4Hz的地方给它一个峰值。而频谱的细节部分主要是高频(把它看成是一个每秒100个周期的正弦信号)。这样我们在伪坐标轴上面的100Hz的地方给它一个峰值。把它俩叠加起来就是原来的频谱信号了。
语音信号处理基础(三)
在实际中已知log X[k],可以得到x[k]。由图可以知道,h[k]是x[k]的低频部分,那么将x[k]通过一个低通滤波器就可以得到h[k]。到这里咱们就可以将它们分离开了,得到h[k],也就是频谱的包络。x[k]实际上就是倒谱Cepstrum(这是一个新造出来的词,把频谱的单词spectrum的前面四个字母顺序倒过来就是倒谱的单词)。而我们所关心的h[k]就是倒谱的低频部分。h[k]描述了频谱的包络,它在语音识别中被广泛用于描述特征。
那现在总结下倒谱分析,它实际上是这样一个过程:
1)将原语音信号经过傅里叶变换得到频谱:X[k]=H[k]E[k];
只考虑幅度就是:|X[k] |=|H[k]||E[k] |;
2)在两边取对数:log||X[k] ||= log ||H[k] ||+ log ||E[k] ||。
3)再在两边取逆傅里叶变换得到:x[k]=h[k]+e[k]。
这实际上有个专业的名字叫做同态信号处理,目的是将非线性问题转化为线性问题的处理方法。对应上面,原来的语音信号实际上是一个卷性信号(声道相当于一个线性时不变系统,声音的产生可以理解为一个激励通过这个系统),第一步通过卷积将其变成了乘性信号(时域的卷积相当于频域的乘积)。第二步通过取对数将乘性信号转化为加性信号,第三步进行逆变换,使其恢复为卷性信号。这时候,虽然前后均是时域序列,但它们所处的离散时域显然不同,所以后者称为倒谱频域。
总结下,倒谱(cepstrum)就是一种信号的傅里叶变换经对数运算后再进行傅里叶反变换得到的谱。它的计算过程如下:
语音信号处理基础(三)