基于麥克風(fēng)陣列聲源定位系統(tǒng)的FPGA實(shí)現(xiàn)
2 各模塊設(shè)計(jì)實(shí)現(xiàn)
2.1 FIR帶通濾波模塊
為了消除噪聲和回聲干擾的影響,首先需要進(jìn)行濾波。語音信號(hào)的帶寬是0.3~3.4 kHz,因而需要設(shè)計(jì)一個(gè)帶通濾波器濾除語音信號(hào)帶寬之外的噪聲。為了使處理過的信號(hào)相位不發(fā)生變化即保持線性相位,需要采用FIR濾波器。
這里采用切比雪夫逼近法,由Matlab濾波器設(shè)計(jì)工具求得濾波器的各系數(shù),乘以1024進(jìn)行量化,轉(zhuǎn)化為CSD編碼以提高其運(yùn)行效率,最后由Verilog代碼實(shí)現(xiàn)。
2.2 半重疊漢明窗模塊
為了保證語音信號(hào)平穩(wěn)性,一幀信號(hào)的時(shí)間窗長(zhǎng)度選為10~30 ms。而采樣器頻率為10 kHz,為了便于FFT處理選擇25.6 ms即幀長(zhǎng)為256點(diǎn)。為了保證統(tǒng)計(jì)特征的連續(xù)性和得到更好的語音處理效果,各幀之間進(jìn)行50%的重疊,即每次處理只更新12.8 ms的數(shù)據(jù)。這樣,一幀內(nèi)的信號(hào)可以近似認(rèn)為是平穩(wěn)的。本文引用地址:http://butianyuan.cn/article/191197.htm
分幀是用可移動(dòng)的有限長(zhǎng)度窗口進(jìn)行加權(quán)的方法實(shí)現(xiàn),這就是用某窗函數(shù)w(n)乘以s(n),從而形成加窗的語音信號(hào)sw(n)=s(n)×w(n),其中窗函數(shù)的值存儲(chǔ)在內(nèi)部存儲(chǔ)資源中。常用的窗函數(shù)有漢明窗與矩形窗,漢明窗比矩形窗的平滑效果更好,故選擇漢明窗,其表達(dá)式如式(5)所示
其中,N是幀長(zhǎng)。
2.3 FFT運(yùn)算模塊
由于語音信號(hào)是連續(xù)的實(shí)時(shí)采樣,為了能使傳來的語音信號(hào)連續(xù)不斷的處理,這里采用了乒乓結(jié)構(gòu),即采用兩個(gè)分別能存儲(chǔ)一幀數(shù)據(jù)的雙口RAM,第一個(gè)RAM在存儲(chǔ)新數(shù)據(jù)時(shí),第二個(gè)RAM進(jìn)行FFT運(yùn)算,并存儲(chǔ)其結(jié)果。然后,第一個(gè)RAM進(jìn)行FFT運(yùn)算,并存儲(chǔ)其結(jié)果,第二個(gè)RAM存儲(chǔ)新的數(shù)據(jù),這樣就保證了信號(hào)處理的連續(xù)性。
乒乓存儲(chǔ)時(shí)由倒序地址模塊產(chǎn)生倒序存儲(chǔ)地址,使RAM中存儲(chǔ)數(shù)據(jù)為倒序,為FFT運(yùn)算做準(zhǔn)備。為了加快運(yùn)算速度,蝶形運(yùn)算旋轉(zhuǎn)因子,先由Matlab軟件生成,量化為12位帶符號(hào)數(shù),然后存儲(chǔ)在內(nèi)部ROM里面。
整個(gè)FFT運(yùn)算單元由狀態(tài)機(jī)設(shè)計(jì)完成,共由5個(gè)狀態(tài)完成;S1狀態(tài)輸出第一個(gè)操作數(shù)地址;S2狀態(tài)得到第一個(gè)操作數(shù),輸出第二個(gè)操作數(shù)地址;S3狀態(tài)得到第2個(gè)操作數(shù),計(jì)算出第一個(gè)結(jié)果;S4狀態(tài)寄存第一個(gè)結(jié)果,計(jì)算出第二個(gè)結(jié)果;S5狀態(tài)寄存第二個(gè)結(jié)果,產(chǎn)生下一級(jí)運(yùn)算地址。
評(píng)論