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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = msk_genie.cpp
  3. //
  4. #include <stdlib.h>
  5. //#include <fstream>
  6. #include "parmfile.h"
  7. #include "msk_genie.h"
  8. #include "misdefs.h"
  9. #include "model_graph.h"
  10. extern ParmFile *ParmInput;
  11. //======================================================
  12. MskShapeGenie::MskShapeGenie( char* instance_name,
  13.                             PracSimModel* outer_model,
  14.                             Signal< float >* i_shape_sig,
  15.                             Signal< float >* q_shape_sig)
  16.               :PracSimModel(instance_name,
  17.                             outer_model)
  18. {
  19.   MODEL_NAME(MskShapeGenie);
  20.   //----------------------------------------
  21.   //  Read model config parms
  22.   
  23.   OPEN_PARM_BLOCK;
  24.   
  25.   GET_DOUBLE_PARM(Bit_Durat);
  26.   GET_BOOL_PARM(Shaping_Is_Bipolar);
  27.   //GET_INT_PARM(block_size);
  28.   //GET_DOUBLE_PARM(samp_intvl);
  29.   //-------------------------------------
  30.   //  Connect input and output signals
  31.   I_Shape_Sig = i_shape_sig;
  32.   Q_Shape_Sig = q_shape_sig;
  33.   MAKE_INPUT( I_Shape_Sig );
  34.   MAKE_INPUT( Q_Shape_Sig );
  35.   //--------------------------------------------
  36.   // Set up derived parms
  37.   Pi_Over_Bit_Dur = PI/Bit_Durat;
  38. }
  39. //===========================================
  40. MskShapeGenie::~MskShapeGenie( void ){ };
  41. //==========================================
  42. void MskShapeGenie::Initialize(void)
  43. {
  44.   Samps_Out_Cnt = 0;
  45.   Block_Size = I_Shape_Sig->GetBlockSize();
  46.   Samp_Intvl = I_Shape_Sig->GetSampIntvl();
  47. }
  48. //===========================================
  49. int MskShapeGenie::Execute(void)
  50. {
  51.   float *i_shape_sig_ptr, *q_shape_sig_ptr;
  52.   int samps_out_cnt;
  53.   double samp_intvl;
  54.   double pi_over_bit_dur, argument;
  55.   long int_mult;
  56.   int shaping_is_bipolar;
  57.   int is;
  58.   i_shape_sig_ptr = GET_INPUT_PTR( I_Shape_Sig );
  59.   q_shape_sig_ptr = GET_INPUT_PTR( Q_Shape_Sig );
  60.   samps_out_cnt = Samps_Out_Cnt;
  61.   samp_intvl = Samp_Intvl;
  62.   pi_over_bit_dur = Pi_Over_Bit_Dur;
  63.   shaping_is_bipolar = Shaping_Is_Bipolar;
  64.   for (is=0; is<Block_Size; is++)
  65.     {
  66.     argument = pi_over_bit_dur * samps_out_cnt * samp_intvl;
  67.     int_mult = long(argument/TWO_PI);
  68.     argument -= int_mult*TWO_PI;
  69.     //cout << "arg = " << argument << endl;
  70.     if(shaping_is_bipolar)
  71.       {
  72.       *i_shape_sig_ptr = sin(argument);
  73.       *q_shape_sig_ptr = cos(argument);
  74.       }
  75.     else
  76.       {
  77.       *i_shape_sig_ptr = fabs(sin(argument));
  78.       *q_shape_sig_ptr = fabs(cos(argument));
  79.       }
  80.     samps_out_cnt++;
  81.     i_shape_sig_ptr++;
  82.     q_shape_sig_ptr++;
  83.     }
  84.   Samps_Out_Cnt = samps_out_cnt;
  85.   return(_MES_AOK);
  86. }