我正在尝试在 matlab 中恢复简单(音频)信号的相位:在 matlab 中,我执行以下操作:
% This wave is perfectly periodic in the sample. That is,
% there are exactly 1000 periods.
swave = sin( 2 * pi * (0:10000) * 441/44100);
% Find the fft
sFFT = fft(swave);
% Remove the duplicate data in the FFT
sFFT = sFFT(1:length(sFFT)/2);
% Take a look a the amplitudes from the FFT and it checks out
freqs = 44100/ 2*linspace(0,1,length(sFFT);
plot(freqs, abs(sFFT));
% Now to get the phase
plot(freqs, angle(sFFT));
这个结果对我来说几乎没有意义。因为这是一个 sin 波(不是 cos 波)。对于 441hz bin 的值,我希望看到 1/2*pi = 1.57079。相反,我看到从 (441, -1.539) 到 (445, 1.603) 的几乎不连续的跳跃。为什么 441 与正确值相差甚远?为什么445这么近?
除了 441 赫兹之外,所有分档的值对我来说都是一个谜。我还尝试了其他几种恢复相位的方法,包括 unwrap(angle(sFFT)) 和 atan2(imag(sFFT), real(sFFT)); 这些改变了输出,但对我来说也没有任何意义。为什么除了 441 之外的 bin 是除 0 之外的任何值(如 abs(FFT) 所示?)。为什么 441 bin 关闭但不是正确的值?
谢谢您的帮助!