Я пытаюсь восстановить фазы простой (аудио) сигнала в MATLAB: В MATLAB я следующее:Восстановление фазы из FFT
% 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). Я ожидаю увидеть 1/2 * pi = 1.57079 для значения 441hz bin. Вместо этого я вижу почти прерывистый переход от (441, -1.539) к (445, 1.603). Почему 441 пока не соответствует правильному значению? Почему 445 так близко?
Значение для всех бункеров, кроме 441 hz, является для меня загадкой. Я также пробовал несколько других методов восстановления фазы, включая разворот (угол (sFFT)) и atan2 (imag (sFFT), real (sFFT)); Они меняют результат, но также не имеют для меня никакого смысла. Почему бины, кроме 441, имеют значение, но 0 (как показывает абс (FFT)?). Почему 441 бит закрывается, но не правильное значение?
Спасибо за помощь!
Вы попробовали 'unwrap'? он корректирует фазовые углы для получения более плавных фазовых графиков, см. http://www.mathworks.com/help/matlab/ref/unwrap.html – bla