DTW 動(dòng)態(tài)時(shí)間規(guī)整

單位要做喚醒,同事扔來了一個(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:
Q = q_1, q_2,…,q_i,…, q_n ;
C = c_1, c_2,…, c_j,…, c_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è)距離矩陣矩陣元素(i,j)表示兩個(gè)序列對(duì)應(yīng)元素的距離d( q_i,c_j),矩陣元素就表示這兩個(gè)點(diǎn)之間的距離,或者說是相似度,距離越小,相似度越高。
而動(dòng)態(tài)規(guī)劃的主要目的,就是需要一條最優(yōu)路徑,使兩段語音的累積路徑和最小,可以得到的兩段語音的相似性越高。用公式描述即:
DTW(Q,C ) = min{( \frac {\sum_{k= 1}^{K}W_k}{ K})}
其中,W_k是距離, K是規(guī)劃的路徑長(zhǎng)度。
W_k滿足的約束條件:

  • 1)邊界條件:w_1=(1, 1)w_K=(m, n)。任何一種語音的發(fā)音快慢都有可能變化,但是其各部分的先后次序不可能改變,因此所選的路徑必定是從左下角出發(fā),在右上角結(jié)束。
  • 2)連續(xù)性:如果w_k-1= (a’, b’),那么對(duì)于路徑的下一個(gè)點(diǎn)w_k=(a, b)需要滿足 (a-a’) \leq 1(b-b’)\leq 1。也就是不可能跨過某個(gè)點(diǎn)去匹配,只能和自己相鄰的點(diǎn)對(duì)齊。這樣可以保證Q和C中的每個(gè)坐標(biāo)都在W中出現(xiàn)。
  • 3)單調(diào)性:如果w_k-1= (a’, b’),那么對(duì)于路徑的下一個(gè)點(diǎn)w_k=(a, b)需要滿足0\leq (a-a’)0\leq (b-b’)。這限制W上面的點(diǎn)必須是隨著時(shí)間單調(diào)進(jìn)行的。以保證圖B中的虛線不會(huì)相交。

斜著的是最小的路徑

定義累積距離:
其他位置的元素的值則需要逐步計(jì)算,具體值的計(jì)算方法為

D[(n, m)]=d[T(n),R(m)]+min{D(n-1,m),D(n-1,m-1),D(n,m-1)}

γ(i,j)=d(q,c)+Min\{M_c(i?1,j?1),M_c(i?1,j),M_c(i,j?1)\}
求γ最小的過程即為尋找最優(yōu)路徑的過程

image

參考博客1
參考博客2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容