GCC-PHAT算法
GCC-PHAT是一个计算AOA的算法。
这里的AOA是指信号入射到与阵列垂直的线的夹角。
画个图做个示意:
这里AB为两个microphone, 虚线为入射信号,这里计算AOA的前提是信号是平面波,即两个虚线是平行的。
那么AOA即为, 范围为[-90,90]. 与AB垂直时,角度为0.
这里AB的距离为L, 为到达时间差,c为声音速度。
假设到达两个microphone的信号为:
- 用cross-correlation计算
- 计算AOA
这里有一个问题,就是当信噪比低时用cross-correlation直接计算得到的D不是太准。那么有一种方法,就是可以用PSD去做一个weight,效果会好很多。
我们知道信号相关与PSD是一个傅里叶变换对,那么先求PSD:
- 求PSD
- normalize PSD,再做傅里叶变换得到weight后的相关
3.求D
实践证明这种方式效果更好。需要注意的是,这里得到的只是AOA, 并不是对于平面上的旋转角和仰角。这个角的名字叫broadside angle of arrival
, 三个角中,知道两个才能求另外一个,详情可以看这里。
只有两个microphone只能求AOA,但是三个不共线的microphone就可以求其他的角度了。
对于任意一对麦克风k,j,有:
这里u是信号传播的单位向量。通过三对麦克风我们就可以求出u, 当然,如果你的麦克风数量更多,可以用最小二乘算出更精确的值;那么最后就可以求出旋转角和仰角:
这里α 是旋转角, θ 是仰角。
最后聊一下AOA的精度:
前面有
也就是说
那么最小为, 那么
这里取c=340m/s, L=0.065m,f=44100Hz,得到
°