BPSK modulation over an AWGN channel

As a first example we will generate a sequence of 500000 random bits {0,1} and BPSK modulate these. Thereafter the BPSK signals will be transmitted over an AWGN channel with a signal-to-noise ratio dB. The received signal is then decoded and the number of bit errors are calculated.

#include <itpp/itcomm.h>
using namespace itpp;
//These lines are needed for use of cout and endl
using std::cout;
using std::endl;
int main()
{
//Scalars
int N;
double N0;
//Vectors
bvec bits, dec_bits;
vec symbols, rec;
//Classes
BPSK bpsk; //The BPSK modulator/debodulator class
BERC berc; //The Bit Error Rate Counter class
//Init
N = 500000; //The number of bits to simulate
N0 = 1; //0 dB SNR
//Randomize the random number generator
RNG_randomize();
//Generate the bits:
bits = randb(N);
//Do the BPSK modulation
bpsk.modulate_bits(bits, symbols);
//Add the AWGN
rec = symbols + sqrt(N0 / 2) * randn(N);
//Decode the received bits
bpsk.demodulate_bits(rec, dec_bits);
//Count the number of errors
berc.count(bits, dec_bits);
//Print the results
cout << "There were " << berc.get_errors() << " received bits in error." << endl;
cout << "There were " << berc.get_corrects() << " correctly received bits." << endl;
cout << "The error probability was " << berc.get_errorrate() << endl;
cout << "The theoretical error probability is " << 0.5*erfc(1.0) << endl;
//Exit program:
return 0;
}
itpp::Array
General array class.
Definition array.h:105
itpp::BERC
Bit Error Rate Counter (BERC) Class.
Definition error_counters.h:68
itpp::BPSK
BPSK modulator with real symbols.
Definition modulator.h:877
itpp::BPSK::modulate_bits
void modulate_bits(const bvec &bits, vec &output) const
Modulate bits into BPSK symbols in complex domain.
Definition modulator.cpp:310
itpp::BPSK::demodulate_bits
void demodulate_bits(const vec &signal, bvec &output) const
Demodulate noisy BPSK symbols in complex domain into bits.
Definition modulator.cpp:326
itcomm.h
Include file for the IT++ communications module.
itpp
itpp namespace
Definition itmex.h:37

When you run this program, the output will look something like this:

There were 39224 received bits in error.
There were 460776 correctly received bits.
The error probability was 0.078448
The theoretical error probability is 0.0786496

Generated on Mon Jun 10 2024 11:49:29 for IT++ by Doxygen 1.9.8