




虽然上述定义在概念上很有用,但在实践中,SRP 是使用每个麦克风的L 维样本的帧或向量来计算的。

其中

时间到达延迟



当声源和麦克风共线且声源不在麦克风之间时,麦克风对的最大可能TDOA为:

最后,通过确定多个麦克风对产生的双曲线的交点,可以估计声源位置。
两个麦克风之间的相关性可以估计为麦克风信号帧之间互相关的峰值的幅角,一般会使用称为GCC-PHAT的算法,更详细的介绍可以参考使用TDOA进行声源定位,这里直接给出计算公式

其中相位变换(Phase Transform,PHAT)主要通过白化频率成分,从而使相关峰更加尖锐,如下所示。

然而,在混响或噪声环境下,互相关函数可能会出现多个峰值,导致 TDOA 估计和后续基于三角测量的方法变得不可靠。SRP使用将每个互相关值与空间中的候选位点关联起来获得更鲁棒的结果,其计算公式为

可以看出SRP算法为每对麦克风之间GCC-PHAT在不同频率和时间延迟上的求和,在实践中,所使用的频率可能低于奈奎斯特频率,以防止出现空间混叠。SRP所有候选位置的 SRP 函数,并选择产生最大 SRP 值的位置作为估计位置,如下所示声源位置估计为(100°, 60°)。

优化方向
完整的SRP计算量是比较大的,因此SRP-PHAT的优化方向之一就是减少计算量,主要通过减少搜索位置或者并行化来实现;另一个优化方向就是提升算法性能,这部分工作主要通过优化广义互相关函数;此外还可以添加前处理如VAD,或者后处理维纳滤波来进一步提升算法性能。

最后我们模拟下SRP=PHAT的效果,首先创建一个8x8的房间,其中央放置一个4个麦克风的圆形阵列,声源在其正前方,T60设为1.2s,从频谱中发现因为混响导致的拖尾现象已经比较严重了。经过SRP-PHAT计算后,其最大值出现在90°的位置,与声源位置一致。


本文相关代码地址:https://github.com/Ryuk17/SpeechAlgorithms/tree/master/SoundSourceLocalization
参考文献:
[1].https://arxiv.org/pdf/2405.02991
[2].https://en.wikipedia.org/wiki/Steered-response_power
[3].https://pyroomacoustics.readthedocs.io/en/pypi-release/pyroomacoustics.doa.srp.html
