侯昶宇
【摘要】 本文主要討論java實現(xiàn)聲音識別程序,采用mfcc參數(shù)提取以及混合高斯模型方法。使用mfcc處理聲音得到音頻的特征參數(shù)后,通過混合高斯模型建模實現(xiàn)對音頻的判別。最終通過JNI方法將windows下程序移植到Android端下運行。
【關(guān)鍵詞】 梅爾倒譜系數(shù) 混合高斯模型 目標識別
一、背景及應(yīng)用
對于聲音識別技術(shù)來說,由于不需要過多接觸以及實體間交互模式的認證,因此,它在使用中比其他種類的識別技術(shù)更加便利。而在配置過程中,由于當前多數(shù)電子數(shù)碼產(chǎn)品都已經(jīng)安裝了聲卡和話筒,因而構(gòu)架上也可以節(jié)約更多的成本。此外,對于使用環(huán)境來說,由于不需要如視頻監(jiān)控設(shè)備那樣對角度有著較高的要求,所以聲音識別系統(tǒng)的使用環(huán)境無疑也會更加的隨意和隱蔽。這些都是聲音識別系統(tǒng)與其他安防設(shè)施相比更加獨特的優(yōu)勢。
除了常見的安防系統(tǒng)應(yīng)用以外,其實日常生活中一些身份識別也采用聲音識別模式。現(xiàn)在,很多銀行都采用了聲音識別的模式進行保險箱的控制;或者在一些遠程的服務(wù)中,也采用聲音識別的模式,對客戶的身份進行定位。此外,作為智能化技術(shù)的重要一環(huán),聲音識別同樣可以用于智能家電。盡管這種全新的模式在短時間之內(nèi)普及,無論是在技術(shù)上還是理念上都會遇到不小的阻力。但從長遠來看,這種技術(shù)的出現(xiàn)以及民用化的普及,對于未來實現(xiàn)個人信息的全方位保護將起到標志性作用。
二、聲音識別程序概述
首先將音頻文件讀作浮點數(shù)數(shù)組指針采樣點,之后將數(shù)組建立混合高斯模型,再將讀取的結(jié)果和已經(jīng)保存的混合高斯模型做比較,從而得出與高斯模型中最接近的結(jié)果。
2.1高斯模型
高斯模型就是用高斯概率密度函數(shù)(正態(tài)分布曲線)精確地量化事物,將一個事物分解為若干基于高斯概率密度函數(shù)(正態(tài)分布曲線)形成的模型。
2.2統(tǒng)計學(xué)習(xí)模型
我們常用所謂統(tǒng)計模型的學(xué)習(xí)分為概率模型和非概率模型。概率模型指的是模型訓(xùn)練方式為P=(Y|X)的類型。輸入X后得到的不是具體值,而是一系列的概率,我們選取概率最大的作為判決對象。與之相對的,非概率模型的形式是y=f(x)。輸入x后得到唯一結(jié)果y,并以其作為判決對象。
2.3梅爾頻率倒譜系數(shù)
由于不同的人有不同的特異性特征,所以先采用預(yù)加重技術(shù),即插入一個高通濾波器,從而加強聲道部分特征。高通濾波的傳遞函數(shù)如下:
H(Z)=1-αZ-1
因聲音在短時間內(nèi)呈現(xiàn)平穩(wěn)性,所以之后進行分幀和加窗。同時為了避免丟失信息,相鄰幀之間還應(yīng)存在重疊。
再對分幀加窗后的各幀信號進行FFT變換得到各幀的頻譜。并對語音信號的頻譜取模平方得到語音信號的功率譜。
最終通過濾波和離散余弦變換得到的Ci即為所需提取的特征參數(shù)。
2.4混合高斯模型的建立
建立混合高斯模型,及對樣本的概率密度分布進行估計,估計采用的模型是幾個高斯模型的加權(quán)和,每個高斯模型作為一個類,將樣本數(shù)據(jù)分別投影到幾個高斯模型時,就能得到在各個類上的概率。最終選取概率最大的類作為判決結(jié)果
上式中,K衛(wèi)模型個數(shù),πk為第k個高斯模型的權(quán)重,p為第k個高斯模型的概率密度。求出p(x)后,求和的各項結(jié)果分別代表x屬于各個類的概率。
通過上述方法,可以進行訓(xùn)練在資料庫中加入新的聲音訓(xùn)練得到的gmm模型,還可以通過與已知的gmm模型進行比對從而識別聲音種類。
三、Android實現(xiàn)
Android上層的Application和Application Framework都是使用Java編寫,底層包括系統(tǒng)和使用眾多的LIiraries是C/C++編寫的。所以上層Java要調(diào)用底層的C/C++函數(shù)庫必須通過Java的JNI來實現(xiàn)。
在進行JNI操作時,首先,使用eclipse得到一個app文件,此處,eclipse會自動編譯此java文件。編譯后的文件在bin目錄下,通過javah命令生成一個c++的頭文件。在根據(jù)這個頭文件編寫c++程序。將windows下運行成功的程序中的函數(shù)編譯為.so文件作為java編譯時的庫函數(shù)。在進行java編程時,只需要對c++函數(shù)進行合理調(diào)用即可。
四、實驗結(jié)果
通過六次迭代后得到gmm模型并添加進數(shù)據(jù)庫,見圖1。
得到gmm模型后與數(shù)據(jù)空內(nèi)已有模型進行比較,從而選出最接近的聲音是已有聲音模型中的一個,見圖2。
在Android端實現(xiàn)聲音識別, 見圖3。
四、總結(jié)
一個完整的聲音識別模塊應(yīng)該有一下幾部分組成:前段處理、聲音建模、聲音數(shù)據(jù)庫、匹配判決。根據(jù)以上流程,本文所設(shè)計的聲音識別程序從過mfcc對聲音進行處理,之后建立高斯混合模型,在添加足夠的聲音種類進入數(shù)據(jù)庫后可以對聲音進行識別。通過JNI方式移植到j(luò)ava平臺后,使其應(yīng)用更加廣泛。
參 考 文 獻
[1] C library for computing Mel Frequency Cepstral Coefficients (MFCC)
[2] Freeman H. On the Encoding of Arbitrary Geometric Configurations. IRE Trans. Electronics and Computers, 1961, 10:260-268
[3] Ballard D H. Generalizing the Hough Transform to Detect Arbitrary Shapes [J]. Pattern Recognition, 1987, 13(81):111-122.