主要内容

微分波束形成导论

这个例子展示了差分波束形成的基本概念以及如何使用该技术形成一个线性差分麦克风阵列。

添加式与差分式麦克风阵列

麦克风阵列已经被部署在许多音频应用中。根据布局的不同,麦克风阵列可以分为两大类:添加式麦克风阵列和差分式麦克风阵列。添加式麦克风阵列与其他应用中使用的阵列类似,如无线通信。对于加性麦克风阵列,其目标是将来自各个信道的信号连贯地组合在一起,从而形成朝向源的窄波束,提高信噪比。中介绍了几种这样的波束形成算法使用麦克风阵列的声波束形成的例子。

虽然附加式麦克风阵列非常有用,但它们也有一些局限性。为了便于说明,让我们定义一个间距为5厘米的2元素数组,并观察它在1-4 kHz之间的模式。注意,尽管音频频带从20hz到20khz,但1-4 kHz的频带对于语音的可理解性尤其重要。阵列中的5厘米间距在4 kHz时大约是波长的一半。

C = 343;F = (1:4)*1e3;Fmax = f(end);Lambda = c/fmax;D = 0.05;N = 2;micarraya = phase . ula (N,d);模式(micarraya f 180:180 0“PropagationSpeed”c)

{“字符串”:“”,“它”:[],“乳胶”:[]}

我们可以从图中观察到的第一件事可能是在这个频率范围内模式发生了多大变化。尽管该阵列在4 kHz时显示出清晰的方向响应,但在1 kHz时,其模式基本上是全向的。因此,在较低的频率下,阵列不能实现很大的空间滤波。这反过来又降低了数组的指向性。沿着舷侧横跨频率范围的指向性被捕获如下。

Da = directivity(micarraya,f,[0;0],“PropagationSpeed”c);clf;情节(f / 1 e3,哒,“o”);包含(的频率(赫兹));ylabel (“方向性(dBi)”);标题(“添加式麦克风阵列指向性”);

{

注意,麦克风阵列(如语音和音乐)感兴趣的信号总是宽带的。因此,跨频率范围的模式差异也会导致波束形成信号的失真。

为了克服这些限制,已经探索了许多阵列几何图形。嵌套数组就是这样一个例子。在嵌套数组中,小数组嵌入到大数组中。然后,您可以激活不同频段的不同元素,从而在整个频段产生类似的模式。考虑下面的4元素数组

Nn = 4;nestedpos = [zero (1,Nn);[0 1 2 4]*d;zero (1,Nn)];Micarrayn =相控。ConformalArray (“ElementPosition”, nestedpos);viewArray (micarrayn);集(gcf,“颜色”' w ');

{“字符串”:“”,“它”:[],“乳胶”:[]}

如果你在4khz左右的频段使用第一和第二元素;2至3 kHz频段的第一和第三个元素;以及1 kHz左右波段的第1和第4个元素,得到的波束模式是这样的

Wn = [1 1 1 1;0 0 0 1;0 1 1 0;1 0 0];模式(micarrayn f 180:180 0“PropagationSpeed”c“重量”wn);

{“字符串”:“”,“它”:[],“乳胶”:[]}

在图中,1 kHz、2 kHz和4 kHz的模式本质上是相同的,但3kHz的模式仍然不同。此外,在这个设计中,元素的数量增加了一倍。实际上,要获得一个嵌套数组,它可以在大频段内具有频率不变的模式,您将需要大量的麦克风元素,因此这种方法不是非常实用。

差分麦克风阵列(DMA)技术是另一种可能的解决方案。因为dma可以形成频率不变的模式,它们成为音频应用程序的有价值的工具。

一阶线性直接存储器存取

与加性麦克风阵列不同,DMA对阵列周围声场的空间导数更为敏感,因此得名“差分”。由于不可能计算麦克风元件之间的真实导数,所以用每个麦克风元件测量值之间的差值来近似导数。由于一对位置较近的元件可以更精确地测量导数,DMA中的元件间距通常比波长小得多。下面的代码构造了一个间距为1/10波长的2元线性阵列。

Dd = λ /10;micarrayd = phase . ula (N,dd);viewArray (micarrayd)组(gcf,“颜色”' w ');

{“字符串”:“”,“它”:[],“乳胶”:[]}

紧凑的间距带来的一个好处是整个阵列的光圈相当小。因此,这种线性dma是助听器的流行选择。

由于差分波束形成测量的是场的导数,它的主瓣指向端火方向。末火方向沿线性阵列的轴线。这是可以理解的,因为对于加法阵列,主瓣在舷侧,也就是垂直于阵列轴的方向,在该方向的导数为0。因此,DMA的设计通常是关于空放置的。对于双元件线性DMA,当主瓣处于端火时,只能控制一个空位置。这被称为一阶DMA。然而,即使只有一个空位置,改变位置也会产生一些有趣的模式。

首先,将null放在数组的侧面。这意味着我们需要计算一个权重向量,当与端火方向和舷侧方向的转向向量结合时,分别生成单位响应和零响应。这样的权重向量可以用最小二乘方法得到。

Ang_d = 90;%纵向Ang_n = 0;%侧向Dd_f = dd./(c./f);w =复数(0 (N,numel(f)));m = 1:元素个数(f) w(:,米)= diffbfweights (N, dd_f (m), ang_n,“ArrayGeometry”“乌拉”);结束clf;模式(micarrayd f 180:180 0“PropagationSpeed”c“重量”, w);

{“字符串”:“”,“它”:[],“乳胶”:[]}

由此产生的图案具有偶极子的形状。请注意,来自所有频率的模式是重叠的,所以它们在整个频段是不变的。方向性现在是频率的常数,如下图所示。

Dd = directivity(micarrayd,f,ang_d,“PropagationSpeed”c“重量”, w);clf;情节(f / 1 e3,弟弟,“o”);ylim ([0 5]);包含(的频率(赫兹));ylabel (“方向性(dBi)”);标题(“2元线性DMA偶极指向性”);

{

与麦克风阵列相关的另一个重要性能特征是它的信噪比(SNR)增益超过白噪声。

Agd =阶段性。ArrayGain (“SensorArray”micarrayd,“PropagationSpeed”c“WeightsInputPort”,真正的);WNGD = agd(f,ang_d,w);clf;情节(f / 1 e3, wngd“- *”);包含(的频率(赫兹));ylabel (“白噪声增益(dB)”);标题(“2元线性DMA偶极信噪比增益”);

{

从图中可以看出,这个DMA的信噪比增益在整个频率范围内低于0 dB,这意味着噪声被显著放大,特别是在低频区域。与附加数组相比,这可能是与DMAs相关的最大问题。因此,工程师可能需要在更集中的波束和更高的接收信号信噪比之间做出权衡,这有助于处理拥挤环境中的混响。

如果null位于endfire方向的另一端呢?

Ang_n = -90;%纵向m = 1:元素个数(f) w(:,米)= diffbfweights (N, dd_f (m), ang_n,“ArrayGeometry”“乌拉”);结束模式(micarrayd f 180:180 0“PropagationSpeed”c“重量”, w);

{“字符串”:“”,“它”:[],“乳胶”:[]}

结果是一个心型线。你也可以把null设为-45度来得到一个超心脏的形状。

Ang_n = -45;%纵向m = 1:元素个数(f) w(:,米)= diffbfweights (N, dd_f (m), ang_n,“ArrayGeometry”“乌拉”);结束模式(micarrayd f 180:180 0“PropagationSpeed”c“重量”, w);

{“字符串”:“”,“它”:[],“乳胶”:[]}

WNGD = agd(f,ang_d,w);clf;情节(f / 1 e3, wngd“- *”);包含(的频率(赫兹));ylabel (“白噪声增益(dB)”);标题(“2元线性DMA超心线信噪比增益”);

{

注意,超心线形状比偶极子形状提供更好的信噪比增益。

高阶线性直接存储器存取

您可能已经注意到,对于一阶线性dma,可以指定1个零方向。一般来说,一个n元线性数组可以形成一个(N-1)次DMA,并具有分配N-1个null的能力。例如,对于一个四麦克风的三阶DMA,您可以为超心线波束模式设置3个空值。

N = 4;micarrayd3 = phase . ula (N,dd);Ang_d = 90;%纵向Ang_n = [0 -30 -90];% nullw =复数(0 (N,numel(f)));m = 1:元素个数(f) w(:,米)= diffbfweights (N, dd_f (m), ang_n,“ArrayGeometry”“乌拉”);结束模式(micarrayd3 f 180:180 0“PropagationSpeed”c“重量”, w);

{“字符串”:“”,“它”:[],“乳胶”:[]}

高阶DMA的信噪比增益仍与一阶DMA具有相同的趋势。

Agd =阶段性。ArrayGain (“SensorArray”micarrayd3,“PropagationSpeed”c“WeightsInputPort”,真正的);WNGD = agd(f,ang_d,w);clf;情节(f / 1 e3, wngd“- *”);包含(的频率(赫兹));ylabel (“白噪声增益(dB)”);标题(“4元线性DMA超心线信噪比增益”);

{

也可以用多重性分配空值。这里有一个示例,您将-90度的空值设置为2的倍数。

Ang_n = [0 -90 -90];% nullw =复数(0 (N,numel(f)));m = 1:元素个数(f) w(:,米)= diffbfweights (N, dd_f (m), ang_n,“ArrayGeometry”“乌拉”);结束模式(micarrayd3 f 180:180 0“PropagationSpeed”c“重量”, w);

{“字符串”:“”,“它”:[],“乳胶”:[]}

尽管默认DMA的endfire主瓣对于助听器应用程序工作良好,但对于其他应用程序(如声条)则不理想。在这些应用中,你可能会期望主波束或多或少地朝向阵列的侧面。然而,尽管线性DMA可以操纵,但与添加数组相比,它有几个独特的特征:

  1. 转向牺牲了阵列的自由度。对于l阶线性DMA,最多可以指定L-1个空值,其余空值由算法根据指定的空值位置选取。因此,一阶线性DMA是不可操纵的。

  2. 与加性阵列不同,线性DMA的波束形状在操纵时不被保留。

下面的代码片段展示了如何操纵线性DMA。在这种情况下,主梁转向舷侧。此外,一个null被放置在70度远离舷侧。剩下的空值由转向权值算法得到。

Ang_d = 0;%侧向Ang_n = 70;% nullw =复数(0 (N,numel(f)));m = 1:元素个数(f) w(:,米)= diffbfweights (N, dd_f (m), ang_n,“ArrayGeometry”“乌拉”“SteerAngle”, ang_d);结束模式(micarrayd3 f 180:180 0“PropagationSpeed”c“重量”, w);

{“字符串”:“”,“它”:[],“乳胶”:[]}

注意,主瓣现在朝向舷侧方向。由于线性阵列的对称性,产生的图案也有一个等效的后瓣。在一些设计中,这可以通过采用具有小后瓣的麦克风元件来缓解。

总结

本例介绍了差分麦克风阵列的基本概念。该示例演示了如何计算差分波束形成权值以形成多种典型的DMA波束形状,并比较了线性DMA与线性加性麦克风阵列的性能。阵列波束图清楚地说明了DMA可以提供一个频率不变的图。该示例最后讨论了如何操纵高阶线性DMA。

参考文献

[1]陈景东,潘超,线性差分麦克风阵列的设计与实现,美国声学学会学报,2014年第136卷第6期

Jacob Benesty,陈景东,潘超,微分波束形成基础,施普林格,2016。

Jilu Jin等,线性差分麦克风阵列的转向研究,音频语音与语言处理学报,Vol. 29, 2021

Baidu
map