我研究了 GCC-PHAT 算法来估计 2 个麦克风的音频信号的 TDOA。
这是我的 MATLAB 实现:
function cc = freq_xcorr_phat(x,y)
n = length(x)+length(y)-1;
X = fft(x,n);
Y = fft(y,n);
R = X.*conj(Y);
R = exp(1i*angle(R));
cc = ifft(R);
endfunction
我使用模拟立体声音频信号(其中通道 1 是真实的音频录制,通道 2 是具有特定采样延迟的通道 1,在本例中为 7 个采样)来测试此功能。结果 GCC-PHATcc
绘制在下面,我们可以看到它显示了预期的结果,峰值位于-7
:
但是,当我使用真正的立体声音频信号(通道 2 延迟 15 个样本)来测试此功能时,结果 GCC-PHAT 图变得很奇怪。我们可以看到它在 处有一个峰值-15
,但在 处的峰值0
更强:
问题是:
为什么第二个情节0
达到峰值并且比峰值更强-15
?这对我来说没有意义。
ps
- 剧情其实是中间部分
fftshift(cc)
。 - 我的问题可能与这个问题有关。
- 真正的立体声音频信号是从嵌入式系统 (MCU) 录制的。