4

语音识别(五)——Cepstrum Analysis, Mel-Frequency Analysis

 2 years ago
source link: http://antkillerfarm.github.io/speech/2018/06/06/speech_5.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Spectrogram(续)

Hann window

Hann window虽然是以Julius Ferdinand von Hann的名字命名,但却是Blackman和Tukey的作品。他们和同一实验室的Claude E. Shannon, Hendrik Wade Bode,合称为Information Age的四大先锋。

Julius Ferdinand von Hann,1839~1921,奥地利气象学家。现代气象学之父。

Ralph Beebe Blackman,1904~1990,美国数学家。长期供职于AT&T Bell Laboratories。二战时,参与了防空火炮控制系统的平滑研究。

John Wilder Tukey,1915~2000,美国数学家。Princeton University博士,长期供职于AT&T Bell Laboratories。英国皇家学会会员。Cooley–Tukey FFT算法发明者。

w(n)=∑k=0K(−1)kakcos⁡(2πknN−1),0≤n≤N−1

上式是Cosine-sum windows的计算公式,令K=1,则:

w(n)=a0−(1−a0)⏟a1⋅cos⁡(2πnN−1),0≤n≤N−1

这类Window function有好几个特例:

Hann window:

w(n)=0.5[1−cos⁡(2πnN−1)]=sin2⁡(πnN−1)

Hamming window:

w(n)=0.54−0.46⋅cos⁡(2πnN−1)

Richard Wesley Hamming,1915~1998,美国数学家。University of Chicago本科(1937)+University of Nebraska硕士(1939)+UIUC博士(1942)。参与曼哈顿计划,后长期供职于Bell Lab。通信和计算机工程领域的宗师级人物,美国工程院院士,图灵奖得主(1968)。Hamming code 、Hamming distance等都是他的贡献。

STFT{x(t)}(τ,ω)≡X(τ,ω)=∫−∞∞x(t)w(t−τ)e−jωtdt

上式是STFT(Short-time Fourier transform)的定义。和FT相比,STFT将FT中的被积函数x(t),换成了x(t)w(t−τ)。其中,w(t)是窗函数(Window function),因此STFT又叫做加窗傅立叶变换。

https://mp.weixin.qq.com/s/TsO-tope0m4sHfVmZ0_Hog

STFT极简版

Spectrogram

DTW是一种时域方法,作为信号处理自然少不了频域方法。这里我们先来了解一个叫声谱图的东西。

这段语音被分为很多帧,每帧语音都对应于一个频谱(通过短时FFT计算),频谱表示频率与能量的关系。在实际使用中,频谱图有三种,即线性振幅谱、对数振幅谱、自功率谱(对数振幅谱中各谱线的振幅都作了对数计算,所以其纵坐标的单位是dB(分贝)。这个变换的目的是使那些振幅较低的成分相对高振幅成分得以拉高,以便观察掩盖在低幅噪声中的周期信号)。

我们先将其中一帧语音的频谱通过坐标表示出来。

再将左边的频谱旋转90度。

然后把这些幅度映射到一个灰度级表示的直方图。0表示白色,255表示黑色。幅度值越大,相应的区域越黑。

这样我们会得到一个随着时间变化的频谱图,这个就是描述语音信号的spectrogram声谱图。

Cepstrum Analysis

上图是一个语音的频谱图。峰值就表示语音的主要频率成分,我们把这些峰值称为共振峰(formants),而共振峰就是携带了声音的辨识属性(就是个人身份证一样)。所以它特别重要。用它就可以识别不同的声音。

既然它那么重要,那我们就是需要把它提取出来!我们要提取的不仅仅是共振峰的位置,还得提取它们转变的过程。所以我们提取的是频谱的包络(Spectral Envelope)。这包络就是一条连接这些共振峰点的平滑曲线。

原始的频谱由两部分组成:包络和频谱的细节。这里用到的是对数频谱,所以单位是dB。

怎么把他们分离开呢?也就是,怎么在给定log⁡X[k]的基础上,求得log⁡H[k]和log⁡E[k]以满足log⁡X[k]=log⁡H[k]+log⁡E[k]呢?

为了达到这个目标,我们需要Play a Mathematical Trick。这个Trick是什么呢?就是对频谱做FFT。

这里,我们对Fourier transform做一个简单的回顾。

设h(t)是一个时域函数,而H(f)是一个频域函数,则Fourier transform为:

H(f)=∫−∞∞h(t)e2πiftdt

inverse Fourier transformation为:

h(t)=∫−∞∞H(f)e−2πiftdf

因此,对频谱做FT,也被叫做inverse FT,简称IFT。

从上式还可以看出,FT和IFT的公式非常类似,因此从编程角度,一个FT函数既可以做FT,也可以稍作修改后,做IFT运算。因此在不强调目的性的情况下,IFT也可以直接称为FT。比如,MFCC特征最后的IDFT变换,实际上是DCT变换。

传统的IFFT的结果是一个时域函数,然而这里是对log frequency domain做IFFT,因此,它的值域只能被称作pseudo-frequency domain。

从上图可以看出,Spectral Envelope主要是低频成分,而Spectral details主要是高频成分。

显然,如果把Spectral Envelope和Spectral details叠加起来就是原来的频谱信号了。

换句话说,我们知道了log⁡X[k],就可以求出x[k],经过低通滤波就可以得到h[k]。

这里的x[k]被称作倒谱Cepstrum(这个是一个新造出来的词,把spectrum的前面四个字母顺序倒过来就是倒谱的单词了)。

而我们所关心的h[k]就是倒谱的低频部分,它在语音识别中被广泛用于描述特征。

https://www.zhihu.com/answer/790986702

怎样让安卓手机均匀连续地循环播放某一频率段的声波?

Mel-Frequency Analysis

Mel scale

Mel scale是Stevens、Volkmann和Newman于1937年发明的一种主观音阶标准。

Stanley Smith Stevens,1906~1973,Harvard University心理学教授。

John E. Volkmann,1905~1980,Radio Corporation of America研究员。

Edwin B. Newman,1908~1989,Harvard University心理学教授。

声音作为一种波动,一般以Hz作为频率差异的客观标准,然而相同频率差的两组声音,在人耳听来,其频率差(也就是所谓的音阶)实际上是不同的。因此,Stevens等人采取实验的方法,确定了人耳的主观音阶标准。

该标准以Mel作为单位,规定1000Hz的声音所对应的音阶为1000Mel。

Mel scale从严格的定义上并没有一个简单的公式来表示。但一般采用如下公式进行转换:

m=2595log10⁡(1+f700)

从中可以看出,人耳对于高频声音的分辨率实际上是不如低频声音的

Mel是melody的别称,有的blog上说Mel是个人,他发明了MFCC,这纯粹是胡说八道。

Mel-frequency Cepstral Coefficients是由Paul Mermelstein提出的一种音频特征。

Paul G. Mermelstein,明尼苏达大学神经科学教授。

由之前对Mel scale的介绍可知:人耳对于高频声音的分辨率实际上是不如低频声音的。

因此,我们可以使用一组Triangular window对声音进行滤波(如上图所示)。这里的Triangular window不是均匀分布的,而是低频部分更密集一些。

这些Triangular window被称作Mel-Filters。被Mel-Filters过滤之后的Spectrum,被称作Mel-Spectrum

对Mel-Spectrum执行Cepstrum Analysis,就得到了Mel-Frequency Cepstral Coefficients,也就是MFCC。

上图是MFCC的计算流程。

除了MFCC之外,delta MFCC和double-delta MFCC也是常用的特征。他们的计算过程如下所示:

可见,delta MFCC和double-delta MFCC,实际上就是MFCC的一阶差分和二阶差分。

在实际中使用的语音特征,往往是各种特征的组合。比如,常用的39维MFCC特征,其组成如下:

12 MFCC feature

1 energy feature

12 delta MFCC features

12 double-delta MFCC features

1 delta energy feature

1 double-delta energy feature

其他的语音特征还有:

  • Amplitude Envelope
  • Root-Mean-Square Energy
  • Zero Crossing Rate

https://mp.weixin.qq.com/s/KFBINcap3dIOVPjpBEbj6w

浅谈MFCC/HMM/GMM/EM/LM

https://mp.weixin.qq.com/s/LI-jGrG19IZH9QY9cjqQ3A

音频时域特征的提取

计算能量谱

energy的计算比较简单,无论是如上图的时域能量统计,还是在DFT之后进行频域能量统计都是可以的。参见《数学狂想曲(一)》。

需要注意的是,频域能量包含了实部能量+虚部能量。

Discrete Cosine Transform

离散傅立叶变换需要进行复数运算,尽管有FFT可以提高运算速度,但在图像编码、特别是在实时处理中非常不便。离散傅立叶变换在实际的图像通信系统中很少使用,但它具有理论的指导意义。

根据离散傅立叶变换的性质,实偶函数的傅立叶变换只含实的余弦项,因此构造了一种实数域的变换——离散余弦变换(DCT)。

通过研究发现,DCT除了具有一般的正交变换性质外,其变换阵的基向量很近似于Toeplitz矩阵的特征向量,后者体现了人类的语言、图像信号的相关特性。因此,在对语音、图像信号变换的确定的变换矩阵正交变换中,DCT变换被认为是一种准最佳变换。

相对应的还有IDCT。

DCT还有一个特点是,对于一般的语音信号,这一步的结果的前几个系数特别大,后面的系数比较小,可以忽略。比如Mel-Filters一般取40个三角形,所以DCT的结果也是40个点;实际中,一般仅保留前12~20个,这就进一步压缩了数据。

类似的,还有Discrete Sine Transform,它和DCT的区别在于:DST用于实奇对称数据,而DCT用于实偶对称数据。这里的对称指的是采样对称,而非物理数值上的对称。

除此之外,针对人耳的听觉特性,还有Constant-Q transform。它与STFT的公式基本相同,差别在于后者的filter的中心频点间隔均匀,而前者的间隔越往高频越稀疏:

δfk=21/n⋅δfk−1=(21/n)k⋅δfmin

上式中的fk即为filter的中心频点。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK