0% found this document useful (0 votes)
406 views5 pages

Bit Error Rate For QPSK and OOK

The document simulates the bit error rate (BER) of quadrature phase-shift keying (QPSK) and on-off keying (OOK) modulation over an additive white Gaussian noise (AWGN) channel. For both simulations, the theoretical and simulated BER curves are plotted against the signal-to-noise ratio (SNR) in dB. The simulations generate random symbols, add white noise at different SNR levels, perform demodulation, and count the bit/symbol errors to calculate the simulated BER.

Uploaded by

Maxe Payne
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
406 views5 pages

Bit Error Rate For QPSK and OOK

The document simulates the bit error rate (BER) of quadrature phase-shift keying (QPSK) and on-off keying (OOK) modulation over an additive white Gaussian noise (AWGN) channel. For both simulations, the theoretical and simulated BER curves are plotted against the signal-to-noise ratio (SNR) in dB. The simulations generate random symbols, add white noise at different SNR levels, perform demodulation, and count the bit/symbol errors to calculate the simulated BER.

Uploaded by

Maxe Payne
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

Bit error rate for QPSK

N = 10^6; % number of symbols


Es_N0_dB = [-3:20]; % multiple Eb/N0 values
ipHat = zeros(1,N);
for ii = 1:length(Es_N0_dB)
ip = (2*(rand(1,N)>0.5)-1) + j*(2*(rand(1,N)>0.5)-1);
s = (1/sqrt(2))*ip; % normalization of energy to 1
n = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)]; % white guassian noise, 0dB
variance

y = s + 10^(-Es_N0_dB(ii)/20)*n; % additive white gaussian noise

% demodulation
y_re = real(y); % real
y_im = imag(y); % imaginary
ipHat(find(y_re < 0 & y_im < 0)) = -1 + -1*j;
ipHat(find(y_re >= 0 & y_im > 0)) = 1 + 1*j;
ipHat(find(y_re < 0 & y_im >= 0)) = -1 + 1*j;
ipHat(find(y_re >= 0 & y_im < 0)) = 1 - 1*j;

nErr(ii) = size(find([ip- ipHat]),2); % couting the number of errors


end

simSer_QPSK = nErr/N;
theorySer_QPSK = erfc(sqrt(0.5*(10.^(Es_N0_dB/10)))) -
(1/4)*(erfc(sqrt(0.5*(10.^(Es_N0_dB/10))))).^2;

close all
figure
semilogy(Es_N0_dB,theorySer_QPSK,'b.-');
hold on
semilogy(Es_N0_dB,simSer_QPSK,'mx-');
axis([-3 15 10^-5 1])
grid on
legend('theory-QPSK', 'simulation-QPSK');
xlabel('Es/No, dB')
ylabel('Symbol Error Rate')
title('Symbol error probability curve for QPSK');
Bit Error Rate of OOK

N = 10^6 % number of bits or symbols


rand('state',100); % initializing the rand() function
randn('state',200); % initializing the randn() function

% Transmitter
ip = rand(1,N)>0.5; % generating 0,1 with equal probability
s = ip; % OOK modulation 0 -> 0 ; 1 -> 1
n = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)]; % white gaussian noise, 0dB
variance
Eb_N0_dB = [-3:10]; % multiple Eb/N0 values

for ii = 1:length(Eb_N0_dB)
% Noise addition
y = s + 10^(-Eb_N0_dB(ii)/20)*n; % additive white gaussian noise

% receiver - hard decision decoding


ipHat = real(y)>0.5;

% counting the errors


nErr(ii) = size(find([ip- ipHat]),2);

end

simBer = nErr/N; % simulated ber


theoryBer = 0.5*erfc(0.5*sqrt(10.^(Eb_N0_dB/10))); % theoretical ber

% plot
close all
figure
semilogy(Eb_N0_dB,theoryBer,'b.-');
hold on
semilogy(Eb_N0_dB,simBer,'mx-');
axis([-3 10 10^-5 0.5])
grid on
legend('theory', 'simulation');
xlabel('Eb/No, dB');
ylabel('Bit Error Rate');
title('Bit error probability curve for OOK modulation');

You might also like