語音信號的采集:
語音信號計算機中是采用PCM編碼按時間序列保存的一連串數(shù)據(jù)搓劫。計算機中最原始語音文件是wav抚垃,可以通過各種錄音軟件錄制莫鸭,錄制是包括三個參數(shù)
fs:采樣率 8000Hz 115200Hz 等等吏祸,代表每1秒保存的語音數(shù)據(jù)點數(shù)
bits:每個采樣點用幾個二進制保存
通道:很多音頻都有左右2個通道揭糕,在語音識別中通常有一個通道的數(shù)據(jù)就夠了竞端。
語音信號預處理:
分幀:
首先說說我們做信號處理的目的----獲得個頻率成分的分布屎即,而實現(xiàn)的該功能的數(shù)學方法就是FFT ,F(xiàn)FT要求輸入信號時平穩(wěn)的事富,語音作為非平穩(wěn)信號要實現(xiàn)就要通過分幀
這里分幀就涉及到幀長技俐,對于幀長要滿足的條件有兩點:
1、正常語速下统台,音素的持續(xù)時間大約是 50~200 毫秒雕擂,所以幀長一般取為小于 50 毫秒。
2贱勃、語音的基頻井赌,男聲在 100 赫茲左右,女聲在 200 赫茲左右贵扰,換算成周期就是 10 毫秒和 5 毫秒仇穗。既然一幀要包含多個周期,所以一般取至少 20 毫秒戚绕。
綜上幀長一般取為 20 ~ 50 毫秒纹坐,20、25舞丛、30耘子、40、50 都是比較常用的數(shù)值球切,以上摘自知乎邏輯上很合理的解釋拴还,我通常聽見的是(10-30ms)
一幀的數(shù)據(jù)長度 N=幀時間長度/T=幀時間長度(單位秒)*fs(單位Hz)?
加窗:
加窗的目的是讓一幀信號的幅度在兩端漸變到 0。漸變對傅里葉變換有好處欧聘,可以提高變換結果(即頻譜)的分辨率片林,具體的數(shù)學就不講了
加窗的代價是一幀信號兩端的部分被削弱了,沒有像中央的部分那樣得到重視。彌補的辦法是费封,幀不要背靠背地截取焕妙,而是相互重疊一部分。相鄰兩幀的起始位置的時間差叫做幀移弓摘,常見的取法幀移與幀長的比值一般取為0~1/2焚鹊。
通常加窗之后我們可以通過FFT變化實現(xiàn)特征數(shù)的降維以及提取出比原始語音更具表征力的特征
以上可以理解為若干幀對應一個音素,若干音素對應一個單詞韧献,如果我們想要識別對應的單詞狀態(tài)末患,我們只要知道對應的幀狀態(tài)就行,用計算機能識別的方式最簡單的就是概率匹配锤窑,這些概率我們就可以通過聲學模型獲得璧针,所以要做的就是通過訓練獲得合適的模型參數(shù)以擬合好的匹配效果。
GMM+HMM算法
語音識別就分為三步:第一步渊啰,把幀識別成狀態(tài)(難點)探橱。第二步,把狀態(tài)組合成音素绘证。第三步隧膏,把音素組合成單詞。第一步可以當做gmm做的嚷那,后面都是hmm做的胞枕。
聲學模型:描述一種語言的基本單位被稱為音素Phoneme,例如BRYAN這個詞就可以看做是由B, R, AY, AX, N五個音素構成的魏宽。英語中貌似有50多個音素曲稼,可以用50幾個HMM state來表示這些音素,這種表示方法就是context independent模型中的單音素monophone模式湖员。然而語音沒有圖像識別那么簡單,因為我們再說話的時候很多發(fā)音都是連在一起的瑞驱,很難區(qū)分娘摔,所以一般用左中右三個HMM state來描述一個音素,也就是說BRYAN這個詞中的R音素就變成了用B-R, R, R-AY三個HMM state來表示唤反。這樣BRYAN這個詞根據(jù)上下文就需要15個state了凳寺,根據(jù)所有單詞的上下文總共大概需要幾千個HMM state,這種方式屬于context dependent模型中的三音素triphone模式彤侍。這個HMM state的個數(shù)在各家語音識別系統(tǒng)中都不一樣肠缨,是一個需要調的參數(shù)。所以聲學模型就是如何設置HMM state盏阶,對于信號中的每一frame抽怎樣的特征晒奕,然后用訓練什么分類器。
可以理解為整個GMM+HMM網(wǎng)絡其實主要是為了HMM網(wǎng)絡服務的,為什么這么說脑慧,先說說HMM對于語音識別需要解決的問題魄眉,比如把一系列MFCC特征正確的識別成對應HMM state 系列。這個過程涉及兩個概率需要學習闷袒,一是把當前frame的特征識別為這個state的概率坑律,也就是通常HMM中說的Likelihood---這里指計算層面(也是GMM中的mean vector 和covariance matrix ),即GMM網(wǎng)絡是為了獲得當前state狀態(tài)概率的囊骤,二是上個state轉化為這個state的概率也就是狀態(tài)轉移概率Transition probabilities晃择,這個過程是HMM中說的?Decoding---這里指計算層面。一個序列轉化為另一個序列理論上有指數(shù)級種轉化方式也物,所以每一個frame只取概率最高的那個state宫屠,這樣的路線選擇方法被稱為Viterbi 方法。
下面結合實際語音輸入講講整個過程
首先我們在訓練階段焦除,我們是知道這段語音所表示的句子吧激况。我們通過句子,然后分詞膘魄,然后分成每個音素乌逐,在隱馬爾科夫(HMM)模型中一般用3-5個上述的單元表示一個音素。簡單的理解就是我們每個音素的均值和方差矩陣知道创葡,通過我們的句子我們也知道每個音素間的轉移概率矩陣浙踢。當然,這些是HMM里的事情灿渴。提取特征后的第一步就完成了洛波,簡單的說就是為了擬合多維高斯函數(shù)。
一開始骚露,我們設置每個音素的均值和方差分別為0和1蹬挤,轉移概率矩陣在htk里也是可以設置兩頭小中間大,這個對于5個狀態(tài)的hmm棘幸,即每個音素分為5個狀態(tài)焰扳。這步就是初始化hmm。
然后误续,生成各個音素的hmm吨悍。這個可以根據(jù)發(fā)音字典和原始的hmm來生成。
最后蹋嵌,我們根據(jù)訓練數(shù)據(jù)來訓練音素級的hmm育瓜。這里用到hmm的三大問題。通過訓練栽烂,我們會得到三個參數(shù):初始狀態(tài)概率分布π躏仇、隱含狀態(tài)序列的轉移矩陣A(就是某個狀態(tài)轉移到另一個狀態(tài)的概率觀察序列中的這個均值或者方差的概率)和某個隱含狀態(tài)下輸出觀察值的概率分布B(也就是某個隱含狀態(tài)下對應于)
整合大致過程如上恋脚,想了解具體推算過程參考