Вычисление и построение графика спектра сигнала с использованием БПФ на Matlab

Я что-то упускаю при вычислении спектра моего сигнала с использованием FFT на Matlab. Мой код:

%% compute the spectrum of the data (data(t))
L = length(time); % length of the sample
NFFT = 2^(nextpow2(L)-1); % Next power of 2 from length of y
Y = fft(data,NFFT);%/NFFT;%L;
Fs = 1/(mean(time(2:end)-time(1:end-1)));  % compute the sampling frequency
f = Fs/2*linspace(0,1,NFFT/2+1);
loglog(f,2*abs(Y(1:NFFT/2+1)))
title('Single-Sided Amplitude Spectrum of My Data')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

Не могли бы вы сказать мне, где я все испортил?

Я попытался проверить, работает ли алгоритм, используя эти две выборки одного и того же сигнала (одинаковую частоту выборки; в двух разных временных диапазонах 0-10 и 0-100):

fs=1000;
time10 = [0:1/fs:10];
time100 = [0:1/fs:100];
data10 = sin(2*pi*0.23 .*time10)+cos(2*pi*12 .*time10);
data100 = sin(2*pi*0.23 .*time100)+cos(2*pi*12 .*time100);

Я предполагаю, что два спектра должны предложить, но они не делают... Как видно здесь: https://www.dropbox.com/s/wfols9o409pr94u/FFT_spectrum_Stackru.png?dl=0 https://www.dropbox.com/s/a8vmzwto6x4130w/FFT_spectrum_Stackru.fig?dl=0

Спасибо

1 ответ

Решение

Хорошей новостью является то, что нет ничего плохого в том, что вы сами рассчитываете спектр.

Проблема в том, что, глядя на образцы разной длины, вы фактически смотрите на два разных образца. Во временной области их можно рассматривать как результат умножения бесконечно длинной синусоиды с прямоугольным окном разной длины.

В частотной области спектр бесконечно длинного синусоидального сигнала непрерывного времени извивается из спектра прямоугольных окон. При различной длине окна соответствующий спектр этих окон имеет разную ширину (более узкий спектр для более длинных прямоугольных окон). В результате пики в спектре бесконечно длинного синусоидального сигнала будут распространяться по различным полосам пропускания. Это именно то, что вы видите.

Другие вопросы по тегам