單位要做喚醒,同事扔來了一個(gè)MFCC-DTW的就完了,大致研究了一下,下面內(nèi)容摘自各博客和對(duì)照代碼的總結(jié)。
問題描述
DTW主要解決兩段語音的相似性問題:當(dāng)數(shù)據(jù)在時(shí)間線上不對(duì)齊的時(shí)候,使用傳統(tǒng)的匹配方法,是無法使用傳統(tǒng)的全局匹配度量法的。該算法基于動(dòng)態(tài)規(guī)劃(DP)的思想,解決了發(fā)音長(zhǎng)短不一的模板匹配問題,是語音識(shí)別中出現(xiàn)較早、較為經(jīng)典的一種算法,用于孤立詞識(shí)別。
算法簡(jiǎn)介
給定兩個(gè)時(shí)間序列,長(zhǎng)度分別為n和m:
由于m和n不等長(zhǎng),因此需要對(duì)其兩組序列,但是由于不清楚兩組數(shù)據(jù)的局部縮放情況,所以不能整段縮放(對(duì)應(yīng)后面矩陣應(yīng)該是一條直線),因此需要采用動(dòng)態(tài)規(guī)劃的方法(dynamic programming)
動(dòng)態(tài)規(guī)劃的核心思想可以用一幅圖來解釋
構(gòu)造一個(gè)距離矩陣矩陣元素表示兩個(gè)序列對(duì)應(yīng)元素的距離
,矩陣元素就表示這兩個(gè)點(diǎn)之間的距離,或者說是相似度,距離越小,相似度越高。
而動(dòng)態(tài)規(guī)劃的主要目的,就是需要一條最優(yōu)路徑,使兩段語音的累積路徑和最小,可以得到的兩段語音的相似性越高。用公式描述即:
其中,是距離,
是規(guī)劃的路徑長(zhǎng)度。
滿足的約束條件:
- 1)邊界條件:
和
。任何一種語音的發(fā)音快慢都有可能變化,但是其各部分的先后次序不可能改變,因此所選的路徑必定是從左下角出發(fā),在右上角結(jié)束。
- 2)連續(xù)性:如果
,那么對(duì)于路徑的下一個(gè)點(diǎn)
需要滿足
和
。也就是不可能跨過某個(gè)點(diǎn)去匹配,只能和自己相鄰的點(diǎn)對(duì)齊。這樣可以保證Q和C中的每個(gè)坐標(biāo)都在W中出現(xiàn)。
- 3)單調(diào)性:如果
,那么對(duì)于路徑的下一個(gè)點(diǎn)
需要滿足
和
。這限制W上面的點(diǎn)必須是隨著時(shí)間單調(diào)進(jìn)行的。以保證圖B中的虛線不會(huì)相交。
定義累積距離:
其他位置的元素的值則需要逐步計(jì)算,具體值的計(jì)算方法為
求γ最小的過程即為尋找最優(yōu)路徑的過程
參考博客1
參考博客2