Overview
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:
AWGN adds random noise; Rayleigh fading attenuates the signal variably. A good SNR helps reduce these effects.
Bit Error Rate (BER) Equations
BER formulas for ASK, FSK, and PSK modulation schemes.
ASK
BER = 0.5 × erfc(0.5 × √SNR)
FSK
BER = 0.5 × erfc(√(SNR / 2))
PSK
BER = 0.5 × erfc(√SNR)
erfc / Q-function (Click here)
Live BER Simulator (Theoretical)
Calculate Bit Error Rate for Binary ASK, FSK, and PSK Modulations instantly.
Binary ASK Modulation
BER: 7.864e-2
Binary FSK Modulation
BER: 7.864e-2
Binary PSK Modulation
BER: 7.864e-2
BER vs. SNR Performance Curves (using MATLAB)
Figure 1: Theoretical BER curves
Figure 2: Simulated BER curves
MATLAB Code: Theoretical BER
MATLAB Script
% The code is written by SalimWireless.Com
clc;
clear;
close all;
% SNR values in dB for ASK, BFSK, and BPSK
SNRdB_ask = 0:1:20;
SNRdB_bfsk = 0:1:20;
SNRdB_bpsk = 0:1:20;
% Convert SNR from dB to linear scale
SNR_ask = 10.^(SNRdB_ask/10);
SNR_bfsk = 10.^(SNRdB_bfsk/10);
SNR_bpsk = 10.^(SNRdB_bpsk/10);
% Theoretical BER for ASK
BER_th_ask = (1/2) * erfc(0.5 * sqrt(SNR_ask));
% Theoretical BER for BFSK
BER_th_bfsk = (1/2) * erfc(sqrt(SNR_bfsk / 2));
% Theoretical BER for BPSK
BER_th_bpsk = 0.5 * erfc(sqrt(SNR_bpsk));
% Plotting
figure;
hold on;
semilogy(SNRdB_ask, BER_th_ask, '-rh', 'LineWidth', 2.5);
semilogy(SNRdB_bfsk, BER_th_bfsk, '-kh', 'LineWidth', 2.5);
semilogy(SNRdB_bpsk, BER_th_bpsk, '-bh', 'LineWidth', 2.5);
xlabel('SNR (dB)');
ylabel('Bit Error Rate (BER)');
title('Theoretical BER vs. SNR for Binary ASK, FSK, and PSK');
grid on;
legend('BASK Theoretical', 'BFSK Theoretical', 'BPSK Theoretical');
set(gca, 'YScale', 'log');
yticks([1e-6 1e-5 1e-4 1e-3 1e-2 1e-1 1]);
ylim([1e-6 1]);
xlim([0 20]);
hold off;
web('https://www.salimwireless.com/search?q=ask%20fsk%20psk', '-browser');
MATLAB Code: Simulated BER (with AWGN)
MATLAB Simulation
% Simulation Parameters
clc; clear; close all;
numBits = 1e6;
SNRdB = 0:1:20;
SNR = 10.^(SNRdB/10);
BER_sim_ask = zeros(1, length(SNRdB));
BER_sim_fsk = zeros(1, length(SNRdB));
BER_sim_psk = zeros(1, length(SNRdB));
for i = 1:length(SNRdB)
% ASK
bits = randi([0 1], 1, numBits);
txASK = bits;
noise = sqrt(1/(2*SNR(i))) * randn(1, numBits);
rxASK = txASK + noise;
bits_rxASK = rxASK > 0.5;
BER_sim_ask(i) = sum(bits ~= bits_rxASK) / numBits;
% FSK
txFSK = (bits == 1) + 1j*(bits == 0);
noise = sqrt(1/(2*SNR(i))) * (randn(1, numBits) + 1j*randn(1, numBits));
rxFSK = txFSK + noise;
dist1 = abs(rxFSK - (1 + 1j*0));
dist0 = abs(rxFSK - (0 + 1j*1));
bits_rxFSK = dist1 < dist0;
BER_sim_fsk(i) = sum(bits ~= bits_rxFSK) / numBits;
% PSK
txPSK = 2*bits - 1;
noise = sqrt(1/(2*SNR(i))) * randn(1, numBits);
rxPSK = txPSK + noise;
bits_rxPSK = rxPSK > 0;
BER_sim_psk(i) = sum(bits ~= bits_rxPSK) / numBits;
end
figure;
semilogy(SNRdB, BER_sim_ask, '-r', 'LineWidth', 2); hold on;
semilogy(SNRdB, BER_sim_fsk, '-g', 'LineWidth', 2);
semilogy(SNRdB, BER_sim_psk, '-b', 'LineWidth', 2);
grid on; xlabel('SNR (dB)'); ylabel('Bit Error Rate (BER)');
title('Simulated BER vs. SNR');
legend('BASK', 'BFSK', 'BPSK');
axis([0 20 1e-5 1]);
web('https://www.salimwireless.com/search?q=ask%20fsk%20psk', '-browser');
BER vs SNR Simulation (Theoretical vs Simulated with AWGN)
Theoretical vs Simulated BER vs SNR for Binary ASK (with AWGN)
Higher bits = More accuracy but slower.
Example: -10:2:20 or 5
Observation Table
| SNR (dB) | Simulated BER |
|---|