作者:桂。
時間:2017-06-03 15:40:33
鏈接:http://www.cnblogs.com/xingshansi/p/6937576.html
前言
本文主要記錄麥克風陣列的幾個基本知識點,並簡單介紹基本的波束合成方法:Delay and sum (DSB).
一、柵瓣效應
類似干涉儀中的phase-wrapping問題:傳感器的距離超過半波長的距離。
A-Beam Pattern
以線性陣列為例
輸出為
對應的增益,也就是output,取頻率為1KHz的數據:
有時候也用極坐標表示
B-Frequency Response
考慮如下場景
實際只有一個波峰,卻在不同角度長出多個一樣的,這就是柵瓣
相位是角度、頻率的共同作用,對應的柵瓣從二維平面更容易理解
從每一個來看,grating lobe就是柵瓣:
二、Delay and sum
DSB核心的思想就是延遲相加,對於柵瓣的DOA估計需要解模糊。假設估計出DOA,進行補償之后(delay)通過疊加(sum)就可以實現目標信號的增強:
關於delay的操作,可以在時域進行也可以在頻域進行,本質上是小數延遲的問題(fractional delays).例如對於下面的dual-channel問題:
需要延遲 是0.5149ms,也就是24.717samples,而不是整數。
小數延遲實現的思路有很多種,例如可以通過線性相位(延遲)的FIR構造,對應就是sinc函數,通常構造完成之后會做一個加窗的平滑處理:
double delay = 0.25; // Fractional delay amount int filterLength = 11; // Number of FIR filter taps (should be odd) int centreTap = filterLength / 2; // Position of centre FIR tap for (int t=0 ; t<filterLength ; t++) { // Calculated shifted x position double x = t - delay; // Calculate sinc function value double sinc = Math.sin(Math.PI * (x-centreTap)) / (Math.PI * (x-centreTap)); // Calculate (Hamming) windowing function value double window = 0.54 - 0.46 * Math.cos(2.0 * Math.PI * (x+0.5) / filterLength); // Calculate tap weight double tapWeight = window * sinc; // Output information System.out.printf("%3d % f % f % f\n", t, sinc, window, tapWeight); }
其他如:重采樣技術(Resample)、Farrow-filter技術,都可以實現這樣的功能。
參考
- http://www.labbookpages.co.uk/audio/beamforming/delaySum.html#pattern