语音识别(四)——DTW, Spectrogram, Cepstrum Analysis
DTW
Dynamic Time Warping是Vintsiuk于1968年提出的算法。
Taras Klymovych Vintsiuk,1939~2012,烏克蘭科學家,畢業于Kyiv Polytechnic Institute。模式識別專家,語音識別領域的奠基人之一。
圖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,但是每個分量的維數應該相同。
然后,將兩個序列二維展開得到下圖:
這樣,兩個序列中點與點之間的關聯關系,就可以用這個二維矩陣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)連續性:如果wk?1=(a′,b′)wk?1=(a′,b′),那么對于路徑的下一個點wk=(a,b)wk=(a,b)需要滿足(a?a′)≤1(a?a′)≤1和(b?b′)≤1(b?b′)≤1。也就是不可能跨過某個點去匹配,只能和自己相鄰的點對齊。這樣可以保證R和T中的每個坐標都在W中出現。
3)單調性:如果wk?1=(a′,b′)wk?1=(a′,b′),那么對于路徑的下一個點wk=(a,b)wk=(a,b)需要滿足0≤(a?a′)0≤(a?a′)和0≤(b?b′)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(i?1,j),D(i,j?1),D(i?1,j?1)),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的缺點:
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πknN?1),0≤n≤N?1w(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?1w(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)w(n)=0.5[1?cos?(2πnN?1)]=sin2?(πnN?1)
Hamming window:
w(n)=0.54?0.46?cos(2πnN?1)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?τ)e?jω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是一種時域方法,作為信號處理自然少不了頻域方法。這里我們先來了解一個叫聲譜圖的東西。
這段語音被分為很多幀,每幀語音都對應于一個頻譜(通過短時FFT計算),頻譜表示頻率與能量的關系。在實際使用中,頻譜圖有三種,即線性振幅譜、對數振幅譜、自功率譜(對數振幅譜中各譜線的振幅都作了對數計算,所以其縱坐標的單位是dB(分貝)。這個變換的目的是使那些振幅較低的成分相對高振幅成分得以拉高,以便觀察掩蓋在低幅噪聲中的周期信號)。
我們先將其中一幀語音的頻譜通過坐標表示出來。
再將左邊的頻譜旋轉90度。
然后把這些幅度映射到一個灰度級表示的直方圖。0表示白色,255表示黑色。幅度值越大,相應的區域越黑。
這樣我們會得到一個隨著時間變化的頻譜圖,這個就是描述語音信號的spectrogram聲譜圖。
Cepstrum Analysis
上圖是一個語音的頻譜圖。峰值就表示語音的主要頻率成分,我們把這些峰值稱為共振峰(formants),而共振峰就是攜帶了聲音的辨識屬性(就是個人身份證一樣)。所以它特別重要。用它就可以識別不同的聲音。
既然它那么重要,那我們就是需要把它提取出來!我們要提取的不僅僅是共振峰的位置,還得提取它們轉變的過程。所以我們提取的是頻譜的包絡(Spectral Envelope)。這包絡就是一條連接這些共振峰點的平滑曲線。
原始的頻譜由兩部分組成:包絡和頻譜的細節。這里用到的是對數頻譜,所以單位是dB。
怎么把他們分離開呢?也就是,怎么在給定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]呢?
為了達到這個目標,我們需要Play a Mathematical Trick。這個Trick是什么呢?就是對頻譜做FFT。
總結
以上是生活随笔為你收集整理的语音识别(四)——DTW, Spectrogram, Cepstrum Analysis的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快手最近浏览记录在哪里
- 下一篇: 量化交易入门先看这几种常见的策略分类