智慧型家居中語音識別演算法研究 語音識別之DTW演算法

2021-10-16 11:12:27 字數 3038 閱讀 5428

一、語音識別

在介紹dtw演算法之前,首先簡單了解一下語音識別的操作步驟。主要有5個步驟,具體流程如圖1所示。

圖1  語音識別流程圖

1預處理

提取真正需要分析的音訊訊號,主要包括靜音切除和聲音分幀兩部分操作。其中靜音切除部分主要採用的是語音活動檢測(voice activity detection,簡稱vad)演算法。聲音分幀主要是通過使用移動窗函式來實現的。分幀之後各幀之間一般具有一定的交疊,如圖2所示。

圖2  音訊分幀示意圖2特徵提取將聲音頻號從時域轉換到頻域,為聲學模型提供合適的特徵向量。在語音識別中主要採用的是梅爾頻率倒譜係數(mel frequency cepstrum coefficient,簡稱mfcc)。該係數考慮到人類的聽覺特徵,先將線性頻譜對映到基於聽覺感知的mel非線性頻譜中,然後轉換到倒譜上。最終把每一幀波形變成乙個包含聲音資訊的多維向量。3構建聲學模型通過對語音資料進行訓練獲得聲學模型。其中輸入變數為特徵向量,輸出變數為音素資訊。4構建語音模型通過對大量文字資訊進行訓練獲得語音模型。根據語言學相關的理論,可以計算出聲音頻號對應可能片語序列的概率。5解碼根據已有的字典,對片語序列進行解碼,得到最後可能的文字表示。其中字典指的是字或者詞與音素之間的對應關係。如果是中文,則指的是拼音和漢字的對應;如果是英文,則指的是音標與單詞的對應。二、dtw演算法基本原理dtw演算法是一種計算兩個時間序列尤其是不同長度序列相似度的動態規劃演算法,主要應用在模板匹配問題中,包括孤立詞語音識別、手勢識別、資訊檢索等。其中在孤立詞語音識別中,該演算法基於動態規劃的思想,解決了發音長短不一的模板匹配問題,是語音識別**現較早、較為經典的一種演算法。

dtw演算法主要是用滿足一定條件的時間規整函式描述測試模板和參考模板的時間對應關係,並求解兩模板匹配時累計距離最小所對應的規整函式。在實際運用中,假定乙個時間序列q為參考模板,另乙個時間序列c為測試模板。此時序列中每個點的值即為語音序列中每一幀的特徵值,即q=q1,q2,…,qi,…,qn;c=c1,c2,…,cj,…,cm。此時兩個序列間的相似度可以用它們之間對應幀的距離進行衡量,距離越小則相似度越高。通常採用歐氏距離,即:

如圖3所示,兩條實線代表兩個時間序列,實線之間的虛線則代表兩個序列之間對應相似的點。這些相似點之間距離的和,即為歸整路徑距離,在dtw中被用來衡量兩個時間序列之間的相似性。

圖3  兩個時間序列間對應關係示意圖

三、dtw演算法距離計算方法

當n=m時,可以直接計算兩個序列間的距離。但是如果n≠m,則需要考慮先進行對齊處理,再進行距離計算。

(一)線性縮放方法

最簡單的對齊方式為線性縮放,即如果n

(二)動態規劃方法

最常用的對齊方式為動態規劃(dynamic programming,簡稱dp)的方法。首先需要構造乙個n×m的矩陣網路。矩陣網路中的每乙個交叉點(i,j)即為測試模式中某一幀的交匯點。然後需要尋找一條通過此網路中若干個點的路徑w。其中路徑通過的格點即為兩個序列進行計算的幀號。即:

在進行路徑選擇時,通常需要滿足3個約束條件:1邊界條件雖然任何一種語音的發音快慢有可能變化,但是其各部分的先後次序不可能改變,因此所選的路徑必定是從左下角出發,在右上角結束。即:

2連續性不能跨過某個點去匹配,只能和自己相鄰的點對齊。即:

3單調性路徑中的點必須是隨著時間單調進行的,以保證圖3中的虛線不會相交。即:

在滿足以上三個約束條件的情況下,則每個格點對應的路徑只有三個方向。即如果路徑已經通過格點(i,j),則下乙個通過的格點只可能為(i+1,j)、(i,j+1)或(i+1,j+1)中的一種。

最終得到歸整路徑距離最短的一條路徑,即:

總的來說,dtw方法雖然運算量較大,但是技術上較為簡單,且識別正確率較高。因此即便是在連續語音識別中,也是較為主流的識別方法。除了dtw演算法之外,還有很多語音識別常用的方法,如基於引數模型的隱馬爾可夫模型(hmm)方法、基於非引數模型的向量量化(vq)方法等。這些方法在之後的文章中會進行介紹。

最後附上dtw演算法在matlab軟體中的**:

function mindist=dtw(q,c)

n=size(q,1);

m=size(c,1);

d=zeros(n,m);

for i=1:n

for j=1:m

d(i,j)=sum((q(i,:)-c(j,:)).^2);

endend

d=ones(n,m)*realmax;

d(1,1)=d(1,1);

for i=2:n

for j=1:m

d1=d(i-1,j);

if j>1

d2=d(i-1,j-1);

else

d2=realmax;

endif j>2

d3=d(i-1,j-2);

else

d3=realmax;

endd(i,j)=d(i,j)+min([d1,d2,d3]);

endend

mindist=d(n,m);

基於Arduino的智慧型家居語音識別系統設計

基於arduino的智慧型家居語音識別系統設計 前言 galileo開源資料 接下來介紹的是基於arduino的智慧型家居語音識別系統設計。設計思路起源 晚上回到家,家裡黑漆漆一片,得找到開燈的按鈕才算完事,有時候在想,如果燈泡會聽話該多好啊,有了這個想法,智慧型家居就應運而生了,我們用arduin...

智慧型雲端語音識別

2017年12月,雲 社群對外發布,從最開始的技術部落格到現在擁有多個社群產品。未來,我們一起乘風破浪,創造無限可能。今天就給大家介紹一下,恩智浦iot解決方案團隊針對低功耗 低成本的,基於人工智慧技術的語音識別,在imx rt上的軟硬體設計和實現。基於該方案能針對智慧型家居的各種裝置提供以下三種應...

命令不識別 基於微控制器語音識別的智慧型家居控制系統

在傳統的智慧型家居控制系統中,我們常採用不同次數的 滴滴 聲或不同的led狀態作為操作提示資訊,提示資訊過於簡單,不夠直接,一般需要按照操作手冊一步一步進行,而且容易出錯。另外,它的身份驗證一般只有按鍵密碼,在 遠端控制或門禁系統中容易被他人 從而導致安全隱患。而本文提供的語音介面的智慧型家居控制系...