【麥克風陣列增強】Delay and sum beamforming


作者:桂。

時間: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM