У меня сигнал с частотой 10 МГц с частотой дискретизации 100 мс / с. Как вычислить FFT в Matlab с точки зрения частоты, когда мой сигнал находится в rawData (длина этого rawData равна 100000), также
Вот мой код,
t=(1:40);
f=10e6;
fs=100e6;
NFFT=1024;
y=abs(rawData(:1000,2));
X=abs(fft(y,NFFT));
f=[-fs/2:fs/NFFT:(fs/2-fs/NFFT)];
subplot(1,1,1);
semilogy(f(513:1024),X(513:1024));
axis([0 10e6 0 10]);
Как вы можете найти соответствующие частоты в другой пост, Я просто отвечу на другие ваши вопросы:
Включение всех ваших данных в большинстве случаев является лучшим вариантом. fft
просто усекает ваши входные данные до запрошенной длины, что, вероятно, не то, что вы хотите. Если вам известен период вашего входного сингла, вы можете укоротить его до целого числа периодов. Если вы этого не знаете, окно (например, Ханнинг) может быть интересным.
Если вы измените NFFT
, вы используете больше данных в расчете БПФ, что может слегка изменить амплитуду для данной частоты. Вы также рассчитываете амплитуду на нескольких частотах между 0
а также Fs/2
(половина частоты дискретизации).
Вопрос не ясен, просьба дать определение N
а также L
,
Это зависит от вашего приложения. Если шум находится на той же частоте, что и ваш сигнал, вы не сможете его отделить. В противном случае вы можете использовать фильтр (например, полосовой пропуск) для извлечения интересующих частот.
Других решений пока нет …