基于短時能量和短時過零率的VAD算法及其FPGA實現(xiàn)
FPGA中IIR濾波器的設(shè)計一般采用如圖3所示的流水線結(jié)構(gòu)(圖中以2階IIR濾波器為例)。這種結(jié)構(gòu)的濾波器可在一個時鐘周期內(nèi)完成一次濾波計算[5~6], 并行度較高,但硬件上需要5個乘法器、4個加法器和若干個寄存器,占用了較多的資源。采用非流水線結(jié)構(gòu)的濾波器(仍以2階IIR濾波器為例)的結(jié)構(gòu)如圖4所示。其中:fifo_out為FIFO模塊輸出的數(shù)據(jù),empty為FIFO是否為空的標(biāo)志信號,ready_out信號為完成一次濾波計算的標(biāo)志信號。此結(jié)構(gòu)的濾波器每5個時鐘周期完成一次濾波計算,并行度較低,但在硬件上只需要1個乘法器、1個累加器、1個計數(shù)器以及若干個寄存器。
本文引用地址:http://cafeforensic.com/article/84500.htm由于本文的算法其信號的采樣率只有8kHz,非流水線結(jié)構(gòu)濾波器的處理速度已可以滿足要求。因此,為了合理利用資源,本設(shè)計采用了基于非流水線結(jié)構(gòu)的濾波器。同時考慮到系統(tǒng)的同步性和穩(wěn)定性,所設(shè)計的濾波器每8個時鐘周期完成一次濾波運算并將結(jié)果鎖存。表1為兩種不同結(jié)構(gòu)的濾波器(系數(shù)采用18位量化,即2位整數(shù)加16位小數(shù))在同一器件上實現(xiàn)的結(jié)果比較,所用器件為Altera公司CycloneII系列的EP2C5T144C7,綜合工具為QuartusII 5.0,優(yōu)化選項均為balanced。由表1的比較結(jié)果可以看出,雖然非流水線結(jié)構(gòu)的濾波器速度比流水線的慢,但所使用的資源卻大大減少,并且能在101.61ns內(nèi)完成一次濾波計算,可滿足實時性的要求。此模塊的處理延遲為8個時鐘周期。
2.3 加窗、平均能量計算模塊
(1)相關(guān)公式
將通過高通濾波器的信號進(jìn)行加Hamming窗處理,窗長為80個數(shù)據(jù)。處理所使用的計算公式如下:
其中,x(i)為通過高通濾波器后的信號,y(i)為經(jīng)過加窗處理后的信號。
對經(jīng)過加窗處理過的信號,計算其平均能量的計算公式如下:
其中,y(0)、y(1)、……、y(79)為經(jīng)過加窗處理的信號,E_average為該幀的平均能量。
在加窗的計算中涉及到余弦的運算,為了節(jié)省資源及提高處理速度,采用查表法來得到0.54-0.46×cos(e×i/79)部分的數(shù)值。
?。?)平方器的實現(xiàn)
由于平方運算與普通的乘法器相比具有一定的特殊性,因此在平方器的硬件實現(xiàn)上采用如下的算法來減少硬件資源并提高運算速度:
設(shè)X的二進(jìn)制表示為 In In-1……I1I0,Iij為第i位和第j位的乘積。由于在平方運算中Iij=Iji,故 Iij+I(xiàn)ji=2Iij。因此以4bit數(shù)的平方運算為例,參考圖5,可以通過合并相同項后,左移一位(相當(dāng)于乘2運算)來減少部分積的位數(shù)[7]。對所得到的部分積使用Wallace壓縮樹將部分積壓縮至兩組,然后再使用超前進(jìn)位加法器來得到最后結(jié)果。
由于本模塊計算得到的平均能量僅用于同語音判決模塊中的門限比較,出于節(jié)省硬件資源的考慮,該平均能量和語音判決模塊中的門限均不化成dB單位。通過Matlab仿真驗證,這種做法并不會影響到最后的判決結(jié)果。加窗、平均能量計算模塊的處理延遲為5個時鐘周期,圖6為本模塊的結(jié)構(gòu)框圖。圖中的ready_out信號為高通濾波模塊完成一次濾波計算后輸出的數(shù)據(jù)可讀信號,acc_clken信號為累加器的時鐘使能信號。
2.4 語音判決模塊
根據(jù)計算出的當(dāng)前幀的平均能量以及之前幀的情況,判斷該幀是否為語音幀。通過使用四個標(biāo)志位:frame_attribute[2:0]和smooth來決定是否需要進(jìn)行平滑,其中,frame_attribute[2:0]記錄前三幀的屬性,smooth記錄前三幀中是否存在非平滑過的語音。此模塊的處理延遲為1個時鐘周期。
評論