声源定位算法基础:CBF(延时求和波束形成)
在声源定位(Sound Source Localization, SSL)领域,CBF(Conventional Beamforming),即常规波束形成,常被称为 Delay-and-Sum Beamforming(延时求和波束形成)。这是最基础、最常用的基线方法之一。
它的核心思想非常直观:假设一个方向是声源方向,将各通道信号按该方向的理论时延进行对齐后相加;对齐得越好,叠加后的能量越大。通过扫描所有可能的方向(或网格点),就能得到一张'空间能量图',峰值位置即对应声源方位。
为什么 CBF 有用:延时对齐 + 叠加增益
考虑一个由 M 个麦克风组成的阵列。声源发出的波到达不同麦克风时会产生不同的传播时延。如果我们猜测声源来自某个方向 θ:
- 对于猜对的方向,各麦克风的信号在该方向对应的时延补偿后会同相叠加,输出能量明显变大;
- 对于猜错的方向,补偿不正确,叠加时相位或时序错乱,会相互抵消,输出能量较小。
于是我们可以构造一个方向函数 P(θ)(空间谱/波束图),取最大值方向作为定位结果。这就是 CBF 的核心逻辑:扫描 → 对齐 → 求和 → 算能量 → 找峰值。
信号模型(时域)
最经典的时域模型可以表示为每个通道的接收信号是延迟后的声源加上噪声:
$$x_m(t) = s\big(t - \tau_m(\theta)\big) + n_m(t)$$
其中 $s$ 是声源信号,$n_m(t)$ 是第 m 个麦克风的噪声,$\tau_m(\theta)$ 是相对时延。
时延计算:阵列几何 + 声速
远场(平面波):用方向向量算时延
当声源离阵列足够远(相对阵列孔径而言),可近似为平面波。令:
- 第 m 个麦克风位置向量为 $\mathbf{r}_m$
- 声源方向单位向量为 $\mathbf{u}(\theta)$
- 声速为 $c$
则相对时延可写为:
$$\tau_m(\theta) = \frac{\mathbf{r}_m \cdot \mathbf{u}(\theta)}{c}$$
二维平面里常用参数化:
$$\mathbf{u}(\theta) = \begin{bmatrix} \cos\theta \ \sin\theta \end{bmatrix}$$
三维则需结合方位角与俯仰角构造 $\mathbf{u}$。
[图示:麦克风阵列与声源方向关系示意图]
近场(球面波)
若声源距离与阵列孔径同量级,需要近场模型,用'距离差/声速'算时延。例如对空间点 p:
$$\tau_m(\mathbf{p}) = \frac{|\mathbf{p} - \mathbf{r}_m|}{c}$$
这时扫描的是'空间点 p'而不是单纯的方向 θ。
CBF 核心公式(时域与频域)
时域实现
对假设方向 θ,把各通道按 $\tau_m(\theta)$ 做延时补偿并相加:
$$y(t,\theta) = \frac{1}{M} \sum_{m=1}^{M} x_m\big(t + \tau_m(\theta)\big)$$
接着定义空间谱(能量):
$$P(\theta) = \mathbb{E}\left{ |y(t,\theta)|^2 \right}$$
离散实现常用平均能量:
$$P(\theta) = \frac{1}{T} \sum_{t=1}^{T} |y(t,\theta)|^2$$
最终定位就是找峰值:
$$\hat{\theta} = \arg\max_{\theta} P(\theta)$$
频域推导:导向向量 + 协方差矩阵
工程实现中,CBF 常在频域上做,因为延时在频域表现为相位项,能天然支持窄带或多带融合,也更方便做稳健平均。
1. 导向向量(Steering Vector)
对频率 f 和方向 θ:
$$\mathbf{a}(f,\theta) = \begin{bmatrix} e^{-j2\pi f \tau_1(\theta)} \ e^{-j2\pi f \tau_2(\theta)} \ \vdots \ e^{-j2\pi f \tau_M(\theta)} \end{bmatrix}$$

