IT++ is a C++ library of mathematical, signal processing and communication system routines/functions

源代码在线查看: qpsk_simulation.cpp

软件大小: 1003 K
上传用户: a520
关键词: communication mathematical processing functions
下载地址: 免注册下载 普通下载 VIP

相关代码

				#include 								using namespace itpp;								//These lines are needed for use of cout and endl				using std::cout;				using std::endl;								int main()				{				  //Declarations of scalars and vectors: 				  int i, Number_of_bits;				  double Ec, Eb;				  vec EbN0dB, EbN0, N0, noise_variance, bit_error_rate; //vec is a vector containing double				  bvec transmitted_bits, received_bits;                 //bvec is a vector containing bits				  cvec transmitted_symbols, received_symbols;           //cvec is a vector containing double_complex								  //Declarations of classes:				  QPSK qpsk;                     //The QPSK modulator class				  AWGN_Channel awgn_channel;     //The AWGN channel class				  it_file ff;                    //For saving the results to file				  BERC berc;                     //Used to count the bit errors				  Real_Timer tt;                 //The timer used to measure the execution time								  //Reset and start the timer:				  tt.tic();								  //Init:				  Ec = 1.0;                      //The transmitted energy per QPSK symbol is 1.				  Eb = Ec / 2.0;                 //The transmitted energy per bit is 0.5.				  EbN0dB = linspace(0.0,9.0,10); //Simulate for 10 Eb/N0 values from 0 to 9 dB.				  EbN0 = inv_dB(EbN0dB);         //Calculate Eb/N0 in a linear scale instead of dB. 				  N0 = Eb * pow(EbN0,-1.0);      //N0 is the variance of the (complex valued) noise.				  Number_of_bits = 100000;       //One hundred thousand bits is transmitted for each Eb/N0 value								  //Allocate storage space for the result vector. 				  //The "false" argument means "Do not copy the old content of the vector to the new storage area."				  bit_error_rate.set_size(EbN0dB.length(),false);								  //Randomize the random number generators in it++:				  RNG_randomize();								  //Iterate over all EbN0dB values:				  for (i=0; i								    //Show how the simulation progresses:				    cout 								    //Generate a vector of random bits to transmit:				    transmitted_bits = randb(Number_of_bits);								    //Modulate the bits to QPSK symbols:				    transmitted_symbols = qpsk.modulate_bits(transmitted_bits);								    //Set the noise variance of the AWGN channel:				    awgn_channel.set_noise(N0(i));								    //Run the transmited symbols through the channel using the () operator:				    received_symbols = awgn_channel(transmitted_symbols);								    //Demodulate the received QPSK symbols into received bits: 				    received_bits = qpsk.demodulate_bits(received_symbols);								    //Calculate the bit error rate:				    berc.clear();                               //Clear the bit error rate counter				    berc.count(transmitted_bits,received_bits); //Count the bit errors				    bit_error_rate(i) = berc.get_errorrate();   //Save the estimated BER in the result vector								  }								  tt.toc();								  //Print the results:				  cout 				  cout 				  cout 				  cout 				  cout 								  //Save the results to file:				  ff.open("qpsk_result_file.it");				  ff 				  ff 				  ff.close();								  //Exit program:				  return 0;								}											

相关资源