Go to the documentation of this file.00001 #include <itpp/itcomm.h>
00002
00003 using namespace itpp;
00004
00005
00006 using std::cout;
00007 using std::endl;
00008
00009 int main()
00010 {
00011
00012 int i, Number_of_bits;
00013 double Ec, Eb;
00014 vec EbN0dB, EbN0, N0, noise_variance, bit_error_rate;
00015 bvec transmitted_bits, received_bits;
00016 cvec transmitted_symbols, received_symbols;
00017
00018
00019 QPSK qpsk;
00020 AWGN_Channel awgn_channel;
00021 it_file ff;
00022 BERC berc;
00023 Real_Timer tt;
00024
00025
00026 tt.tic();
00027
00028
00029 Ec = 1.0;
00030 Eb = Ec / 2.0;
00031 EbN0dB = linspace(0.0,9.0,10);
00032 EbN0 = inv_dB(EbN0dB);
00033 N0 = Eb * pow(EbN0,-1.0);
00034 Number_of_bits = 100000;
00035
00036
00037
00038 bit_error_rate.set_size(EbN0dB.length(),false);
00039
00040
00041 RNG_randomize();
00042
00043
00044 for (i=0; i<EbN0dB.length(); i++) {
00045
00046
00047 cout << "Now simulating Eb/N0 value number " << i+1 << " of " << EbN0dB.length() << endl;
00048
00049
00050 transmitted_bits = randb(Number_of_bits);
00051
00052
00053 transmitted_symbols = qpsk.modulate_bits(transmitted_bits);
00054
00055
00056 awgn_channel.set_noise(N0(i));
00057
00058
00059 received_symbols = awgn_channel(transmitted_symbols);
00060
00061
00062 received_bits = qpsk.demodulate_bits(received_symbols);
00063
00064
00065 berc.clear();
00066 berc.count(transmitted_bits,received_bits);
00067 bit_error_rate(i) = berc.get_errorrate();
00068
00069 }
00070
00071 tt.toc();
00072
00073
00074 cout << endl;
00075 cout << "EbN0dB = " << EbN0dB << " [dB]" << endl;
00076 cout << "BER = " << bit_error_rate << endl;
00077 cout << "Saving results to ./qpsk_result_file.it" << endl;
00078 cout << endl;
00079
00080
00081 ff.open("qpsk_result_file.it");
00082 ff << Name("EbN0dB") << EbN0dB;
00083 ff << Name("ber") << bit_error_rate;
00084 ff.close();
00085
00086
00087 return 0;
00088
00089 }
00090