音频开发_Microphone Array Beamforming_Delay Sum Beamforming

本章原文出自http://www.labbookpages.co.uk/audio/beamforming/delaySum.html

延迟和波束形成

本页介绍了使用麦克风阵列进行波束成形的技术,作为创建聚焦“波束状”灵敏度模式的方法。描述了最简单的波束形成架构,即延迟求和波束形成器。


介绍

下图显示了两种不同麦克风设置的灵敏度模式。左侧的图表显示了理想的全向麦克风的模式。它表明麦克风对来自所有方向的信号具有相同的灵敏度。右手图像显示了聚焦灵敏度模式,旨在实现单一方向的最大灵敏度,而所有其他方向的灵敏度降低,目标是创建灵敏度模式,从而“监听”来自单一方向的信号。

聚焦光束宽度

可以通过使用简单的麦克风线性阵列来实现波束形成效果。下面说明这种阵列,在这种情况下阵列具有三个麦克风。很容易看出波前产生的方向对信号遇到阵列中每个元素的时间有影响。当从-45°到达时,信号首先到达左手麦克风,当从垂直于阵列(称为宽边)到达时,信号同时到达每个麦克风,当从+ 45°时,右手麦克风首先接收信号。

相位对齐

如果通过对所有麦克风信号求和来创建阵列的输出,则当信号源自垂直于阵列的源时,实现最大输出幅度; 信号同时到达,它们在时间上高度相关并相互加强。或者,如果信号源自非垂直方向,则它们将在不同时间到达,因此相关性较小并且将导致较小的输出幅度。

有关计算信号到达阵列的到达时间差异的完整介绍,请参阅延迟计算页面。


波束图形

可以使用简单的计算来确定麦克风阵列对来自特定方向的信号的灵敏度。下图显示了一个带有四个麦克风的阵列。每个阵列之间的距离为l(以米为单位)。到达角是从垂直于阵列测量的。下面的等式计算单个频率f的阵列增益 和到达角θ。c表示声速,N表示 麦克风的数量。

Wave Summation页面提供了有关如何推导出该等式的完整说明。

线性阵列

线性阵列输出

注意:等式做了一些假设; 信号源离阵列足够远,波阵面实际上是平坦的,也没有考虑信号在从信号源传播到麦克风时的衰减。

阵列的增益如下图所示。输出被标准化为将从单个麦克风接收的输出。因此,在0度(宽边)的角度下,输出幅度相当于全向麦克风,导致增益为1(或0 dB)。

光束模式,4个元素,0.2m间距,1kHz

波束图形,4个元素,0.2m间距,1kHz

极光形式的光束模式

极形式的波束图形

这些图的数据是使用下面的代码生成的。然后使用gnuplot绘制。下面还给出了两组gnuplot命令,一组用于XY图,另一组用于极坐标图。

文件: beamPattern.c

#include <stdio.h>
#include <math.h>

#define ANGLE_RESOLUTION 500    // Number of angle points to calculate

int main(void)
{
   int numElements = 4;         // Number of array elements
   double spacing = 0.2;        // Element separation in metres
   double freq = 1000.0;        // Signal frequency in Hz 
   double speedSound = 343.0;   // m/s

   int a;
   int i;

   // Iterate through arrival angle points
   for (a=0 ; a<ANGLE_RESOLUTION ; a++)
   {
      // Calculate the planewave arrival angle
      double angle = -90 + 180.0 * a / (ANGLE_RESOLUTION-1);
      double angleRad = M_PI * (double) angle / 180;

      double realSum = 0;
      double imagSum = 0;

      // Iterate through array elements
      for (i=0 ; i<numElements ; i++)
      {
         // Calculate element position and wavefront delay
         double position = i * spacing;
         double delay = position * sin(angleRad) / speedSound;

         // Add Wave
         realSum += cos(2.0 * M_PI * freq * delay);
         imagSum += sin(2.0 * M_PI * freq * delay);
      }

      double output = sqrt(realSum * realSum + imagSum * imagSum) / numElements;
      double logOutput = 20 * log10(output);
      if (logOutput < -50) logOutput = -50;
      printf("%d %f %f %f %f\n", a, angle, angleRad, output, logOutput);
   }

   return 0;
}
> gcc -lm -o beamPattern beamPattern.c
 > ./beamPattern> beamPattern.dat
 > gnuplot 
gnuplot> call'beamPattern.gnuplot'

下面的gnuplot命令可用于生成上面显示的两个不同的波束图模式。

文件: beamPattern.gnuplot

reset
unset key
set xlabel "Arrival Angle (degrees)" font "arial,12"
set ylabel "Gain (dB)" font "arial,12"
set grid lc rgbcolor "#BBBBBB"
plot 'beamPattern.dat' u 2:5 w l

文件: polar.gnuplot

reset
set angles degrees
set polar
set grid polar 30 lc rgbcolor "#999999"
unset border
unset param
set size ratio 1 1,1
set xtics axis nomirror -50,10
unset ytics
unset key
set style data line
set xrange[-50:50]
set yrange[-50:50]
set rrange[-50:0]
set label 1 "0°" at graph 1.01,0.5 front
set label 2 "180°" at graph -0.01,0.5 right front
set label 3 "-90°" at graph 0.5,-0.03 center front
set label 4 "90°" at graph 0.5,1.03 center front
plot 'beamPattern.dat' u 2:5

频率响应

上一节中的灵敏度图计算是针对单个频率计算的。处理宽带源(如语音)时,计算阵列的频率响应非常重要。下图显示了0到10000Hz频率范围内阵列的频率响应。最引人注目的特征是增益最大值,其中阵列的输出等于垂直源方向的输出。这些被称为栅瓣和解释如下。它们的影响是定向滤波的损失。从非垂直方向到达的信号源将以频带的频率进入阵列的输出。

另一个有趣的特征是低频时缺乏方向性。

频率响应

用于生成此图的数据的代码如下所示。还给出了gnuplot命令。

文件: freqResp.c

#include <stdio.h>
#include <math.h>

#define FREQ_RESOLUTION 500      // Number of freq points to calculate
#define ANGLE_RESOLUTION 500     // Number of angle points to calculate

int main(void)
{
   int numElements = 4;          // Number of array elements
   double spacing = 0.2;         // Element separation in metre
   double speedSound = 343.0;    // m/s

   int f, a, i;

   // Iterate through arrival angle points
   for (f=0 ; f<FREQ_RESOLUTION ; f++)
   {
      double freq = 10000.0 * f / (FREQ_RESOLUTION-1);

      for (a=0 ; a<ANGLE_RESOLUTION ; a++)
      {
         // Calculate the planewave arrival angle
         double angle = -90 + 180.0 * a / (ANGLE_RESOLUTION-1);
         double angleRad = M_PI * (double) angle / 180;

         double realSum = 0;
         double imagSum = 0;

         // Iterate through array elements
         for (i=0 ; i<numElements ; i++)
         {
            // Calculate element position and wavefront delay
            double position = i * spacing;
            double delay = position * sin(angleRad) / speedSound;

            // Add Wave
            realSum += cos(2.0 * M_PI * freq * delay);
            imagSum += sin(2.0 * M_PI * freq * delay);
         }

         double output = sqrt(realSum * realSum + imagSum * imagSum) / numElements;
         double logOutput = 20 * log10(output);
         if (logOutput < -50) logOutput = -50;
         printf("%f %f %f\n", angle, freq, logOutput);
      }

      printf("\n");
   }

   return 0;
}
> gcc -lm -o freqResp freqResp.c
 > ./freqResp> freqResp.dat
 > gnuplot 
gnuplot> call'freqResp.gnuplot'

文件: freqResp.gnuplot

reset
set xlabel "Arrival Angle (degrees)" font "arial,8"
set ylabel "Frequency (Hz)" font "arial,8"
set zlabel "Gain (dB)" font "arial,8"
set grid lc rgbcolor "#BBBBBB"
set xrange[-90:90]
set yrange[0:10000]
set zrange[-40:0]
unset key
set view 30,56,0.98
splot 'freqResp.dat' u 1:2:3 with pm3d

麦克风间距和数量

从波数图形部分检查延迟和方程表明,波束形成器的性能取决于阵列元素的间距和数量。下表说明了如何更改这些参数会影响波束成形器的空间滤波性能。

 

更多元素

增加间距

5个元素,0.04m间距,0.2m孔径

5个元素,0.04m间距,0.2m孔径

15个元素,0.04米间距,0.6米孔径

15个元素,0.04米间距,0.6米孔径

25个元素,0.04米间距,1米孔径

25个元素,0.04米间距,1米孔径

5个元素,0.08米间距,0.4米孔径

5个元素,0.08米间距,0.4米孔径

15个元素,0.08米间距,1.2米孔径

15个元素,0.08米间距,1.2米孔径

25个元素,0.08米间距,2米孔径

25个元素,0.08米间距,2米孔径

5个元件,0.16m间距,0.8m孔径

5个元件,0.16m间距,0.8m孔径

15个元件,0.16m间距,2.4m孔径

15个元件,0.16m间距,2.4m孔径

25个元素,0.16m间距,4m孔径

25个元素,0.16m间距,4m孔径


光栅Lobes

下面是4个元件阵列的波数图形,频率为4kHz,间距为0.2m。该图显示了一些增益与主瓣相匹配的额外波瓣,这些波瓣称为栅瓣。光栅波瓣通常是不需要的,因为它们会使阵列从主波瓣以外的方向拾取信号而不会衰减。

当信号波前必须在阵列元件之间传播的额外距离是信号波长的倍数时,发生光栅波瓣。在这种情况下,每个元件接收的信号高度相关,并且不会发生信号衰减。这在右下图中说明。

光栅叶片位置

空间别名

对于具有等间距元件的一维线性阵列,栅瓣的位置易于计算。l是元素间距,c是声速, f是信号频率,n是选择光栅波瓣的整数。

光栅叶片位置

ñ角度(度)
00.0°
125.388°
259.037°

操舵

到目前为止,阵列灵敏度模式的主瓣已经固定在一个方向上; 垂直于阵列。波束形成阵列的一个强大功能是能够电子控制波束图案而无需物理移动阵列。这可以通过向每个阵列元素添加延迟级来简单地实现。下图说明了此配置,它为Delay-Sum架构提供了名称。

这个想法非常简单,为每个麦克风添加延迟,使得来自特定方向的信号在它们相加之前对齐。通过控制这些阵列,可以控制主瓣方向。

光束转向

在“ 分数延迟”页面上描述了一种实现延迟阶段的方法。


页面修订

修订号日期细节
1.12011/9/3在梁图案部分修正了等式。
1.22012年10月10日修正频率响应图上的轴标签。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值