語音識別系統

語音識別系統


本系統旨在構建一個語音識別系統,實現電腦自動將人類的語音內容識別出來。


源代碼(MATLAB版)

應各位讀者的需求,現把該語音識別系統的源代碼(MATLAB版)公佈如下:
下載地址爲:語音識別系統


原理

系統框架圖 :

系統框架圖
圖1  系統框架圖

如上面的系統框架圖所示,語音識別系統的實現原理和流程是:

  1. 訓練流程:首先利用麥克風來採集語音信號,由於我們採集到的語音信號是通過AD模塊轉換後的,所以得到的語音信號是數字信號,接下來把聲音轉化成.wav的格式存儲在電腦的文件夾中,作爲原始的音頻信號保存下來,同時把得到的數字語音信號以及它的採樣頻率、ID和語音長度保存在數據庫中,形成一個聲音的樣本特徵庫。
  2. 測試流程:首先利用麥克風來採集語音信號,同樣地,我們得到的語音信號是數字信號,接下來把聲音轉化成.wav的格式存儲在電腦的文件夾中,作爲原始的音頻信號保存下來,然後把得到的語音信號進行分幀、濾波等預處理,進行特徵提取;最後把得到的特徵與數據庫中訓練時建立好的樣本特徵庫進行特徵匹配,識別出結果來。

步驟

1. 聲音採集

我們調用MATLAB的voicebox工具箱中的相關函數來進行語音的採集,具體的函數如下:

函數1 :
micrecorder = audiorecorder(samplingfrequency, samplingbits, 1);
函數的相關說明:
% 用於創建錄音對象
% 參數1:samplingfrequency爲採樣率
% 參數2:samplingbits爲指定採樣點的比特數
% 第三個參數nChannels(int): 1時表示單通道錄音,爲2時表示雙通道錄音,會產生立體音效果

函數2:
record(micrecorder, durata);
函數的相關說明:
%用於錄音
% 參數1:micrecorder爲錄音對象
% 參數2:durata爲錄音的持續時間

函數3:
isrecording(micrecorder);
函數的相關說明:
% 判斷是否正在錄音
% 參數1:micrecorder爲錄音對象

函數4:
getaudiodata (micrecorder);
函數的相關說明:
% 用於提取錄音數據
% 參數1:micrecorder爲錄音對象


2. 聲音的預處理

1) 語音信號分幀:

因爲語音信號在短時間內是平穩的,爲了能夠用一些比較傳統的方法來對語音信號進行分析(例如:接下來的端點檢測),我們需要得到短時的語音信號,所以就引出了語音信號分幀,我們是通過對語音信號進行加窗操作來分幀的,我們可以調用MATLAB的voicebox工具箱中的分幀函數:
f=enframe(x, len, inc);
其中:x爲要分幀的語音信號,len爲幀長,inc爲幀移。
幀長和幀移的關係如圖所示:

 幀長和幀移的關係圖
圖2   幀長和幀移的關係圖

語音信號通過分幀後,變成了若干幀短時的語音信號。

2) 端點檢測:

目的是爲了檢測出有用語音信號的開始和結束,去除靜音和噪音部分,既可以減少噪音帶來的干擾,也可以降低計算量。
端點檢測需要兩種方法結合,包括計算短時能量和短時過零率其中:
離散信號的能量計算公式如下:
離散信號的能量計算公式
短時過零率的定義如下:
短時過零率

通過短時過零率的定義可以算出語音信號的過零次數。而語音信號一般可分爲無聲段、清音段和濁音段。其中在短時能量方面:無聲 < 清音 <<濁音,在短時過零率方面:無聲 <濁音 << 清音;所以端點檢測就是首先判斷有聲還是無聲, 如果有聲,則還可以判斷是清音還是濁音。爲正確地實現端點檢測, 一般綜合利用短時能量和過零率兩個特徵,採用雙門限端點檢測法。根據信號設置三個閾值:能量閾值,TL,TH;過零率閾值ZCRL、ZCRH,,當某幀信號大於TL或者大於ZCRL時,認爲信號的開始、起點,但有可能是時間比較短的噪音,當大於TH或大於ZCRH時,則認爲是正式的語音信號,如果保持一段時間,則確認這信號即所需信號。最後我們通過雙門限端點檢測法檢測出有用語音信號的開始和結束,去除靜音和噪音部分,既可以減少噪音帶來的干擾,也可以降低計算量。

3. 特徵提取

我們知道聲音是通過聲道來產生的,聲道的結構決定了發出怎樣的聲音。聲道的結構構成包括舌頭,牙齒等。如果我們可以準確的知道這個結構,那麼我們就可以對產生的聲音的音素進行準確的描述。聲道的結構在語音短時功率譜的包絡中顯示出來。而MFCCs(梅爾頻率倒譜系數)就是一種準確描述這個包絡的一種特徵,所以我們需要把音頻信號中具有辨識性的成分提取出來,如:MFCCs(梅爾頻率倒譜系數),然後把其他多餘的信息(例如情緒之類的)去掉。

1) 倒譜分析:

圖3是一個語音的頻譜圖。峯值就表示語音的主要頻率成分,我們把這些峯值稱爲共振峯(formants),而共振峯就是攜帶了聲音的辨識屬性(就是個人身份證一樣)。所以它特別重要。用它就可以識別不同的聲音。

語音的頻譜圖
圖3  語音的頻譜圖

我們要提取的不僅僅是共振峯的位置,還得提取它們轉變的過程。所以我們提取的是頻譜的包絡(Spectral Envelope)。這包絡就是一條連接這些共振峯點的平滑曲線。如圖4所示:

這裏寫圖片描述
圖4  頻譜的包絡圖示例

將原始的頻譜由兩部分組成:包絡和頻譜的細節。這裏用到的是對數頻譜,所以單位是dB,對數可以把它的橫座標放大,有利於我們分析。那現在我們需要把這兩部分分離,這樣我們就可以得到包絡了。而事實證明我們可以把原來的頻譜看成:X[k]=H[k]E[k];只考慮幅度就是:|X[k] |=|H[k]||E[k] |;然後我們取的是對數頻譜,所以變成:log||X[k] ||= log ||H[k] ||+ log ||E[k] ||,如圖5所示:

包絡和頻譜的細節圖
圖5  包絡和頻譜的細節圖

但是我們還沒有把它們分開,我們是對log||X[k] ||= log ||H[k] ||+ log ||E[k] ||兩邊同時求逆傅里葉變換,得到x[k]=h[k]+e[k],變成了一個時域信號,然後得出h[k]屬於低頻部分,e[k]屬於高頻信號,最後通過低通濾波器來把h[k]濾出來。因爲這裏取的是對數的頻譜,所以求逆傅里葉變換後,雖然也是一個時域信號,但很明顯跟原來的時域不一樣了,我們把現在的x[k]稱爲倒譜,我們所關心的h[k]就是倒譜的低頻部分。h[k]描述了頻譜的包絡,它在語音識別中被廣泛用於描述特徵。總而言之,倒譜(cepstrum)就是一種信號的傅里葉變換經對數運算後再進行傅里葉反變換得到的譜。它的計算過程如圖6所示:

倒譜的計算過程
圖6  倒譜的計算過程

而我接下來所說的MFCC(梅爾頻率倒譜系數)就是在這個基礎上得來的,和前面一樣,要求梅爾頻率倒譜系數,我們先說一下怎麼得到梅爾頻率倒譜,Mel(梅爾)頻率分析就是基於人類聽覺感知實驗的,實驗觀測發現人耳就像一個濾波器組一樣,它只關注某些特定的頻率分量(人的聽覺對頻率是有選擇性的),把其他的頻率濾掉,而剩下的這些頻率恰好卻可以語音特徵。梅爾頻率倒譜系數(Mel Frequency Cepstrum Coefficient, MFCC)考慮到了人類的聽覺特徵,先將原來線性頻譜映射到基於聽覺感知的Mel非線性頻譜中,然後轉換到倒譜上。其轉換公式如圖7所示:

梅爾頻率倒譜系數轉換公式
圖7  梅爾頻率倒譜系數轉換公式

我們將頻譜通過一組Mel濾波器就得到Mel頻譜。公式表述就是:log X[k] = log (Mel-Spectrum)。這時候我們在log X[k]上進行倒譜分析:
1)取對數:log X[k] = log H[k] + log E[k]。
2)進行逆變換:x[k] = h[k] + e[k]。
倒譜系數h[k]就稱爲Mel頻率倒譜系數,簡稱MFCC。而實際逆變換一般是通過DCT離散餘弦變換來實現,取DCT後的第2個到第13個係數作爲MFCC係數),獲得Mel頻率倒譜系數MFCC,這個MFCC就是這幀語音的特徵;語音就可以通過一系列的倒譜向量來描述了,每個向量就是每幀的MFCC特徵向量。因爲前面都是基於一幀信號來分析的,最後形成一個特徵庫。

4. 特徵匹配與識別結果

在特徵匹配階段,我們使用了一種基於矢量量化(VQ,Vector Quantization)的特徵匹配算法。矢量量化(VQ,Vector Quantization)是一種極其重要的信號壓縮方法。VQ在語音信號處理中佔十分重要的地位。廣泛應用於語音編碼、語音識別和語音合成等領域。VQ實際上就是一種逼近。它的思想和“四捨五入”有異曲同工之妙,都是用一個和一個數最接近的整數來近似表示這個數。我們來看一個二維VQ例子,如圖8所示:

VQ劃分示例
圖8  VQ劃分示例

在這裏,我們用藍色實線將這張圖劃分爲16個區域。任意的一對數(也就是橫軸x和縱軸y組成的任意的一個座標點(x, y))都會落到上面這張圖中的某一特定區域。然後它就會被該區域的紅星的點近似。上面這些紅星點就是量化矢量,表示圖中的任意一個點都可以量化爲這16個矢量中的其中一個,因此我們可以對特徵提取階段得到的Mel頻率倒譜系數(MFCC)進行矢量量化爲K個紅星點(K可以根據實際情況進行調整)。在特徵匹配的時候,我們先把樣本特徵庫中的每一個樣本的Mel頻率倒譜系數(MFCC)都矢量量化爲圖8所示的二維VQ劃分,每個二維VQ劃分有K個區域,即有K個紅星點,每個區域由該區域的紅星點所代替;然後我們把測試樣本的Mel頻率倒譜系數(MFCC)散步在這張二維VQ劃分中,每個區域都會分佈若干個點,然後在每個區域中求每個點到紅星點的歐式距離(兩點間歐式距離的計算公式如圖9所以),再把K個區域的歐式距離進行求平均,得到平均歐式距離,若某個樣本的歐式距離最小,則該訓練樣本與測試樣本特徵最匹配,則我們可以判斷這個訓練樣本與該測試樣本屬於同一語音信號的概率最大,得出識別的結果。

兩點間歐式距離的計算公式
圖9  兩點間歐式距離的計算公式


結果演示

1) 語音識別系統界面,如圖10所示:

語音識別系統界面
圖10  語音識別系統界面

2) 點擊添加聲音按鈕,進行添加訓練樣本,總共添加三個訓練樣本,如圖11、圖12和圖13所示。

樣本1添加過程
圖11  樣本1添加過程

樣本2添加過程
圖12  樣本2添加過程

樣本3添加過程
圖13  樣本3添加過程

3) 進行測試“關茂檸”這段語音,測試結果如圖14、圖15所示:

測試結果
圖14  測試結果

測試結果
圖15  測試結果

4) 進行測試“teacher zhou”這段語音,測試結果如圖16、圖17所示:

測試結果
圖16  測試結果

測試結果
圖17  測試結果

發佈了36 篇原創文章 · 獲贊 51 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章