馬智愚
(福州大學(xué) 物理與信息工程學(xué)院,福建 福州 350116)
隨著人工智能和物聯(lián)網(wǎng)技術(shù)的興起,語音識別技術(shù)的應(yīng)用范圍越來越廣。語音識別技術(shù)可用語音取代手工來執(zhí)行命令,甚至可聽懂并預(yù)測人們的講話,加以處理后可完成特定動作[1]。隨著手機(jī)語音助手和智能音箱等移動終端的普及,語音識別系統(tǒng)對性能和功耗的要求越來越高。
特征參數(shù)提取是語音識別的關(guān)鍵問題。目前,語音識別系統(tǒng)中比較常用的是Mel頻率倒譜系數(shù)(MFCC)、線性預(yù)測倒譜系數(shù)(LPCC)及線性倒譜對(LSP)等。相較于其他參數(shù),MFCC特征參數(shù)充分考慮人耳聽覺結(jié)構(gòu)、人類發(fā)聲的機(jī)理特性及人耳的聽覺感知情況,已成為語音識別任務(wù)中應(yīng)用最廣泛、最成功的特征參數(shù)[2]。
MFCC特征參數(shù)提取的計算量大且計算復(fù)雜。目前許多提取方法都是基于軟件或DSP核心平臺,但是嵌入式系統(tǒng)對硬件環(huán)境和實(shí)時性要求更高,普通處理器已不能滿足速度和精度的需要。FPGA在數(shù)字處理領(lǐng)域具有較高性能且設(shè)計靈活,本文以FPGA為平臺設(shè)計語音MFCC特征提取的全硬件結(jié)構(gòu),滿足了嵌入式系統(tǒng)的應(yīng)用要求[3]。
MFCC特征參數(shù)是由Davies和Mermelstein提出的,Mel頻率倒譜系數(shù)依據(jù)人耳聽覺系統(tǒng)的生理特性描述,考慮到了人耳聽覺系統(tǒng)的非線性特性,不同于物理學(xué)對頻率的描述[4]。通常,頻率f與Mel頻率的轉(zhuǎn)換公式為:
其中,f為實(shí)際頻率,單位為Hz;fMel為Mel頻率,單位為Hz。Mel特征參數(shù)提取的流程框圖如圖1所示。
圖1 MFCC特征參數(shù)提取流程框圖
具體提取步驟包括預(yù)處理、FFT運(yùn)算、計算Mel濾波能量及計算離散余弦變換。
預(yù)處理主要包含預(yù)加重、分幀及加窗。預(yù)加重的目的是補(bǔ)償高頻分量的損失,凸顯共振峰。預(yù)加重濾波器可設(shè)為:
其中,α是預(yù)加重系數(shù),通常取0.9~1。
分幀是將N個語音采樣點(diǎn)集合成一個觀測單位。因?yàn)檎Z音信號具有短時平穩(wěn)的特性,所以將語音信號分成較短的幀,每幀信號可看作穩(wěn)定的語音信號。為使各個相鄰幀之間的參數(shù)能夠平穩(wěn)過渡,在相鄰兩幀之間會有重疊部分,包含M個取樣點(diǎn)。N為幀長,M為幀移,為方便后續(xù)的FFT運(yùn)算,N通常取256或512,M通常取128。
加窗是將每一幀代入窗函數(shù),目的是平滑語音幀,消除各個幀兩端可能造成的信號不連續(xù)性。因?yàn)镈FT運(yùn)算和FFT運(yùn)算需要周期性延拓,所以時域中的突變點(diǎn)會對頻譜造成明顯影響,如頻譜泄露。常用的窗函數(shù)有方窗、漢明窗及漢寧窗等,根據(jù)窗函數(shù)的頻域特性,常采用漢明窗。漢明窗的公式為:
語音信號在時域上的變換無法看出信號特性,所以將它轉(zhuǎn)化為頻域的能量分布來觀察。頻譜公式為:
其中,i為當(dāng)前幀數(shù);Si(n)為一幀內(nèi)加窗后的語音信號;N為幀長,N=256;k為諧波次數(shù)。
功率譜公式為:
Mel濾波是利用同人耳聽覺相似的三角濾波器組對語音信號的幅度平方譜進(jìn)行平滑[5]。每個濾波器的傳遞函數(shù)為:
其中,k為當(dāng)前頻率;m為第m個濾波器;f(m)為第m個濾波器的中心頻率。
計算在每個Mel濾波器中的對數(shù)能量。相當(dāng)于把每幀的能量譜E(i,k)與Mel濾波器的頻域Hm(k)相乘并相加,公式為:
其中,i為第i幀語音信號,m為第m個Mel濾波器(共有M個),M通常取22~26。
把Mel濾波器的能量取對數(shù)后進(jìn)行DCT變換,得到MFCC參數(shù)[6]。公式為:
其中,L指MFCC系數(shù)階數(shù),通常取12~16。
圖2為總體結(jié)構(gòu)圖,由蜂鳥e203 MCU作為主機(jī),MFCC特征參數(shù)提取模塊作為從機(jī),兩者通過蜂鳥e203的ICB自定義總線相連接。
圖2 總體結(jié)構(gòu)圖
MFCC特征參數(shù)模塊的內(nèi)部結(jié)構(gòu)如圖3所示。其中,輸入的語音信號采樣頻率是8 kHz,采樣精度是16 bit帶符號數(shù)。運(yùn)算中的中間數(shù)據(jù)都采用16 bit的定點(diǎn)數(shù)據(jù)表示。所有小數(shù)部分的運(yùn)算都采用定點(diǎn)數(shù)移位的方法實(shí)現(xiàn)。
預(yù)加重模塊將式(1)簡化為:
圖3 特征參數(shù)提取模塊內(nèi)部結(jié)構(gòu)圖
此簡化方法避免了乘法運(yùn)算,通過加法器和移位寄存器實(shí)現(xiàn)。
分幀采用FIFO實(shí)現(xiàn),設(shè)定每一幀語音長度為256個采樣點(diǎn),幀移為128個采樣點(diǎn)。加窗運(yùn)算常采用查表法和Cordic算法,查表法運(yùn)算速度快,但精度稍差;Cordic算法精度高,但運(yùn)算周期較長??紤]語音信號需要實(shí)時處理,采用查表法。在Matlab中算出窗函數(shù)的表單元,然后和分幀后的信號進(jìn)行乘法運(yùn)算[7]。
FFT變換調(diào)用了Quartus中的FFT IP核,參數(shù)配置信息如圖4所示。其中,F(xiàn)FT的點(diǎn)數(shù)為一幀的長度即256,輸入/輸出數(shù)據(jù)都是16位數(shù)據(jù)。
通過Mel濾波器組的能量通過查找表的方法實(shí)現(xiàn)。Mel濾波器組是由M個三角濾波器疊加而成的,濾波器個數(shù)M取24,先在Matlab中算出每組濾波器的中心頻率點(diǎn)、上限頻率點(diǎn)及下限頻率點(diǎn),將每組數(shù)據(jù)存入rom中,通過計數(shù)器來控制頻域信號與Mel濾波器運(yùn)算。
離散余弦變換是將Mel頻譜變換到時域,獲得最終的MFCC特征參數(shù)。對數(shù)運(yùn)算采用查找表的方法實(shí)現(xiàn),然后通過計數(shù)器實(shí)現(xiàn)乘累加和。
最后輸出數(shù)據(jù)由控制單元通過ICB總線連接到MCU。
圖4 FFT配置信息
本文在DE2-115 FPGA平臺上,以蜂鳥e203 MCU作為主機(jī),設(shè)計了一個MFCC特征參數(shù)提取模塊。相較于軟件實(shí)現(xiàn)方法,利用IP核和查找表方法的信號處理運(yùn)算速度大幅提高。處理結(jié)果與Matlab中計算結(jié)果的誤差在1%以內(nèi),基本可滿足系統(tǒng)實(shí)時處理要求。