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