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