我必须计算两个信号之间的时间延迟。我使用的是 GCC-PHAT 方法。首先,我将信号切割成更小的部分(约 0.5 秒),然后尝试计算延迟。当我在图表上显示这两个信号时,延迟非常明显。
问题是对于那个长信号的某些部分,我的程序计算了正确的延迟,但对于某些部分,延迟是完全不正确的。在这两种情况下,当我在图表上显示这两个信号时,延迟似乎非常明显。
相关代码:
duration=20000
a=hanning(duration+1)
[signal1,Fs] = audioread(mic1);
[signal2,Fs] = audioread(mic2);
start=1000;
stop=start+duration;
x1=[a.*signal1(start:stop)];
x2=[a.*signal2(start:stop)];
A=fft(x1);
B=fft(x2);
PHAT=A.*conj(B)./(abs((A).*conj(B)));
result=abs(ifft(PHAT));
2)不正确的结果:
我在一个封闭的房间里录制了这些信号,所以可能还有混响。难道我做错了什么?或者这种方法在我的情况下不是很有效?
我也尝试对信号进行预过滤,但结果是一样的。如果我改变信号的长度,也没有任何改善。

