⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spread.cpp

📁 强大的C++库
💻 CPP
字号:
#include <itpp/itcomm.h>using namespace itpp;//These lines are needed for use of cout and endlusing std::cout;using std::endl;int main(){  //Scalars:  int SF, Ncode, sc, i, j, NumOfBits, MaxIterations, MaxNrOfErrors, MinNrOfErrors;  double Eb;  //Vectors and matrixes:  vec EbN0dB, EbN0, N0, ber;  smat all_codes, spread_codesI, spread_codesQ;  bvec transmited_bits, received_bits;  cvec transmited_symbols, received_symbols, transmited_chips, received_chips;  //Classes:  Multicode_Spread_2d mc_spread;  AWGN_Channel channel;  QPSK qpsk;  BERC berc;  //Initialize the spreading:  SF = 4;                            //The spreading factor is 4  Ncode = 4;                         //Use all four codes in the multi-code spreader  all_codes = to_smat(hadamard(SF)); //Calculate the spreading codes  //Set the spreading codes:  spread_codesI.set_size(Ncode, SF, false);  spread_codesQ.set_size(Ncode, SF, false);  for (sc = 0; sc<Ncode; sc++) {    spread_codesI.set_row(sc, all_codes.get_row(sc));     spread_codesQ.set_row(sc, all_codes.get_row(sc));  }  mc_spread.set_codes(to_mat(spread_codesI), to_mat(spread_codesQ));  //Specify simulation specific variables:  EbN0dB = linspace(-2,14,17);  EbN0 = pow(10,EbN0dB/10);  Eb = 1.0;  N0 = Eb * pow(EbN0,-1.0);  NumOfBits = 50000;  MaxIterations = 10;  MaxNrOfErrors = 200;  MinNrOfErrors = 5;  ber.set_size(EbN0dB.size(), false);  ber.clear();  //Randomize the random number generators:  RNG_randomize();  for (i=0; i<EbN0dB.length(); i++) {    cout << endl << "Simulating point nr " << i+1 << endl;    berc.clear();    channel.set_noise(N0(i)/2.0);    for (j=0; j<MaxIterations; j++) {	           transmited_bits = randb(NumOfBits);		            transmited_symbols  = qpsk.modulate_bits(transmited_bits);      //This is where we do the multi-code spreading:      transmited_chips =  mc_spread.spread(transmited_symbols);         received_chips = channel(transmited_chips);      //The multi-code despreading:      //The second argument tells the despreader that the offset is zero chips.       //This offset is usefull on channels with delay.      received_symbols = mc_spread.despread(received_chips, 0);       received_bits = qpsk.demodulate_bits(received_symbols);		            berc.count(transmited_bits,received_bits);      ber(i) = berc.get_errorrate();      cout << "   Itteration " << j+1 << ": ber = " << berc.get_errorrate() << endl;      if (berc.get_errors()>MaxNrOfErrors) {	cout << "Breaking on point " << i+1 << " with " << berc.get_errors() << " errors." << endl; break;      }    }    if (berc.get_errors() < MinNrOfErrors) {       cout << "Exiting Simulation on point " << i+1 << endl; break;    }  }  //Print results:  cout << endl;  cout << "EbN0dB = " << EbN0dB << endl;  cout << "ber = " << ber << endl;  //Exit program:  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -