码迷,mamicode.com
首页 > 其他好文 > 详细

Delay and sum beamforming

时间:2017-06-03 17:32:22      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:ima   position   角度   shift   action   try   double   bsp   title   

作者:桂。

时间: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

Delay and sum beamforming

标签:ima   position   角度   shift   action   try   double   bsp   title   

原文地址:http://www.cnblogs.com/xingshansi/p/6937576.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!