How to determine and adjust the x axis after taking the 1D FFT?
조회 수: 46 (최근 30일)
표시 이전 댓글
I am trying to take an FFT, but have trouble figuring out the x axis. The time vector is of length N = 100000. The vector has uniformly spaced time points, i.e. dt = t(2)-t(1). How do I find out what the values of f should be? And how can I change the spacing df?
댓글 수: 0
채택된 답변
Star Strider
2022년 12월 19일
I usually do something like this —
t = linspace(0, 100, 10000); % Time Vector
s = sum(sin([1 5 10 15 20 25 30 35 40 45].'*2*pi*t)); % Signal (Here A Vector)
figure
plot(t, s)
grid
xlabel('Time')
ylabel('Amplitude')
L = numel(t); % Length Of The Signal Vector
dt = t(2)-t(1); % Sampling Time Increment
Fs = 1/dt; % Sampling Frequency
Fn = Fs/2; % Nyquist Frequency
NFFT = 2^nextpow2(L); % For Efficiency
FTs = fft(s(:).*hamming(L),NFFT)/L; % Fourier Transform (Windowing Not Required, Shown For Information)
Fv = linspace(0, 1, NFFT/2+1)*Fn; % Frequency Vector For One-Sided Fourier Transform Plot
Iv = 1:numel(Fv); % Index Vector (For Convenience)
figure
plot(Fv, abs(FTs(Iv))*2) % Multiply By 2 To Correct For Energy Division Between Positive And Negative Frequencies
grid
xlabel('Frequency (Units)')
ylabel('Magnitude (Units)')
I am not certain what you are doing, however something like this should work.
.
댓글 수: 4
추가 답변 (1개)
Paul
2022년 12월 19일
Hi L'O.G.
Let NFFT = numel(Y)
Let Ts = dt = t(2) - t(1) and Fs = 1/Ts.
Then the frequency vector that corresponds to the values in Y is given by
f = (0: (NFFT-1))/NFFT*C
where the proportionality constant C is often one of:
C = 1 % cycle/sample
C = 2*pi % rad/sample
C = Fs % cycle/sec, i.e. Hz
C = 2*pi/Ts % = 2*pi*Fs rad/sec.
f = (-(NFFT-1)/2 : (NFFT-1)/2)/NFFT*C % N odd
f = ((-NFFT/2) : (NFFT/2-1))/NFFT*C % N even
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Spectral Measurements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!