Вы можете рассмотреть возможность использования встроенного преобразования Фурье, которое предоставляет MATLAB, вместо того, чтобы писать свое собственное. Смотри http://www.mathworks.se/help/techdoc/math/brentm1-1.html
Обновление
В функции fft
есть несколько специфических особенностей, о которых вы должны знать. Во-первых, генерируемый массив необходимо нормализовать с коэффициентом 1/N
, где N
- это размер массива (это связано с реализацией функции MATLAB). Если вы этого не сделаете, все амплитуды в частотной области будут в N
раз больше, чем они "на самом деле".
Во-вторых, вам нужно как-то найти частоты, которым соответствует каждый элемент в выходном массиве. Третья строка в приведенном ниже коде преобразует массив времен выборки в частоты, которым соответствует массив fourier
.
Эта функция принимает сигнал во временной области и отображает его в частотной области. t
- это временной массив, а y
- это амплитуды сигнала.
function plotSpectrum(t, y)
freqUnit = 1 / (abs(t(2) - t(1)) * length(t));
f = -length(t) * freqUnit : freqUnit : (length(t) - 1) * freqUnit;
oneSidedFFT = fft(y);
fourier = horzcat(oneSidedFFT, oneSidedFFT);
plot(f, abs(fourier));
xlabel('Frequency');
ylabel('Magnitude');