張文希, 胡志剛
(1. 中南大學 軟件學院,長沙 410083;2. 長沙學院 電子與通信工程系,長沙 410003)
隨著人類社會的發展,生物特征認證已成為身份認證的重要技術參數得以迅速發展。在人類自然語言中,語音的特征參數能有效地體現說話人語音所包含的與其他說話人不同的特點,語音信號的特征提取,在聲紋識別(也稱說話人識別)研究領域,使用較多的有Mel頻率倒譜系數(MFCC)、線性預測倒譜系數(LPCC)、線性倒譜對(LSP)等。其中,美爾頻率倒譜系數(Mel Frequency cepstrum coefficient,MFCC)是由 Davies 和 Mermelstein 提出的[1],它采用了一種非線性的頻率單位(Mel頻率),以模擬人的聽覺系統,充分考慮人耳聽覺結構和人類發聲和接受聲音的機理特性,具有較好的識別性能和抗噪能力,已成為在語音相關的識別任務中應用最廣泛、最成功的特征參數[2]。
MFCC特征參數的提取,由于計算量大且復雜,大多數研究都是借用計算機平臺進行的基于軟件的特征提取,但這種處理方式,無法滿足對硬件環境和實時性要求更高的應用。基于FPGA的數字處理系統其處理速度與專用集成電路(ASIC)相當,并且具有更好的設計靈活性和成本優勢,為滿足嵌入式系統和實時性要求,本文提出一種以FPGA為平臺的MFCC特征提取的設計方法。
MFCC參數是依據人耳聽覺系統的生理特性描述的,考慮到人耳聽覺系統的非線性特性,而不同于物理學對頻率的描述。計算MFCC時,需要在Mel頻率上均勻劃分若干三角形濾波器,各三角形濾波器相互交迭,每個濾波器三角形兩底角點是相鄰濾波器的中心點。MFCC參數的計算是以“bark”為其頻率基準的[3],通常頻率f與Mel頻率的轉換關系為(1)式

從語音信號輸入到MFCC參數的求解過程如圖1所示。

圖1 MFCC特征提取過程
語音信號在FFT變換前,需要對其進行預處理,即圖1中FFT變換前的工作。由于語音受聲門激勵再通過口腔和鼻腔,高頻端(800HZ以上)會以6dB/倍頻程下降,所以需進行預加重,提升信號高頻部分,傳遞函數如(2)式。

式中,α為預加重系數,在聲紋識別系統中,α取0.93和0.95時識別率最高[4],本文取0.94≈15/16。
語音信號的準平穩特性,可以將語音信號在短時段內視為是平穩的。加窗后的語音信號分為一個個短時段,每一個短時段稱為一幀,幀長取32ms,采樣頻率Fs=8kHz時,每幀有256個信號樣值,幀移則為128個信號樣值。語音加窗就是用窗函數ω(n)乘s(n),即sω(n)=s(n).ω(n),本文采用海明窗如 (3)式。

加窗信號進行FFT變換得到其頻譜,求出頻譜平方,即能量譜;FFT變換的信號,用M個Mel帶通濾波器進行濾波,由于每一個頻帶中分量的作用在人耳中是疊加的,因此將每個濾波器頻帶內的能量進行疊加,這時第k個濾波器輸出功率譜經x'(k);將每個濾波器的輸出再作對數運算,得到相應頻帶的對數功率譜,并進行反離散余弦變換,得到L(一般取12~16左右)個MFCC系數。如下(4)式所示,求出MFCC參數。

按照圖1 MFCC特征參數的提取過程和特征,本文采用Matlab中的DSP Builder圖形建模工具箱與VHDL語言設計模塊相結合的方法,完成對FPGA的設計,整體結構如圖2所示。它主要由預處理模塊、FFT單元、Mel濾波器組、對數運算單元、累加器輸出模塊、控制單元和表單元等組成。

圖 2 MFCC參數提取整體結構
語音信號經過防混疊濾波后,首先以8kHz的速率采樣和16位寬量化,送給預處理模塊進行預加重、分幀和加窗處理。在控制單元的控制下,預處理模塊輸出以256點為一幀,幀移為128點的加窗信號, 在FFT單元求出能量譜;通過Mel濾波器組對FFT的輸出處理,計算出每個濾波器的功率譜;Mel濾波器組輸出的功率譜經對數運算、與Cos表相乘和累加,計算和輸出MFCC參數;
預處理模塊由預加重、分幀和一乘法器組成(還包括簡單的基于短時能量的端點檢測,這里不進行分析)。為了便于FPGA設計,將式(2)預加重傳遞函數改寫為(5)式,由式可知預加重,只需延時單位、減法器、加法器、4位移位寄存器各一個就可以完成。

信號分幀,采用一個FIFO和鎖存器完成。FIFO設為一幀語音長度(即256),當第一次寫滿256個數據,就將數據輸送到鎖存器鎖存,考慮到幀移為128,FIFO從第二次寫數據起,每寫滿128就將數據進行鎖存,實現數據分幀。
加海明窗,在FPGA中采用查表的方法較為簡單。把(3)式預先計算出各點值為0.08~1之間,采用Q表示法進行定標,用Q15表示[5],將浮點數轉為定點數,存放到256×16大小的表單元中,用分幀后的信號乘以該表對應點的值來計算加窗語音信號。
本文中的FFT變換,是在Simulink工具箱Altera DSP Builder Blockset庫中直接調用了Altera的fft_v9_0 IP核來實現的。fft_v9_0 IP核參數設置為,I/O數據流選用了Streaming結構,點數為256的16位數據,如圖3所示。

圖 3 FFT變換的DSP Builder設計
Mel濾波器組由24個三角形濾波器組成,模擬人耳聽覺特性,非均勻的分布在0~4kHz范圍內,如圖4所示。濾波器組總體上覆蓋從0Hz到Nyquist頻率,即采樣率的二分之一,8kHz采樣頻率256點FFT變換,頻率分辨率為31.25(8000/256)Hz,在計算機上用MATLAB計算好三角形濾波器組的中心、上限、下限頻率點和濾波器系數m1,m2,……,該濾波器組中每個三角形濾波器的中心頻率f(m)在Mel頻率軸上等間隔分布,其跨度在Mel頻率標度上也是相等的 。進行FPGA設計時將頻率點和濾波器系數存放在ROM表中。在濾波器功率譜過程中,先將FFT單元輸出的結果(以幀為單位)鎖存,在計數器和控制器的作用下,按順序從ROM表中讀取各三角形濾波器相應的數據,分別計算出每個三角形濾波器的功率譜。

圖4 Mel濾波器組
MFCC參數的獲得,實質就是Mel頻譜變換到時域,使用離散余弦變換 (DCT)就可將其變換到時域。對數運算采用查找表與分段線性插值相結合的方法來實現,第k個濾波器輸出功率譜x'(k)分解為一個小數(0~1)與2冪次方的乘積,即x'(k)=m×2'',則對數運算如(6)式所示,其中n為整數,m實際上也在0.5~1間變化,只要將0.5~1的對數值存放在ROM表中即可以依據(6)式完成對數運算。

由(4)式M FCC的計算公式可知,DCT變換同樣采用查找表的方法,對應各三角形濾波器和MFCC系數序號(取1~12)的cos值存入ROM中,結合乘法器及累加和輸出單元,在控制器有序控制下完成MFCC特征參數的輸出。
為了人們能便捷使用語音產品,促進語音處理技術的發展,本文就語音特征參數的提取,提出了一種FPGA的實現方法。該方法考慮到FPGA的基于查找表結構特點,在各個環節采用了大量的查找表方法進行運算,使信號處理速度得到很大提高,完成一次MFCC參數的提取只需幾毫秒時間。在數據處理過程中采用Q15表示法,計算精度上也得到了保障,幾乎與Matlab中計算出來結果的相等。完全可以滿足便攜式實時系統處理要求。
[1] DAVIES SB,MERMELSTEIN P.Comparison of Parametric Representations for Monosyllabic Word Recognition in Continuously Spoken Sentences[J].IEEE Transaction Acoustics,Speech and Signal Processing,1980,(4):375-366.
[2] Openshaw JP,Sun ZP,Mason JS.A comparison of composite features under degraded speech in speaker Recognition[C].Proceedings of the International Conference on Acoustics,Speech,and Signal Processing,Minneapolis,USA,1993,2:371–374.
[3] 李錦,何培宇.一種改進的基于小波去噪HMM非特定人語言識別算法[J].四川大學學報(自然科學版),2007,44(1):69-72.
[4] 吳朝暉,楊瑩春.說話人識別模型與方法[M].北京:清華大學出版社,2009:74-75.
[5] 張雄偉,陳亮,徐光輝.DSP芯片的原理與開發應用(第3版)[M].北京:電子工業出版社,2003:36-52.