Skip to main content

FFT Magnitude and Phase Spectrum using MATLAB


 

MATLAB Code 

% Developed by SalimWireless.Com

clc;
clear;
close all;

% Configuration parameters
fs = 10000; % Sampling rate (Hz)
t = 0:1/fs:1-1/fs; % Time vector creation

% Signal definition
x = sin(2 * pi * 100 * t) + cos(2 * pi * 1000 * t);

% Calculate the Fourier Transform
y = fft(x);
z = fftshift(y);

% Create frequency vector
ly = length(y);
f = (-ly/2:ly/2-1) / ly * fs;

% Calculate phase while avoiding numerical precision issues
tol = 1e-6; % Tolerance threshold for zeroing small values
z(abs(z) < tol) = 0;
phase = angle(z);

% Plot the original Signal
figure;
subplot(3, 1, 1);
plot(t, x, 'b');
xlabel('Time (s)');
ylabel('|y|');
title('Original Messge Signal');
grid on;

% Plot the magnitude of the Fourier Transform
subplot(3, 1, 2);
stem(f, abs(z), 'b');
xlabel('Frequency (Hz)');
ylabel('|y|');
title('Magnitude of the Fourier Transform');
grid on;

% Plot the phase of the Fourier Transform
subplot(3, 1, 3);
stem(f, phase / pi, 'b');
xlabel('Frequency (Hz)');
ylabel('Phase (radians)');
title('Phase of the Fourier Transform');
grid on;
web('https://www.salimwireless.com/search?q=fourier%20transform', '-browser');


Output 


 

 

 

Copy the MATLAB Code above from here

 

Another MATLAB Code

clc;
clear;
close all;

% Parameters
fs = 100;           % Sampling frequency
t = 0:1/fs:1-1/fs;  % Time vector

% Signal definition
x = cos(2*pi*15*t - pi/4) - sin(2*pi*40*t);

% Compute Fourier Transform
y = fft(x);
z = fftshift(y);

% Frequency vector
ly = length(y);
f = (-ly/2:ly/2-1)/ly*fs;

% Compute phase

z(abs(z) < 1e-6) = 0;
phase = angle(z);

% Plot magnitude of the Fourier Transform
figure;
subplot(2, 1, 1);
stem(f, abs(z), 'b');
xlabel('Frequency (Hz)');
ylabel('|y|');
title('Magnitude of Fourier Transform');
grid on;

% Plot phase of the Fourier Transform
subplot(2, 1, 2);
stem(f, phase, 'b');
xlabel('Frequency (Hz)');
ylabel('Phase (radians)');
title('Phase of Fourier Transform');
grid on;

web('https://www.salimwireless.com/search?q=fourier%20transform', '-browser');


 

Output 







Copy the MATLAB Code above from here

 

Why use fftshift? In MATLAB, the fft function returns the DC component at the beginning of the array. To visualize a standard double-sided spectrum where 0 Hz is in the center, we use fftshift. This is essential for analyzing signal symmetry in wireless communications and signal processing.

Handling Phase Noise: Notice the tol = 1e-6 line. This is a pro-tip! We zero out very small magnitude values before calculating the phase to avoid "random" phase noise caused by floating-point errors.

Real-World Applications of FFT in MATLAB

  • Wireless Communications: Used in OFDM (5G/Wi-Fi) to split data across multiple sub-carriers.
  • Audio Engineering: Analyzing frequency response for noise cancellation and equalization.
  • Medical Imaging: Processing MRI and Ultrasound data using Fast Fourier Transforms.
  • Radar Systems: Determining the velocity of objects via Doppler shift analysis.


Interactive Online Simulators

Frequently Asked Questions

Q: Why is my magnitude plot showing peaks at the wrong frequency?
A: Ensure your sampling frequency (fs) is at least twice the highest frequency of your signal (Nyquist Theorem).

Q: How do I increase frequency resolution?
A: Increase the number of samples (N) or the time duration of your signal vector.


Further Reading

  1. Fourier Transform of Sine or Cosine
  2. Definition of the Fourier Series
  3. Continuous and Discrete Time Fourier Transform
  4. Cooley-Tukey algorithm for Fast Fourier Transform (FFT) in MATLAB
  5. Fourier Spectral Analysis
  6. Power Spectral Density Calculation Using FFT in MATLAB
  7. Autocorrelation and Periodicity of a Signal


Power Spectral Density (PSD)

Analyzing Signal Power in the Frequency Domain

In fading channels, **Power Spectral Density (PSD)** is critical because it describes how the power of your signal (or noise) is distributed across frequencies. Unlike a standard Fourier Magnitude, PSD provides a normalized view of power relative to the sampling rate.

Calculation Steps:

  1. Compute the FFT of the signal \(x(t)\).
  2. Calculate the Absolute Magnitude.
  3. Square the magnitude to get the Power Spectrum.
  4. Divide by \((fs \cdot N)\) to find the Density.

The Mathematical Model

\[ PSD = \frac{|FFT(x)|^2}{fs \cdot N} \]
\(fs\): Sampling Frequency
(Determines frequency range)
\(N\): Total Samples
(Determines resolution)
Frequency Resolution (\(\Delta f\)):
\[ \Delta f = \frac{fs}{N} \]

Note: Increasing \(N\) improves frequency resolution, while increasing \(fs\) expands the frequency range (Nyquist limit).

Read More & Access Interactive PSD Simulator

Contact Us

Name

Email *

Message *