接着上次GCC-PHAT算法。
GCC-PHAT只利用了两个麦克风的信息,如果麦数多于两路,就可以使用其他的一些方法进行DoA估计,比如Music,SRP算法等等,前者是一个叫做子空间方法的应用,后者这篇文章会进行介绍。
首先认识一下SRP(steered response power)的概念。SRP可以用FS(filter and sum)beamformer的输出功率来表示,如果FS表达为:
注:实际中通常在短时频域进行计算,因此,上面的表达式我加上了时间项$t$。
其中$\tau_m$表示第$m$个麦克风相对参考麦克风的时间延迟,同上篇GCC-PHAT中的定义,对于线阵而言:
那么:
表示$t$时刻的SRP值,在FS固定的情况下,它只和波达方向$\theta$相关。把$(1)$带入$(3)$,可得:
上式中括号中的表达式即为选取麦克风$p,q$时的GCC:
因此,SRP是所有麦克风两两组合的GCC之和:
若选取$G(\omega)$为$\frac{1}{X(\omega, t)}$,仅仅保留相位信息,那么此时上式的结果称为SRP-PHAT。
表达式$(4)$中,将$\tau_q - \tau_p$写成$\theta$的函数:
令
将GCC对应的表示为时间$t$和波达方向$\theta$的函数:
GCC那篇文章已经提过,对$\theta \in [0, \pi]$进行采样,上述结果被称为augular spectrum。在这里,$\text{SRP}_\text{out}(t, \theta)$亦然。
根据式$(5)$,如果已经有了GCC(-PHAT)的实现,得到对应的SRP(-PHAT)并不难,做一次遍历即可:
1 | aug = zeros(num_frames, num_doa); |
由于SRP的计算涵盖了所有可能组合的GCC值,因此,得到的结果相比GCC稳定性更高,比如4麦的线阵,我对比GCC-PHAT(channel 1, 4)的augular spectrum和SRP-PHAT的结果如下:
GCC-PHAT
SRP-PHAT
图中黄色的斑点表示值大的区域,不难看出,后者augular spectrum的peak点更加明显,非peak区域的数值分布也相对平稳,因此在后处理进行DoA决策的时候,往往可靠性更高。
如果是单一说话人,且说话较为连续时,往往只需要沿时间轴做个平均,之后找到峰值对应的DoA即可。如果涉及到多个说话人,存在背景噪声,且说话不连续的情况,那么角度谱显示的信息就相对较多,比如说话人数量,说话区间,噪声区间等等,此时,如何利用这些信息进行鲁棒的后处理就显得尤为关键。