作者:桂。
時間: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
