MATLAB Answers

Single sided spectrum of vector y obtained using fft

5 views (last 30 days)
how to plot a single sided spectrum of vector y obtained using fft?


Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 1 Sep 2020
The way I usually calculate and plot it:
t = linspace(0, 1, 1E+4);
s = sum(sin([0; 100; 200; 300]*2*pi*t*10)) .* randn*10;
Ts = mean(diff(t)); % Sampling Interval
Fs = 1/Ts; % Sampling Frequency
Fn = Fs/2; % Nyquist Frequency
L1 = numel(t);
FTs1 = fft(s)/L1; % FFT Of Original Signal
Fv1 = linspace(0, 1, fix(L1/2)+1)*Fn; % Frequency Vector
Iv1 = 1:numel(Fv1); % Index Vector
L2 = 2^nextpow2(L1);
FTs2 = fft(s,L2)/L1; % FFT Of Zero-Padded Signal
Fv2 = linspace(0, 1, fix(L2/2)+1)*Fn; % Frequency Vector
Iv2 = 1:numel(Fv2); % Index Vector
plot(Fv1, abs(FTs1(Iv1))*2)
title('FFT of Original Signal')
xlabel('Frequency (Hz)')
plot(Fv2, abs(FTs2(Iv2))*2)
title('FFT of Zero-Padded Signal')
xlabel('Frequency (Hz)')
This also demonstrates a way to increase the frequency resolution of the fft result by zero-padding it.

More Answers (1)

Deepak Gupta
Deepak Gupta on 1 Sep 2020
Edited: Deepak Gupta on 1 Sep 2020
You can refer FFT Documentation. There are multiple examples to obtain this.


Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!