qpsk_theory.cpp
上传用户:jtjnyq9001
上传日期:2014-11-21
资源大小:3974k
文件大小:2k
源码类别:

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = qpsk_theory.cpp
  3. //
  4. #include <stdlib.h>
  5. #include <math.h>
  6. #include "m_psk_theory.h"
  7. #include "sinc.h"
  8. #include "q_func.h"
  9. #include <fstream>
  10. using namespace std;
  11. #ifndef PI
  12.   #define PI 3.1415926535897932
  13. #endif
  14. void QpskPsd( double carrier_freq,
  15.               double symb_energy,
  16.               double symb_rate,
  17.               double beg_freq,
  18.               double end_freq,
  19.               int num_pts,
  20.               bool plot_in_db,
  21.               char* out_filename)
  22. {
  23.   double freq, val, bit_energy;
  24.   ofstream *out_file;
  25.   out_file = new ofstream(out_filename, ios::out);
  26.   bit_energy = symb_energy/2.0;
  27.   double delta_freq = (end_freq - beg_freq)/double(num_pts-1);
  28.   for(int n=0; n<num_pts; n++)
  29.     {
  30.     freq = beg_freq + n * delta_freq;
  31.     val = bit_energy * (  sinc_sqrd((freq-carrier_freq)/symb_rate)
  32.                         + sinc_sqrd((freq+carrier_freq)/symb_rate) );
  33.     if( plot_in_db )
  34.       {
  35.       if(val>0.0)
  36.         {
  37.         val = 10.0 * log10(val);
  38.         }
  39.       else
  40.         {
  41.         val = -200.0;
  42.         }
  43.       }
  44.     (*out_file) << freq << ", " << val << endl;
  45.     }
  46.   delete out_file;
  47. }
  48. //==========================================================
  49. void QpskBer( double beg_ebno,
  50.               double end_ebno,
  51.               int num_pts,
  52.               char* out_filename)
  53. {
  54.   double ebno_numeric, ebno_db, bit_err, symb_err, q_arg;
  55.   ofstream *out_file;
  56.   out_file = new ofstream(out_filename, ios::out);
  57.   double delta_ebno = (end_ebno - beg_ebno)/double(num_pts-1);
  58.   for(int n=0; n<num_pts; n++)
  59.     {
  60.     ebno_db = beg_ebno + n * delta_ebno;
  61.     ebno_numeric = pow(10.0, ebno_db/10.0);
  62.     q_arg = sqrt(2.0*ebno_numeric);
  63.     bit_err = q_func(q_arg);
  64.     //bit_err = 0.5 * erfc(sqrt(ebno_numeric));
  65.     symb_err = bit_err * (2.0 - bit_err);
  66.     (*out_file) << ebno_db << ", " << bit_err << ", " << symb_err << endl;
  67.     }
  68.   delete out_file;
  69. }
  70. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++