Skip to main content

Power Spectral Density Calculation Using FFT in MATLAB


Power spectral density (PSD) tells us how the power of a signal is distributed across different frequency components, whereas Fourier Magnitude gives you the amplitude (or strength) of each frequency component in the signal.


Steps to calculate the PSD of a signal

  1. Firstly, calculate the first Fourier transform (FFT) of a signal
  2. Then, calculate the Fourier magnitude of the signal
  3. The power spectrum is the square of the Fourier magnitude
  4. To calculate power spectrum density (PSD), divide the power spectrum by the total number of samples and the frequency resolution. {Frequency resolution = (sampling frequency / total number of samples)}

Sampling frequency (fs): The rate at which the continuous-time signal is sampled (in Hz).
Total number of samples (N): The number of samples in the time-domain signal used for the DFT/FFT.

Suppose:
    Sampling frequency = 1000 Hz
    Number of samples = 500
Then:
Δf = 1000 / 500 = 2 Hz
This means the FFT result will contain frequency components spaced 2 Hz apart: 0 Hz, 2 Hz, 4 Hz, ..., up to fs.

  1. Increasing the number of samples (N) → improves frequency resolution
  2. Increasing the sampling frequency (fs) → worsens frequency resolution, but increases the total frequency range analyzed

MATLAB Script


% The code is written by SalimWireless.com
clear
close all
clc

fs = 1000; % sampling frequency
T = 1; % total recording time
L = T .* fs; % signal length
tt = (0:L-1)/fs; % time vector
ff = (0:L-1)*fs/L;
y = sin(2*pi*50 .* tt) + sin(2*pi*80 .* tt); y = y(:); % reference sinusoid

% Allow user to input SNR in dB
snr_db = input('Enter the SNR (in dB): '); % User input for SNR
snr_linear = 10^(snr_db / 10); % Convert SNR from dB to linear scale

% Calculate noise variance based on SNR
signal_power = mean(y.^2); % Calculate signal power
noise_variance = signal_power / snr_linear; % Calculate noise variance

% MINIMAL CHANGE 1: Multiply by standard deviation (sqrt of variance) for correct noise power
x = sqrt(noise_variance)*randn(L,1) + y; x = x(:); % sinusoid with additive Gaussian noise

% Plot results
figure

% Time-domain plot of the original signal
subplot(311)
% MINIMAL CHANGE 2: Swapped plot arguments and corrected labels
plot(tt, y,'r')
title('Original Message signal sin(2Ï€ * 50)t + sin(2Ï€ * 80)t (Time Domain)')
legend('Original signal')
xlabel('Time (s)')
ylabel('Amplitude')

% Manual Power Spectral Density plots
subplot(312)
[psd_y, f_y] = manualPSD(y, fs); % PSD of the original signal
plot(f_y,10*log10(psd_y),'r')
title('Power Spectral Density')
legend('Original signal PSD')
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')

% Manual Power Spectral Density plots
subplot(313)
[psd_x, f_x] = manualPSD(x, fs); % PSD of the noisy signal
plot(f_x,10*log10(psd_x),'k')
title('Power Spectral Density')
legend('Noisy signal PSD')
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')
web('https://www.salimwireless.com/search?q=psd%20fourier%20transform', '-browser'); 

% Manual PSD calculation function
function [psd, f] = manualPSD(signal, fs)
 N = length(signal); % Signal length
 fft_signal = fft(signal); % FFT of the signal
 fft_signal = fft_signal(1:N/2+1); % Take only the positive frequencies
 psd = (1/(fs*N)) * abs(fft_signal).^2; % Compute the power spectral density
 psd(2:end-1) = 2*psd(2:end-1); % Adjust the PSD for the one-sided spectrum
 f = (0:(N/2))*fs/N; % Frequency vector
end

    

Output

Power Spectral Density Welch method output plot
Power Spectral Density output visualization

Further Reading

  1. Bartlett Method for Spectral Estimation in MATLAB
  2. Periodogram for Spectral Estimation in MATLAB
  3. Welch Method for Spectral Estimation in MATLAB
  4. Calculation of SNR from FFT bins in MATLAB
  5. Add AWGN Directly to PSD in MATLAB
  6. How to Find the Fourier Transform of Any Signal
  7. Fourier Spectral Analysis
  8. Fourier Transform | Electronics Communication
  9. FFT Magnitude and Phase Spectrum using MATLAB
  10. Spectral Estimation Methods - Periodogram, Correlogram, Welch, Bartlett and Blackman-Tukey Methods

People are good at skipping over material they already know!

View Related Topics to







Contact Us

Name

Email *

Message *

Popular Posts

BER vs SNR for M-ary QAM, M-ary PSK, QPSK, BPSK, ...(MATLAB Code + Simulator)

📘 Overview of BER and SNR 🧮 Online Simulator for BER calculation of m-ary QAM and m-ary PSK 🧮 MATLAB Code for BER calculation of M-ary QAM, M-ary PSK, QPSK, BPSK, ... 📚 Further Reading 📂 View Other Topics on M-ary QAM, M-ary PSK, QPSK ... 🧮 Online Simulator for Constellation Diagram of m-ary QAM 🧮 Online Simulator for Constellation Diagram of m-ary PSK 🧮 MATLAB Code for BER calculation of ASK, FSK, and PSK 🧮 MATLAB Code for BER calculation of Alamouti Scheme 🧮 Different approaches to calculate BER vs SNR What is Bit Error Rate (BER)? The abbreviation BER stands for Bit Error Rate, which indicates how many corrupted bits are received (after the demodulation process) compared to the total number of bits sent in a communication process. BER = (number of bits received in error) / (total number of tran...

BER performance of QPSK with BPSK, 4-QAM, 16-QAM, 64-QAM, 256-QAM, etc (MATLAB + Simulator)

📘 Overview 📚 QPSK vs BPSK and QAM: A Comparison of Modulation Schemes in Wireless Communication 📚 Real-World Example 🧮 MATLAB Code 📚 Further Reading   QPSK provides twice the data rate compared to BPSK. However, the bit error rate (BER) is approximately the same as BPSK at low SNR values when gray coding is used. On the other hand, QPSK exhibits similar spectral efficiency to 4-QAM and 16-QAM under low SNR conditions. In very noisy channels, QPSK can sometimes achieve better spectral efficiency than 4-QAM or 16-QAM. In practical wireless communication scenarios, QPSK is commonly used along with QAM techniques, especially where adaptive modulation is applied. Modulation Bits/Symbol Points in Constellation Usage Notes BPSK 1 2 Very robust, used in weak signals QPSK 2 4 Balanced speed & reliability 4-QAM ...

MATLAB code for BER vs SNR for M-QAM, M-PSK, QPSk, BPSK, ...(with Online Simulator)

🧮 MATLAB Code for BPSK, M-ary PSK, and M-ary QAM Together 🧮 MATLAB Code for M-ary QAM 🧮 MATLAB Code for M-ary PSK 📚 Further Reading MATLAB Script for BER vs. SNR for M-QAM, M-PSK, QPSK, BPSK % Written by Salim Wireless clc; clear; close all; num_symbols = 1e5; snr_db = -20:2:20; psk_orders = [2, 4, 8, 16, 32]; qam_orders = [4, 16, 64, 256]; ber_psk_results = zeros(length(psk_orders), length(snr_db)); ber_qam_results = zeros(length(qam_orders), length(snr_db)); for i = 1:length(psk_orders) psk_order = psk_orders(i); for j = 1:length(snr_db) data_symbols = randi([0, psk_order-1], 1, num_symbols); modulated_signal = pskmod(data_symbols, psk_order, pi/psk_order); received_signal = awgn(modulated_signal, snr_db(j), 'measured'); demodulated_symbols = pskdemod(received_signal, psk_order, pi/psk_order); ber_psk_results(i, j) = sum(data_symbols ~= demodulated_symbols) / num_symbols; end end for i...

Online Simulator for ASK, FSK, and PSK

Try our new Digital Signal Processing Simulator!   Start Simulator for binary ASK Modulation Message Bits (e.g. 1,0,1,0) Carrier Frequency (Hz) Sampling Frequency (Hz) Run Simulation Simulator for binary FSK Modulation Input Bits (e.g. 1,0,1,0) Freq for '1' (Hz) Freq for '0' (Hz) Sampling Rate (Hz) Visualize FSK Signal Simulator for BPSK Modulation ...

Doppler Delay

  Doppler Shift Formula When either the transmitter or the receiver is in motion, or when both are in motion, Doppler Shift is an essential parameter in wireless Communication. We notice variations in reception frequencies in vehicles, trains, or other similar environments. In plain language, the received signal frequency increases as the receiver moves toward the transmitter and drops as the receiver moves in the opposite direction of the transmitter. This phenomenon is called the Doppler shift or Doppler spread. Doppler Shift Formula: By equation,                fR = fT (+/-) fD                                      fR= receiving  frequency                                      fT= transmitted frequency              ...

MATLAB Codes for Various types of beamforming | Beam Steering, Digital...

📘 How Beamforming Improves SNR 🧮 MATLAB Code 📚 Further Reading 📂 Other Topics on Beamforming in MATLAB ... MIMO / Massive MIMO Beamforming Techniques Beamforming Techniques MATLAB Codes for Beamforming... How Beamforming Improves SNR The mathematical [↗] and theoretical aspects of beamforming [↗] have already been covered. We'll talk about coding in MATLAB in this tutorial so that you may generate results for different beamforming approaches. Let's go right to the content of the article. In analog beamforming, certain codebooks are employed on the TX and RX sides to select the best beam pairs. Because of their beamforming gains, communication created through the strongest beams from both the TX and RX side enhances spectrum efficiency. Additionally, beamforming gain directly impacts SNR improvement. Wireless communication system capacity = bandwidth*log2(1+SNR)...

Theoretical vs. simulated BER vs. SNR for ASK, FSK, and PSK (MATLAB Code + Simulator)

📘 Overview 🧮 Simulator for calculating BER 🧮 MATLAB Codes for calculating theoretical BER 🧮 MATLAB Codes for calculating simulated BER 📚 Further Reading BER vs. SNR denotes how many bits in error are received for a given signal-to-noise ratio, typically measured in dB. Common noise types in wireless systems: 1. Additive White Gaussian Noise (AWGN) 2. Rayleigh Fading AWGN adds random noise; Rayleigh fading attenuates the signal variably. A good SNR helps reduce these effects. Simulator for calculating BER vs SNR for binary ASK, FSK, and PSK Calculate BER for Binary ASK Modulation Enter SNR (dB): Calculate BER Calculate BER for Binary FSK Modulation Enter SNR (dB): Calculate BER Calculate BER for Binary PSK Modulation Enter SNR (dB): Calculate BER BER vs. SNR Curves MATLAB Code for Theoretical BER % The code is written by SalimWireless.Com clc; clear; close all; % SNR va...

Frequency Bands : EHF, SHF, UHF, VHF, HF, MF, LF, VLF and Their Uses

Frequency Bands >> EHF, SHF, UHF, VHF, HF, MF, LF... Frequency Bands and Their Uses 1. Extremely High Frequency (EHF) 30 - 300 GHz Uses 5G Networks 5G millimeter wave band 6G and beyond (Experimental) RADAR 2. Super High Frequency (SHF) 3 - 30 GHz Uses Ultra-wideband (UWB) Airborne RADAR Satellite Communication Microwave Link Communication or SATCOM 3. Ultra High Frequency (UHF) 300 - 3000 MHz Uses Satellite Communication Television Surveillance Navigation aids Also, read important wireless communication terms 4....