隨著語音識別和語音合成技術(shù)的不斷更新與發(fā)展,將語音識別技術(shù)應(yīng)用于嵌入式產(chǎn)品中已得到廣泛應(yīng)用。SVM(支持向量機(jī))作為統(tǒng)汁概率模型已經(jīng)被證明是一種很好的識別模型。OMAP5912處理器是由TI公司的TMS320C55X型DSP內(nèi)核與低功耗、增強(qiáng)型ARM926EJ-S微處理器組成的雙核應(yīng)用處理器。ARM核可滿足控制和接口方面的需要,DSP核以其低功耗高性能來實現(xiàn)多媒體應(yīng)用。目前存 0MAP平臺上實現(xiàn)的多媒體應(yīng)用有語音、音頻、圖像、視頻等。在實驗室開發(fā)的基于0MAP5912嵌入式語音識別系統(tǒng)上進(jìn)行基于SVM的語音識別程序開發(fā)。
1 SVM多類分類方法
SVM最初是為處理兩類分類問題而設(shè)計的,如何有效地處理多類分類問題目前仍是一個持續(xù)研究的課題。采用SVM中的“一對一”方法實現(xiàn)多類分類,下面對這種方法進(jìn)行簡單介紹。
S.Knerr等在1990年首次介紹了“一對一”方法。J.Friedman在1996年和U KreBel在1999年分別首次在支持向量機(jī)中使用這種方法。它需要構(gòu)造k(k-1)/2個分類器,每個分類器由特定的某兩類訓(xùn)練樣本訓(xùn)練得到,判定測試樣本的類別時,結(jié)合所有兩類分類器對測試樣本類別的判定意見,采用“投票法”的策略,并認(rèn)為得票數(shù)最多(Max Wins)的類別就是測試樣本所屬的類別。具體如下:考慮K類的分類問題,設(shè)訓(xùn)練集
首先對所有的(i,j)∈{(i,j)|i≤j,i,j=1,…,K}進(jìn)行運算:從訓(xùn)練集中抽取所有y=i和y=j的樣本點?;谶@些樣本點組成一個訓(xùn)練集Ti-j,每個兩類分類SVM解決問題
約束條件為:
通過求解式(3)的最優(yōu)化問題得到k(k-1)/2個決策函數(shù),如果函數(shù)判斷x屬于i類,則i類的得票數(shù)增加1;否則j類的得票數(shù)增加1。最終判定得票數(shù)最多的類別就是測試樣本x所屬的類別。
“一對一”方法的特點是訓(xùn)練時需要構(gòu)造k(k-1)/2個分類器,預(yù)測時則采用投票選擇策略。這樣做的優(yōu)點是:每一個分類問題的規(guī)模較小,需要求的問題較簡單,樣本數(shù)量不很大時訓(xùn)練速度較快,而且由于類別有較少的重合,改善了樣本拒分、錯分的范同;缺點是:投票法可能存在得票相同的類,即可能存在一個樣本同時屬于多個類的情況。這可以使用其他方法解決,這里重點研究SVM算法在0MAP上的實現(xiàn)。
2 嵌入式系統(tǒng)開發(fā)環(huán)境的搭建
OMAP5912處理器是由TI公司的TMS320C55x型DSP內(nèi)核 (192 MHz)與低功耗、增強(qiáng)型ARM926EJ-S微處理器(192 MHz)組成的雙核應(yīng)用處理器,采用0.13μm CMOS工藝制造。TMS320C55x型DSP可提供對低功耗應(yīng)用的實時多媒體處理的支持;ARM926EJ-S MPU可滿足控制和接口方面的處理需要?;陔p核結(jié)構(gòu)的OMAP5912具有極強(qiáng)的運算能力和極低的功耗,采用開放式、易于開發(fā)的軟件設(shè)施,支持廣泛的操作系統(tǒng)。嵌入式系統(tǒng)開發(fā)在解決了硬件平臺的設(shè)計和操作系統(tǒng)的搭建后就需要考慮應(yīng)用程序如何編譯、主機(jī)如何與開發(fā)板通信、程序如何調(diào)試、程序如何下載到開發(fā)板這幾個方面的問題。
2.1 通信環(huán)境
采用minicom通信終端程序,通過minicom可以設(shè)置、監(jiān)視串口工作狀態(tài),接收、顯示串口收到的信息、并且在宿主機(jī)和開發(fā)板之間傳遞數(shù)據(jù)和控制指令,從而實現(xiàn)通過宿主機(jī)上調(diào)試開發(fā)板的目的。
設(shè)置minicom參數(shù)值如下:“Serial Device”為/dev/ttyrSO(使用串口1);主機(jī)串口波特率為:115 200;數(shù)據(jù)位為:8位;停止位為:1位;奇偶校驗位為:無;數(shù)據(jù)流控制為:無。完成后保存設(shè)置重啟Minicom。
2.2 程序下載環(huán)境
在程序開發(fā)期間,經(jīng)常需要把程序下載到開發(fā)板上進(jìn)行測試,采用通用開發(fā)模式:將宿主機(jī)和開發(fā)板通過以太網(wǎng)連接,在宿主機(jī)上運行minicom作為開發(fā)板的顯示終端,通過NFS(Network File System,網(wǎng)絡(luò)文件系統(tǒng))來掛載宿主機(jī)硬盤,讓應(yīng)用程序直接運行在開發(fā)板上。
2.3 交叉編譯環(huán)境的建立
宿主機(jī)系統(tǒng)為Ubuntu version 2.6.27,將交叉編譯工具arm-linux-gcc-3.4.1解壓縮到/usr/local/arm目錄下,然后在終端執(zhí)行命令:#gedit/root/.bashrc,修改/root/.bashrc文件,在文件中加入export PATH=“$PATH:/sbin:/usr/local/arm/3.4.1/bin:/usr/local/bin:/usr/local”,最后在終端執(zhí)行命令#source.bashrc.至此,交叉編譯環(huán)境搭建完成。資源文件和庫文件都
安裝在/usr/local/arm/3.4.1/arm-linux目錄下。交叉編譯過程如圖l所示。
2.4 安裝NFS《Network File System)
在開發(fā)階段采用NFS比較方便,這樣開發(fā)板的根文件系統(tǒng)可以放在宿主機(jī)上,然后通過NFS來掛載和運行。內(nèi)核同樣也可放在宿主機(jī)上,然后由引導(dǎo)器使用 TFTP(Trivial FileTransferProtocol)協(xié)議通過以太網(wǎng)來獲取。開發(fā)板同時具有以太網(wǎng)口和串口,且以太網(wǎng)連接的傳輸速度遠(yuǎn)比串口連接要快,因此,用以太網(wǎng)接口下載內(nèi)核和根文件系統(tǒng),而串口作為調(diào)試和控制臺來使用。
2.4.1安裝NFS
Ubuntu上默認(rèn)是沒有NFS服務(wù)的,首先要安裝NFS服務(wù)程序,#sudo apt-get install nfs-kernel-server,使宿主機(jī)相當(dāng)于NFS服務(wù)器。同樣地,開發(fā)板作為NFS的客戶端,需要安裝NFS客戶端程序:#sudo apt-get install nfs-commmon。
2.4.2 配置portmap服務(wù)
nfs-common和nfs-kernel-setver都依賴于portmap,所以需要配置portmap。#sudo dpkg-reconfigure portmap,對Shouldportmap be bound to the loopback address選N。
在/etc/hosts.deny和/etc/hosts.a(chǎn)llow兩文件中設(shè)置對portmap的訪問:首先在/etc/hosts.deny中,禁止所有用戶對portmap的訪問,然后在/etc/hosts.a(chǎn)llow中,允許特定用戶對portmap進(jìn)行訪問。文件修改完后執(zhí)行#sudo/etc/init.d/pottmap restart,重啟portmap daemon使改動后的內(nèi)容生效。
2.4.3 配置/etc/exports
NFS掛載目錄及權(quán)限由/etc/expotts文件定義。在該文件最后添加語句:
/data/rootfs2.6 192.168.0.*(rw,sync,no_root_squash)
使192.168.O.*網(wǎng)段內(nèi)的NFS客戶端能夠共享NFS服務(wù)器/data/rootfs2.6目錄內(nèi)容,不僅有瀆寫權(quán)限,而且進(jìn)入/data/rootfs-2.6目錄后的身份為root。更新配置,重啟NFS服務(wù)。
#sudo exportfs-r
#sudo/etc/init.d/nfs-kernel-server restait
2.4.4 拷貝根文件系統(tǒng)
拷貝根文件系統(tǒng)到/data/rootfs2.6目錄下,這時就可以啟動minicom,作為虛擬終端,可以通過它來操作開發(fā)板。
2.5 修改開發(fā)板啟動項
bootargs參數(shù)設(shè)置Linux系統(tǒng)啟動時掛載在NOR Flash上的JFFS2根文件系統(tǒng)。掛載宿主機(jī)上的網(wǎng)絡(luò)文件系統(tǒng),則bootargs參數(shù)應(yīng)設(shè)置
setenv bootargs=console=ttyS0,115200n8 noinitrd rw ip=192.168.0.158 root=/dev/nfs nfsroot=192.168.0.204:/data/rootfs2.6.nolock mem=62M
#sayenv保存設(shè)置后重啟u-boot,之后將順利進(jìn)入到開發(fā)板,調(diào)試應(yīng)用程序。
3 實驗及結(jié)果分析
基于VC++6.0編程實現(xiàn)一種多類分類SVMs算法,PC機(jī)環(huán)境為Ubuntu version 2.6.27,開發(fā)板為Omap5912的ARM926ej-s,其環(huán)境為Lin-ux version 2.6.18;Boot Loader采用u-boot version 1.1.6;交叉編譯工具鏈arm-linux-gcc version3.4.1。
采用16個人分別對50個詞的孤立詞發(fā)音,在不同信噪比下(15、20、25、30 dB和無噪音)得到的語音數(shù)據(jù)作為樣本,采用由MFCC特征提取算法得到的特征參數(shù)作為識別網(wǎng)絡(luò)的輸入。語音信號采樣率為11.025 kHz,幀長N=256點,幀移M=128點。詞匯量分別為10、20、30、40和50個詞。訓(xùn)練樣本由9人每人對每詞在15、20、25、30 dB、無噪音下發(fā)音3次得到.測試樣本由另外7人在相應(yīng)SNR下對每詞發(fā)音3次得到。識別算法采用RBF核函數(shù)的SVM算法,采用交叉驗證和網(wǎng)格搜索法進(jìn)行核參數(shù)選擇并建立模型,對測試樣本進(jìn)行分類識別。核函數(shù)參數(shù)取最優(yōu)為(c,y)=(32.0,O.000 122 070 312 5)。實驗結(jié)果見表l所示,識別率均在95%以上。表1中同時列出同樣條件下使用HMM識別網(wǎng)絡(luò)的識別結(jié)果。
HMM模型是典型的語音識別模型,它是目前語音識別效果最好的少數(shù)幾種方法之一。在相同特征參數(shù)下將SVM與HMM模型進(jìn)行對比,從實驗結(jié)果看出:1)SVM比HMM模型具有更高的識別率;2)比較相同信噪比和詞匯量下的測試精度,可發(fā)現(xiàn)HMM模型的測試精度有明顯下降,而SVM的測試結(jié)果下降較少,說明SVM比HMM模型具有更強(qiáng)推廣性。
4 結(jié)束語
提出一種基于SVM的0MAP5912非特定人嵌入式語音識別系統(tǒng)的實現(xiàn)方法。在搭建的開發(fā)環(huán)境下運用SVM算法巾的“一對一”方法進(jìn)行語音識別,獲得良好結(jié)果。通過實驗可以得出,對中小詞匯量采用MFCC特征參數(shù),“一對一”SVM作為后端識別方法可以得到較好的識別結(jié)果,比傳統(tǒng)的HMM模型有明顯優(yōu)勢。同時SVM算法作為應(yīng)用程序集成到0MAP5912嵌入式系統(tǒng)里,存儲量需求小,能夠滿足實用要求。