私は matlab と FFT が初めてで、Matlab FFT の例を理解したいと思っています。今のところ、主な質問が 2 つあります。
1) X 軸 (周波数) が 500 で終わるのはなぜですか? それ以上の周波数がないこと、または単に無視されていることをどうやって知ることができますか?
2) 周波数が 0 から 500 の間であることをどのように知ることができますか? FFT は、周波数がどの範囲にあるかを教えてくれませんか? FFT は周波数なしで振幅値のみを返しますか?
ヒントをありがとう!
問題の例:
1000 Hz でサンプリングされたデータを考えてみましょう。振幅 0.7 の 50 Hz 正弦波と振幅 1 の 120 Hz 正弦波を含む信号を形成し、ゼロ平均のランダム ノイズでそれを破損します。
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sample time
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t)); % Sinusoids plus noise
plot(Fs*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')
周波数領域に変換すると、ノイズを含む信号 y の離散フーリエ変換が高速フーリエ変換 (FFT) によって求められます。
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2+1)))
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')