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