DTW

Dynamic Time Warping是Vintsiuk于1968年提出的算法。

Taras Klymovych Vintsiuk,1939~2012,乌克兰科学家,毕业于Kyiv Polytechnic Institute。模式识别专家,语音识别领域的奠基人之一。

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

图1

如上图所示,因为语音信号具有相当大的随机性,即使同一个人在不同时刻发同一个音,也不可能具有完全的时间长度。而且同一个单词内的不同音素的发音速度也不同,比如有的人会把“A”这个音拖得很长,或者把“i”发的很短。在这些复杂情况下,使用传统的欧几里得距离,无法有效地求得两个时间序列之间的距离(或者相似性)。

回到上面的图。如果我们将两个序列中相关联的点,用上图中的虚线连接的话,就会发现这两个序列实际上是很相似的。

那么如何用数学的方式描述上述DTW算法的思想呢?

假设现在有一个标准的参考模板R,是一个M维的向量,即R={R(1),R(2)R(M)}R={R(1),R(2),⋯,R(M)},每个分量可以是一个数或者是一个更小的向量。现在有一个才测试的模板T,是一个N维向量,即T={T(1),T(2)T(N)}T={T(1),T(2),⋯,T(N)}同样每个分量可以是一个数或者是一个更小的向量,注意M不一定等于N,但是每个分量的维数应该相同。

然后,将两个序列二维展开得到下图:

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

这样,两个序列中点与点之间的关联关系,就可以用这个二维矩阵W来表述。比如,可以用W(i,j)表示第1个序列中的第i个点和第2个序列中的第j个点相对应。所有这样的W(i,j)最终构成了上图中的曲线。这条曲线也被称作归整路径(Warp Path)。

显然,这个归整路径不是随意选择的,它需要满足以下几个约束:

1)边界条件w1=(1,1)w1=(1,1)wk=(m,n)wk=(m,n)。任何一种语音的发音快慢都有可能变化,但是其各部分的先后次序不可能改变,因此所选的路径必定是从左下角出发,在右上角结束。

2)连续性:如果wk1=(a,b)wk−1=(a′,b′),那么对于路径的下一个点wk=(a,b)wk=(a,b)需要满足(aa)1(a−a′)≤1(bb)1(b−b′)≤1。也就是不可能跨过某个点去匹配,只能和自己相邻的点对齐。这样可以保证R和T中的每个坐标都在W中出现。

3)单调性:如果wk1=(a,b)wk−1=(a′,b′),那么对于路径的下一个点wk=(a,b)wk=(a,b)需要满足0(aa)0≤(a−a′)0(bb)0≤(b−b′)。这限制W上面的点必须是随着时间单调进行的。以保证图1中的虚线不会相交。

结合连续性和单调性约束,每一个格点的路径就只有三个方向了。例如如果路径已经通过了格点(i,j)(i,j),那么下一个通过的格点只可能是下列三种情况之一:(i+1,j)(i+1,j)(i,j+1)(i,j+1)或者(i+1,j+1)(i+1,j+1)

归整路径实际上就是满足上述约束的所有路径中,cumulative distances最小的那条路径,即:

D(i,j)=Dist(i,j)+min(D(i1,j),D(i,j1),D(i1,j1)),D(1,1)=0D(i,j)=Dist(i,j)+min(D(i−1,j),D(i,j−1),D(i−1,j−1)),D(1,1)=0

这里的距离可以使用欧氏距离,也可以使用马氏距离。

DTW实例的具体计算过程可参见:

http://www.cnblogs.com/tornadomeet/archive/2012/03/23/2413363.html

从一个实例中学习DTW算法

从中可以看出,DTW实际上是一个动态规划问题。

更一般的,DTW也可用于计算两个离散的序列(不一定要与时间有关)的相似度。和《机器学习(二十二)》的EMD距离相比,DTW距离能够保持序列的形状信息

除此之外,我们还可以增加别的约束:

全局路径窗口(Warping Window)ϕx(s)ϕy(s)r∣ϕx(s)−ϕy(s)∣≤r。比较好的匹配路径往往在对角线附近,所以我们可以只考虑在对角线附近的一个区域寻找合适路径(r就是这个区域的宽度);

斜率约束(Slope Constrain)ϕx(m)ϕx(n)ϕy(m)ϕy(n)pϕx(m)−ϕx(n)ϕy(m)−ϕy(n)≤pϕy(m)ϕy(n)ϕx(m)ϕx(n)qϕy(m)−ϕy(n)ϕx(m)−ϕx(n)≤q,这个可以看做是局部的Warping Window,用于避免路径太过平缓或陡峭,导致短的序列匹配到太长的序列或者太长的序列匹配到太短的序列。

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

上图是两种常见的约束搜索空间的方法。

DTW的缺点:

1.运算量大;

2.识别性能过分依赖于端点检测;

3.太依赖于说话人的原来发音;

4.不能对样本作动态训练;

5.没有充分利用语音信号的时序动态特性;

DTW适合于特定人基元较小的场合,多用于孤立词识别;

参考:

http://blog.csdn.net/zouxy09/article/details/9140207

动态时间规整(DTW)

https://blog.csdn.net/raym0ndkwan/article/details/45614813

DTW动态时间规整

http://www.cnblogs.com/luxiaoxun/archive/2013/05/09/3069036.html

Dynamic Time Warping动态时间规整算法

https://zhuanlan.zhihu.com/p/39450321

时间序列的搜索

Spectrogram

Window function

Fourier transform研究的是整个时间域和频率域的关系。但实际的信号处理过程,不可能对无限长的信号进行测量和运算,而是取其有限的时间片段进行分析。做法是从信号中截取一个时间片段,然后用截取的信号时间片段进行周期延拓处理,得到虚拟的无限长的信号,然后就可以对信号进行FT、相关分析等数学处理。

无限长的信号被截断以后,其频谱发生了畸变,原来集中在f(0)处的能量被分散到两个较宽的频带中去了(这种现象称之为频谱能量泄漏)。

为了减少频谱能量泄漏,可采用不同的截取函数对信号进行截断,这些截断函数称为Window function。

常用的Window function有:Hann window、Rectangular window、Triangular window、Hamming window、Gaussian window等。

不同的窗函数对信号频谱的影响是不一样的。例如,Rectangular window主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低;Blackman window主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高。

对Window function更详细的叙述参见:

https://en.wikipedia.org/wiki/Window_function

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πknN1),0nN1w(n)=∑k=0K(−1)kakcos⁡(2πknN−1),0≤n≤N−1

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

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

这类Window function有好几个特例:

Hann window:

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

Hamming window:

w(n)=0.540.46cos(2πnN1)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

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

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

Spectrogram

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

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

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

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

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

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

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

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

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

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

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

Cepstrum Analysis

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

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

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

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

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

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

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

语音识别(四)——DTW, Spectrogram, Cepstrum Analysis-编程之家

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