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));
この結果は私にはほとんど意味がありません。これは正弦波だからです(cos波ではありません)。441hz ビンの値は 1/2*pi = 1.57079 になると思います。代わりに、(441, -1.539) から (445, 1.603) へのほぼ不連続なジャンプが見られます。441 が正しい値からかけ離れているのはなぜですか? 445がこんなに近いのはなぜ?
441 hz 以外のすべてのビンの値は、私には謎です。unwrap(angle(sFFT)) や atan2(imag(sFFT), real(sFFT)); など、位相を回復する他の方法もいくつか試しました。これらは出力を変更しますが、私には意味がありません。441 以外のビンが 0 以外の値になるのはなぜですか (abs(FFT) が示すように?)。441 ビンが近いのに正しい値ではないのはなぜですか?
助けてくれてありがとう!