MATLAB에서 GCC-PHAT를 사용하여 두 개의 음향 신호 사이의 시간 지연 추정을 계산하려고합니다. 그러나 fft/ifft를 사용하여 GCC-PHAT를 코딩하는 것은 여전히 어려우며 시간 지연 예측은 항상 0입니다. 나는 인터넷 검색을하고 있지만 아직 성공하지 못했다. 내 코드는 다음과 같이 두 개의 정현파가있는 간단한 예제로 시연됩니다.MATLAB의 GCC-PHAT (아직 도전 중)
Fs = 8000;
dt = 1/Fs;
f1 = 100;
tdelay = 0.002;
t3 = (0:dt:(1)-dt)';
x = cos(2*pi*f1*t3);
y = cos(2*pi*f1*(t3-tdelay));
n=2*length(x)-1;
N=2^nextpow2(n);
xfft = fft(x,N);
yfft = fft(y,N);
df=Fs/N;
sampleIndex = -N/2:N/2-1;
f=sampleIndex*df;
R=xfft.*conj(yfft);
c=R./abs(R);
ic=fftshift(ifft(c));
figure; plot(f,ic)
[~,ind]=max(abs(ic));
lagDiff=f(ind);
timeDiff=lagDiff/Fs;
은 내가 GCC-PHAT가 R에 의해 코딩 될 수 있음을 이해하고,이 게시물 https://dsp.stackexchange.com/questions/31956/gcc-phat-generalized-cross-correlation-matlab
에 명시된대로 어떤 경우에 실패하는 경우 그러나, R 코드가 강력하지 않습니다 작동합니다. 예를 들어, 위의 링크 코드에서 f=100Hz
및 tdelay=0.01
또는 f=50Hz
및 tdelay=0.01
의 결과가 잘못되었습니다.
Matlab에서 GCC-PHAT를 성공적으로 해결했거나 라이선스가있는 기능인 gccphat()을 알고있는 사람이라면 누구든지이 문제에 대해 더 자세히 설명 할 수 있습니까? 이 겉으로보기에는 쉬운 문제에 대해 많은 게시물이 우려했지만 아직 아직 해결되지 않았습니다.