欢迎光临
我们一直在努力

声源定位算法1----CBF(1)

实习加工作大概三年时间,最近感觉之前的知识有些已经遗忘,所以开个博客记录自己的一些工作。博客内容由GPT和我共同编辑,主要目的是为了记录,防止自己遗忘,也希望博客的内容有些能对大家有所帮助。

#*******************************************************************************************#

特别说明:如有侵权告知删除,谢谢。

言归正传:

声源定位(Sound Source Localization, SSL)里最基础、最常用的基线方法之一,就是 CBF(Conventional Beamforming),也叫 Delay-and-Sum Beamforming(延时求和波束形成)。它的思想:假设一个方向是声源方向,把各通道按这个方向的理论时延对齐后相加;对齐得越好,叠加后的能量越大。扫描所有方向(或网格点)后,就能得到一张“空间能量图”,峰值位置对应声源。

1. 为什么 CBF 有用:延时对齐 + 叠加增益

考虑一个由 M个麦克风组成的阵列。一个声源发出的波到达不同麦克风会产生不同的传播时延。如果我们猜测声源来自某个方向 θ:

  • 对于“猜对的方向”,各麦克风的信号在该方向对应的时延补偿后会同相叠加,输出能量明显变大;

  • 对于“猜错的方向”,补偿不正确,叠加时相位/时序错乱,会相互抵消,输出能量较小。

于是我们可以构造一个方向函数 P(θ)(空间谱/波束图),取最大值方向作为定位结果。这就是 CBF 的核心逻辑:扫描 → 对齐 → 求和 → 算能量 → 找峰值。

2. 信号模型(时域):每个通道是“延迟版声源 + 噪声”

最经典的时域模型是:

x_m(t) = s\\big(t - \\tau_m(\\theta)\\big) + n_m(t)

3. 时延计算:阵列几何 + 声速

3.1 远场(平面波):用方向向量算时延

当声源离阵列足够远(相对阵列孔径而言),可近似为平面波。令:

  • 第 m 个麦克风位置向量为 rm

  • 声源方向单位向量为 u(θ)

  • 声速为 c

则相对时延可写为:

\\tau_m(\\theta) = \\frac{\\mathbf{r}_m \\cdot \\mathbf{u}(\\theta)}{c}

二维平面里常用参数化:

\\mathbf{u}(\\theta) = \\begin{bmatrix} \\cos\\theta \\\\ \\sin\\theta \\end{bmatrix}

三维则用方位角/俯仰角构造 u。

附网上示意图

3.2 近场(球面波)

若声源距离与阵列孔径同量级,需要近场模型,用“距离差/声速”算时延,例如对空间点 p:

\\tau_m(\\mathbf{p}) = \\frac{\\|\\mathbf{p} - \\mathbf{r}_m\\|}{c}

这时扫描的是“空间点 p”而不是方向 θ。


4. CBF 核心公式(时域):Delay-and-Sum

对假设方向 θ,把各通道按τm​(θ) 做延时补偿并相加:

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)


5. 频域推导:导向向量 + 协方差矩阵

在工程实现里,CBF 很常在频域上做,因为:

  • 延时在频域是相位项 

  • 能天然做窄带/多带融合

  • 更方便做稳健平均(协方差估计)

5.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}

把各通道频域观测写成向量:

\\mathbf{x}(f) = \\begin{bmatrix} X_1(f) \\\\ X_2(f) \\\\ \\vdots \\\\ X_M(f) \\end{bmatrix}

5.2 协方差矩阵

\\mathbf{R}_{xx}(f) = \\mathbb{E}\\left\\{ \\mathbf{x}(f)\\mathbf{x}^H(f) \\right\\}

5.3 CBF 空间谱(窄带)

P_{\\mathrm{CBF}}(f,\\theta) = \\mathbf{a}^H(f,\\theta)\\, \\mathbf{R}_{xx}(f)\\, \\mathbf{a}(f,\\theta)

如果是宽带信号,可在多个频点上累加/平均:

P_{\\mathrm{CBF}}(\\theta) = \\sum_{f \\in \\mathcal{F}} \\mathbf{a}^H(f,\\theta)\\, \\mathbf{R}_{xx}(f)\\, \\mathbf{a}(f,\\theta)

F 可选在信噪比较好的频带范围内。


6. 实现步骤(算法流程)

以“远场二维角度扫描”为例(θ∈[−180°,180°]):

  • 输入:多通道音频 xm[n],采样率 fs​,麦克风坐标 rm

  • 设定扫描角:θk(例如每 1° 或 2° 一点)

  • 对每个 θk

    • 计算 τm(θk)

    • 做延时补偿并求和得到 y[n,θk],或算导向向量并形成空间谱

    • 计算能量 P(θk)

  • 输出:\\hat{\\theta} = \\arg\\max_{\\theta} P(\\theta)

  • 下篇博客讲解算法实现

    赞(0)
    未经允许不得转载:171主机测评 » 声源定位算法1----CBF(1)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址