麦克风阵列波束形成之DSB原理与实现

语音识别有近场和远场之分,且很多场景下都会用到麦克风阵列(micphone array)。所谓麦克风阵列是一组位于空间不同位置的麦克风按一定的形状规则布置形成的阵列,是对空间传播声音信号进行空间采样的一种装置,采集到的信号包含了其空间位置信息。近场语音识别将声波看成球面波,它考虑各麦克风接收信号间的幅度差;远场语音识别将声波看成平面波,它忽略各麦克风接收信号间的幅度差,近似认为各接收信号之间是简单的时延关系。麦克风阵列可分为一维、二维和三维麦克风阵列。一维麦克风阵列,即线性麦克风阵列,各个麦克风位于同一条直线上,常见的为均匀线性阵列(Uniform Linear Array,ULA),如图1所示(以阵列有四个麦克风为例)。均匀线性阵列是最简单的阵列拓扑结构,其麦克风之间距离相等、相位及灵敏度一致。线性阵列只能得到信号的水平方向角信息。二维麦克风阵列,即平面麦克风阵列,各个麦克风分布在一个平面上。常见的为均匀圆阵,麦克风均匀的分布在圆周上,如图1所示(以阵列有四个麦克风为例)。平面阵列可以得到信号的方位角和俯仰角信息。三维麦克风阵列,即立体麦克风阵列,其阵元中心分布在立体空间中,常见的为球阵。由于三维麦克风阵列在消费电子产品中应用相对较少,本文不讨论。

                                                图 1

麦克风阵列涉及到的技术包括去混响、声源定位、波速形成(beamforming)和单通道降噪等。混响是指声音信号遇到墙壁、天花板、地面等障碍物形成反射声,并和直达声相叠加的现象。去混响就是去除那些叠加的声音。声源定位是利用多通道语音信号来计算目标说话人的角度和距离从而实现对目标说话人的跟踪,严格的声源定位是指同时确定说话人的角度(包括方位角、俯仰角)和距离。在消费级的麦克风阵列中,通常关心的是声源到达的方向,也就是波达方向(Direction of Arrival,DOA)。波束形成是对信号进行空域滤波,将多个通道的语音数据变成一个波束(即一个通道)的目标声源,目标声源的信干噪比(SINR)得到提升。单通道降噪是抑制单个通道上的噪声。各个模块的关系如下框图2所示(以四通道为例):

                                        

                                                  图 2

从上图可以看出,先对每个通道上的语音数据做去混响,同时用每个通道上的语音数据做声源定位得到说话人的角度(方位角和俯仰角等),然后用去混响后的语音数据和算出的说话人的角度去做波束形成得到单通道的语音数据,最后对单通道的语音数据做降噪给后续模块使用。我在“远场关键词识别”项目中主要负责单通道降噪。后来由于人手不够,我又负责了波束形成的一种算法(有多种算法可以实现波束形成功能,不同的算法用在不同的应用场景中),即DSB(delay and sum beamforming)算法。本文就讲讲DSB的原理和实现。

波束形成对多通道语音信号进行合并处理,抑制非目标方向的干扰信号,增强目标方向的语音信号。它的输入是麦克风阵列采集的多通道语音信号,它的输出是增强后的单通道语音信号。示意如图3。

                                              图 3

波束形成的算法一般可分为固定波束形成算法和自适应波束形成算法。固定波束形成算法典型的是DSB(Delay and Sum Beamforming),而自适应波束形成算法典型的是MVDR( (minimum variance distorionless response,最小方差无失真响应)。 DSB可以算是最简单的波束形成算法了,它主要分两步,一是各通道语音信号在时间上对齐,二是对各通道语音信号做加权求和,得到单通道语音信号。

先看各通道语音信号在时间上对齐。上文说远场中近似认为各麦克风接收到的声波之间是简单的时延关系,即各麦克风接收到的同一声波在时间上是有先后顺序的,示意如图4。

                        

                                图 4

时间对齐就是使各个麦克风接收的来自目标方向的语音能够在时间上同步。该步需要事先知道到达时间差(TDOA, Time Difference Of Arrival),到达时间差可以根据声源定位算法里求出的方位角和俯仰角以及其他的参数求得。 先看均匀线性阵列时间延时的计算。它通常以最先接收到语音信号的麦克风为参考点。如图5所示,平面波被麦克风接收时与垂直于麦克风直线的方向的夹角为θ,显然麦克风1最先接收到声波,就以麦克风1为参考点,麦克风4最后接收到声波。设麦克风之间的距离为d,所以声波到麦克风2比麦克风1多走了l距离, l = dsinθ。又设光速为c,所以声波到达麦克风2比麦克风1延迟了l/c = dsinθ/c 秒。由于是均匀线阵,每个麦克风之间均延时了l/c秒。

                                      

                                                 图 5

再看均匀圆阵的时间延时的计算。图6是均匀圆阵模型:

                                   

                                图 6

在图6中,信号源映射到XY平面上与X轴的夹角为方位角,表示为α,信号源与Z轴的夹角为俯仰角,表示为θ。各个麦克风均匀的分布在圆周上,以圆心O为参考点计算延时。图7中M轴是信号源射入的方向映射到XY平面上,N轴与M轴垂直。

                       

                             图 7

可知圆周上的麦克风A与其垂直于M轴的A',声波到达的时间一样。A'与圆心O同在M轴上,算A'与O点的延时同均匀线阵。对同一信号源,在N轴右下方的早于圆心O到,在N轴左上方的晚于圆心O到。先求得OA'之间的距离d,延时τ就可以得到了(计算同均匀线阵一样,τ = dsinθ/c, θ为信号源与Z轴的夹角,即俯仰角)。下面看d怎么求。在均匀圆阵上任何位置上计算d的方法都是一样的,数学表达式也是一样的。还是以上图中的A点为例,如图8。

                      

                         图 8

A点映射到M轴上是点A’,d即为OA’的距离。设共有N个麦克风,A点处为第n个,A处的麦克风的方位角为α(方位角为信号源映射到XY平面上与X轴的夹角),∠AOX = 2*pi*n/N (X轴的方向为角度0), 令β = ∠AOA’= ∠AOX – α= 2*pi*n/N – α。所以OA’= OA*cosβ =  R*cos(2*pi*n/N– α),R表示圆阵的半径。所以延时τ = OA’*sinθ = R*cos(2*pi*n/N – α)sinθ/c。τ > 0表示相对于圆心O信号提前到,τ < 0表示相对于圆心O信号延时到。

各个通道的延时得到了,信号在时间上就可对齐了。设Sn(t)表示第n个通道得到的声音信号,那么S_{1}(t + τ_{1})和S_{2}(t + τ_{2})及S_{n}(t + τ_{n})等表示做好时间对齐后的信号。信号对齐好后就可以做第二步,即加权求和,表达式如式1:

其中S(t)表示做完加权后的单通道数据,S_{n}(t + τ_{n})表示各个通道时间对齐后的信号,γ_{n}表示权重,最简单的可以令每个权重值均相同,即γ_{n} = 1/N。

原理讲完了,是在时域下讲的。下面看怎么做软件实现,实现是在频域下做的。用到傅里叶变换的性质:令S(t)的傅里叶变换为S(ω),则S(t + τ)的傅里叶变换为S(ω)e^{j\omega \tau }。时域单通道输出的表达式是式1,对其做傅里叶变换,得到频域单通道输出的表达式式2:

其中ω_{k}为一个具体的频点。得到S(ω_{k})后再做反傅里叶变换,就是时域的值了。

因此DSB算法实现步骤如下:

1) 对时域的Sn(t)做傅里叶变换得到频域值Sn(ω_{k})

2) 根据声源定位算法得到的方位角和俯仰角以及其他等得到延时τ_{n}

3) 根据τ_{n}得到导向矢量(steering vector)e^{j\omega _{k}\tau _{n}}

4) 根据式2得到S(ω_{k})

5) 做傅里叶反变换得到S(t)

为了更好的跟大家沟通,互帮互助,我建了一个讨论群。如您有兴趣,请搜weixin号 david_tym  ,共同交流。谢谢!

### 麦克风阵列波束成形算法实现原理 麦克风阵列通过多个麦克风同步采集声波信号,并利用这些信号的空间分布特性来增强目标方向的声音而抑制其他方向的干扰。对于延迟求和波束形成(DSB),基本思路是在期望的方向上使来自同一声源的不同路径声音同相叠加,在其它方向则相互抵消或减弱。 #### DSB算法具体过程如下: - **去混响声源定位** 对各通道上的语音数据实施初步处理去除环境反射造成的混响效应,同时依据每一路音频流完成声源位置估计获取说话者相对于阵列的角度参数[^1]。 - **延时调整** 根据已知的目标方位信息以及麦克风间的几何布局计算出理论时间差,进而对各路信号施加相应的时间偏移量使得它们能够按照预定模式汇聚于特定空间区域之内。 - **加权求和** 将经过上述步骤修正后的多条声道资料赋予适当权重因子之后累加以获得最终输出序列。此阶段涉及到如何合理分配系数以优化整体性能表现的问题,例如最大化所需监听范围内的信噪比等指标[^4]。 ```python def delay_and_sum_beamforming(signals, delays, weights): """ Perform Delay-and-Sum Beamforming on input signals. :param signals: List of numpy arrays containing the audio data from each microphone channel. :param delays: Array specifying the time delay (in samples) to apply to each channel's signal before summing. :param weights: Weights applied during summation for each channel. :return: The processed single-channel output after applying beamforming. """ aligned_signals = [] max_delay = int(max(delays)) # Apply delays by zero-padding or truncating as necessary for i, sig in enumerate(signals): pad_amount = max_delay - delays[i] if pad_amount >= 0: padded_signal = np.pad(sig[:len(sig)-pad_amount], (int(pad_amount), 0), 'constant') else: padded_signal = sig[-pad_amount:] aligned_signals.append(padded_signal * weights[i]) # Sum all channels together with their respective weightings combined_signal = np.sum(aligned_signals, axis=0) return combined_signal ``` ### 应用场景 该技术广泛应用于各种实际环境中,比如智能音箱、视频会议系统、车载通信设备等领域。它不仅有助于提高远场拾音质量,还能有效改善复杂背景条件下的人机交互体验。此外,在安防监控场合下同样发挥着重要作用——即使处于嘈杂场所也能清晰捕捉到指定区域内人员对话内容;而在医疗保健行业里,则可用于辅助听障患者更好地感知周围世界[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值