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

3G开发

开发平台:

Visual C++

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