日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

语音识别之DTW算法的应用(Python)

發布時間:2023/12/9 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 语音识别之DTW算法的应用(Python) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

本文目的是探究語音識別中DTW算法的應用,本人在相關算法中加入了自己的理解并對實時識別進行了擴展。

代碼鏈接:基于Python的智能家居語言識別模擬系統

注意:在運行之前,需要修改代碼os.chdir()中的絕對路徑。

1? 設計任務及要求

設計高準確率的連續語音識別系統。本實驗模擬智能家居聲控系統,對使用者的語音進行錄制與識別,得到對應的命令詞。10個命令詞為:開燈、關燈、播放音樂、關閉音樂、打開空調、關閉空調、打開電視、關閉電視、開始掃地、停止掃地。

2? 引言

語音識別以語音為研究對象,是語音信號處理的一個重要研究方向,也是語音信號處理的一個基本問題。是模式識別的一個分支,涉及到生理學,心理學,語言學,計算機科學,以及信號處理等諸多領域,其最終實現的是人機交互,同時也在其他領域發揮著重要的作用,如導航,輔助機器人技術,移動設備服務等多個領域。

語音識別系統的分類方式及依據是根據說話人說話方式的要求,可以分為孤立字(詞)語音識別系統,連接字語音識別系統以及連續語音識別系統,本文建立的系統為連續語音識別系統。不同的語音識別系統,盡管設計和實現的細節不同,但所采用的技術都是相似的,一個典型的語音識別系統如圖1所示,主要包括預處理,特征提取和訓練識別網絡。

圖1 語音識別系統組成部分

本系統用于模擬智能家居的聲控部分,對10個命令詞進行識別。系統首先對原始語音進行預加重、分幀、加窗等預處理操作,提取語音對應的特征參數。在得到了特征參數的基礎上,采用不同的方法進行識別:(1).采用模板匹配技術DTW算法進行進行時間的對準和相似度度量. (2).利用GMM-HMM建立聲學模型,最終完成識別。

3? 實驗原理及應用

3.1 預處理

在信號處理系統中,對原始信號進行預處理是必要的這樣可以獲得一個比較理想的處理對象。在語音識別系統中,語音信號的預處理主要包括分幀,預加重及端點檢測。

3.1.1? 分幀

語音信號是一種典型的非平穩信號,它的均值函數u(x)和自相關函數R(xl,x2)都隨時間而發生較大的變化。但研究發現,語音信號在短時間內頻譜特性保持平穩,即具有短時平穩特性。因此,在實際處理時可以將語音信號分成很小的時間段(約10~30ms),稱之為“幀”,作為語音信號處理的最小單位,幀與幀的非重疊部分稱為幀移,而將語音信號分成若干幀的過程稱為分幀。分幀小能清楚地描繪語音信號的時變特征但計算量大;分幀大能減少計算量但相鄰幀間變化不大,容易丟失信號特征。一般取幀長20ms,幀移為幀長的1/3~1/2。

在本系統中幀長25ms,幀移10ms。

3.1.2? 預加重

對于語音信號的頻譜,通常是頻率越高幅值越小,在語音信號的頻率增加兩倍時,其功率譜的幅度下降6dB。因此必須對高頻進行加重處理,一般是將語音信號通過一個一階高通濾波器1-0.9375z-1,即為預加重濾波器。其目的是濾除低頻干擾,特別是50Hz到60Hz的工頻干擾,將對語音識別更為有用的高頻部分進行頻譜提升。在計算短時能量之前將語音信號通過預加重濾波器還可起到消除直流漂移、抑制隨機噪聲和提升清音部分能量的效果。

3.1.3? 端點檢測

語音信號起止點的判別是任何一個語音識別系統中必不可少的組成部分。因為只有準確的找出語音段的起始點和終止點,才能得到真正要分析的語言信號。為達到提取人聲部分的語音段,本實驗采用雙門限法進行端點檢測。該算法使用了三個閾值(包括兩個短時能量閾值和一個過零率閾值)。

短時能量計算方法:

這里使用矩形窗w(m),對于每一個要計算的幀而言,它是1,因此這里可以忽略掉,因此,每一幀采樣點平方和對應的就是該幀的短時能量。

短時過零率計算方法:

其中,sgn函數:

w(m)函數為:

本實驗采用的端點檢測算法具體分為三步:

圖2 雙門限法示意圖

第一步:取一個較高的短時能量作為閾值MH,首先分出語音中的濁音部分(如圖2,A1-A2區間)。本實驗的MH,取值為所有幀的短時能量的平均數的一半(平均數偏大)。

第二步:取一個較低的能量閾值ML,從A1-A2區間,向兩端進行搜索,將較低能量段的語音部分也加入到語音段,進一步擴大語音段范圍(如圖所示,B1-B2區間)。本實驗中,首先計算語音前一段的靜音部分的能量均值(前5幀),本文將靜音部分的能量均值和MH相加的一半作為ML。

第三步:使用短時過零率閾值為Zs。由于語音的兩端部分是輔音(也就是清音部分),也是語音中的一部分,但是輔音的能量與靜音部分的能量一樣低,但是過零率比靜音部分高出很多。為了區分開二者,將利用短時能量區分完的語音段繼續向兩端進行搜索,短時過零率大于3倍Zs的部分,則認為是語音的清音部分。將該部分加入語言段,就是求得的語音段(如圖2,C1-C2區間)。

3.2 特征提取

人的聽覺系統是一個特殊的非線性系統,它響應不同頻率信號的靈敏度是不同的,基本上是一個對數的關系。近年來,一種能夠比較充分利用人耳的這種特殊感知特性的系數得到了廣泛應用,這就是Mel尺度倒譜系數(Mel-scaled Cepstrum Coefficients,簡稱MFCC)。

MFCC系數的計算流程(圖3)如下:

  • 先對語音進行預加重、分幀和加窗;
  • 對每一個短時分析窗,通過FFT得到對應的頻譜;
  • 將上面的頻譜通過Mel濾波器組得到Mel頻譜;
  • 在Mel頻譜上面進行倒譜分析(取對數,做逆變換,實際逆變換一般是通過DCT離散余弦變換來實現),獲得Mel頻率倒譜系數MFCC,這個MFCC就是這幀語音的特征;
  • 圖3 MFCC系數計算流程圖

    本實驗采用 HTK工具包中的Hcopy命令進行FFCC特征提取,存儲在.mfc文件中。提取的特征39維MFCC特征。包括12維dct系數,能量特征,一階差分和二階差分等。提取算法如下:

    首先進行預加重,然后進行分幀,加窗,然后進行快速傅里葉變換,將它轉換為頻域上的能量分布;將能量譜通過一組Mel尺度的三角形濾波器組,對頻譜進行平滑化,并消除諧波的作用,突顯原先語音的共振峰;計算每個濾波器輸出的對數能量,經離散余弦變換(DCT)得到MFCC系數;然后計算對數能量;最后提取動態差分參數(包括一階差分和二階差分等)

    圖4為Hcopy命令參數設置,圖5為一段語音信號的第一幀MFCC特征:

    圖4 Hcopy命令參數設置 圖5 語音信號單幀MFCC特征值

    3.3 DTW語音匹配

    由于即使同一個人不同時間發出同一個聲音,也不可能具有相同的長度,因此就需要用到動態時間歸正(DTW)算法。把時間歸正和距離測度計算結合起來的一種非線性歸正技術。DTW 本質上是一個簡單的動態規劃算法,是用來計算兩個維數不同的向量之間的相似度的問題,即計算向量 M1 和 M2 的最短距離。是一種非常常用的語音匹配算法。

    3.3.1? 算法基本思想

    對兩個不同維數的語音向量 m1 和 m2進行匹配(m1 和 m2 的每一維也是一個向量,是語音每一幀的特征值,這里利用的是 MFCC 特征)。設兩個向量的長度為 M1 和 M2,則距離可以表示為:

    那么,就可以這樣進行匹配:

  • 每一條從(1,1)到(M1,M2)路徑都有一個累計距離稱為路徑的代價;

  • 每一條路徑都代表一種對齊情況;

  • 代價最小的路徑就是所求的對準路徑。

  • 這樣就可以將對準問題,或者說將求兩個語音段的相似度問題,轉化成了搜索代價最小的最優路徑問題,圖6為其中一條路徑。

    6 11)到(M1,M2)路徑其中一條路徑

    在搜索過程中,往往要進行路徑的限制,如圖7,(i,j)點只能由相鄰的三點到達:

    7 路徑限制

    在此限制條件下,可以將全局最優化問題轉化為許多局部最優化問題一步一步地來求解,這就動態規劃(Dynamic Programming,簡稱DP )的思想。

    3.3.2? 算法基本步驟

    1. 定義一個代價函數 , 表示從起始點(1,1)出發,到達(i,j)點最小代價路徑的累計距離。有:

    2. 要計算兩個向量之間的最短距離,可以表示為:

    依次類推,可由更低一層的代價函數計算得到:

    3. 因此,可以從 ?開始計算,遞推出(1,1)到(i,j)的路徑。遞推過程中定義加權系數wn,加權系數的取值與局部路徑有關:

    4. 為了減少計算量,可以定義平行四邊形區域約束,如圖8:

    8 平行四邊形路徑限制

    3? 實驗結果(DTW)

    3.1 設計實驗任務及過程

    本實驗旨在模擬智能家居聲控系統,一共錄制了6組語音,每組 10 個命令詞,一共 60 段語音。通過實驗,取出2組作為模板。剩余的 40 個語音命令作為測試樣例,測試 語音識別系統的精確度。

    實驗過程如下:

  • 首先錄制 60 個語音,采樣頻率為16kHz,存儲在 RecordedVoice 文件夾下;
  • 利用實驗一的代碼對錄制的語音進行端點檢測,存儲在 RecordedVoice-EndPointed 文件夾下;
  • 對端點檢測后的語音命令進行操作,利用 HTK 中的 HCopy 工具提取出 MFCC 特征,存放在 xxx.mfc 文件中,放在 MFCC-EndPointedVoice 文件夾下;
  • 在代碼中取出所有語音命令的 MFCC 特征,區分開模板和測試樣例。根據 DTW 算法,對 40 個測試樣例進行靜態語音匹配,檢測正確率;
  • 在代碼中錄音,然后保存錄音的文件,存放在 RecordedVoice-RealTime 中。利用端點檢測的代碼對其進行端點檢測,保存在 RecordedVoice-RealTime 中;
  • 在代碼中動態調用 HCopy 程序,對實時錄的語音進行 MFCC 特征提取,然后進行語音匹配,檢測是否與對應的命令匹配上;
  • 3.2 實驗結果

    本次測試的4組數據,40段語音,識別率達到95%,結果如圖9。該結果表明,DTW算法的語音識別率十分理想,最后兩端語音識別失敗的主要原因是,錄音者的聲調、響度和速度與模板差別巨大所造成的。因此,DTW的識別率受到模板數量的限制,因此在實際的智能家居聲控系統應用中,需要采集每個家庭成員盡量多的語音作為模板,以提高系統識別率。

    圖9?前兩組段語音識別結果

    另外,本實驗還設計了簡潔的GUI界面,用于實時對使用者的語音信號進行采集和識別,更好的模擬智能家居聲控系統。GUI界面如圖10:

    圖10 語音識別GUI界面

    4? 總結

    在使用DWT匹配算法過程中,模板的好壞直接影響了整個識別系統的準確率,因此我們通過多組數據對比,選取了最優的模板,便能夠達到高識別率。

    參考:https://blog.csdn.net/rocketeerLi/article/details/84638701

    總結

    以上是生活随笔為你收集整理的语音识别之DTW算法的应用(Python)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。