IT++ Logo Newcom Logo

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 $E_b/N_0 = 0$ 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;

}

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
SourceForge Logo

Generated on Fri Jun 8 00:37:36 2007 for IT++ by Doxygen 1.5.2