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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = rayleigh_theory.cpp
  3. //
  4. #include <stdlib.h>
  5. #include <math.h>
  6. #include "rayleigh_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 RayleighPdf( double sigma,
  15.                int num_pts,
  16.                double pts_per_sigma,
  17.                char *out_filename)
  18. {
  19.    double abscissa, ordinate, b_sqrd;
  20.    //b_sqrd = 2*sigma*sigma/(4.0-PI);
  21.    b_sqrd = sigma*sigma;
  22.    ofstream *out_file;
  23.    out_file = new ofstream(out_filename, ios::out);
  24.    //n_end = (num_pts-1)/2;
  25.    for(int n=0; n<num_pts; n++)
  26.    {
  27.       abscissa = n*sigma/pts_per_sigma;
  28.       ordinate = abscissa*exp(-abscissa*abscissa/(2*b_sqrd))/b_sqrd;
  29.       (*out_file) << abscissa << ", " << ordinate << endl;
  30.    }
  31.    out_file->close();
  32.    delete out_file;
  33. }
  34. void RayleighCdf( double sigma,
  35.                int num_pts,
  36.                double pts_per_sigma,
  37.                char *out_filename)
  38. {
  39.    double abscissa, ordinate;
  40.    //int n_end;
  41.    ofstream *out_file;
  42.    out_file = new ofstream(out_filename, ios::out);
  43.    //if(num_pts%2 == 0) num_pts++;
  44.    //n_end = (num_pts-1)/2;
  45.    //double root_2 = sqrt(2.0);
  46.    double two_b_sqrd;
  47.    two_b_sqrd = 2.0 * sigma * sigma;
  48.    for(int n=0; n<num_pts; n++)
  49.    {
  50.       abscissa = n*sigma/pts_per_sigma;
  51.       ordinate = 1.0 - exp(-abscissa*abscissa/two_b_sqrd);
  52.       (*out_file) << abscissa << ", " << ordinate << endl;
  53.    }
  54.    out_file->close();
  55.    delete out_file;
  56. }
  57. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++