Understanding this FFT Graph
84 views (last 30 days)
Show older comments
David Kendal
on 23 May 2022
Commented: Star Strider
on 24 May 2022
I have plotted a graph using FFT function; using a sweep sine wave.
The code is generic NFFT = 2^nextpow2(L) and using absolute values to plot FFT values on the Y axis.
My question is; what would the label be for the Y-axis and secondly, is the X axis just frequency in the time domain?
Any help greatly appreciated.
T=5; %size of window
fs=44100; %sampling frequency
df=1/T; %frequency res
dt=1/fs; %time resolution
t=(0:+dt:T-dt); %time vector
df_t=500; %swept rate (Hz/seconds)
% pre-allocate size of t:
sweptsin = zeros(size(t));
for i=1:+1:length(t)
%i=i+1;
if(i==1) %initialise f and t.
f=20; ti=0;
else
ti=ti+dt; %time increment
f=f+df_t*dt; %freq increment
end
w=2*pi*f; %omega
sweptsin(i)=sin(w*ti); %swept sine wave
end
sound(sweptsin, fs)
figure
y = cos(2*pi*f*t)+randn(size(t));
L = 1000;
NFFT = 2^nextpow2(L);
Y = abs(fft(y,NFFT))/L;
f = fs/2*linspace(0,1,NFFT/2+1);
plot(f,2*abs(Y(1:NFFT/2+1)))
xlim([0 22050])
ylim([0 0.8])
0 Comments
Accepted Answer
Star Strider
on 24 May 2022
‘My question is; what would the label be for the Y-axis and secondly, is the X axis just frequency in the time domain?’
The Y-axis here would be labeled ‘Amplitude’. It represents the amplitude of the signal components at each frequency. (If it were in decibels, it would be either 'dB' or 'Power (dB)' since converting it to decibels implicitly squares the amplitude creating units of power, and then takes the base-10 logarithm of it.)
The X-axis is the frequency axis, and the units are in cycles/(time unit). The frequency vector is calculated to extend from D-C (zero cycles/(time unit)) to the Nyquist frequency (one-half the sampling frequency), the highest frequency that can be uniquely determined in a sampled signal. The sampling frequency (samples/(time unit)) is the inverse of the sampling interval ((time units)/sample), relating the time vector to the frequency vector.
In a ‘normalised’ signal, the frequency extends from zero to π randians/(time unit). The frequency vector is calculated with respect to the length of the fft result, so that each element of the fft result is assigned a specific frequency between zero and the Nyquist frequency (or π). If the time unit is in units of seconds, the frequency vector is units of Hz.
T=5; %size of window
fs=44100; %sampling frequency
df=1/T; %frequency res
dt=1/fs; %time resolution
t=(0:+dt:T-dt); %time vector
df_t=500; %swept rate (Hz/seconds)
% pre-allocate size of t:
sweptsin = zeros(size(t));
for i=1:+1:length(t)
%i=i+1;
if(i==1) %initialise f and t.
f=20; ti=0;
else
ti=ti+dt; %time increment
f=f+df_t*dt; %freq increment
end
w=2*pi*f; %omega
sweptsin(i)=sin(w*ti); %swept sine wave
end
sound(sweptsin, fs)
figure
y = cos(2*pi*f*t)+randn(size(t));
L = 1000;
NFFT = 2^nextpow2(L);
Y = abs(fft(y,NFFT))/L;
f = fs/2*linspace(0,1,NFFT/2+1);
plot(f,2*abs(Y(1:NFFT/2+1)))
xlim([0 22050])
ylim([0 0.8])
xlabel('Frequency')
ylabel('Amplitude')
.
0 Comments
More Answers (1)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!