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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = quad_carr_genie.cpp
  3. //
  4. #include <stdlib.h>
  5. //#include <fstream>
  6. //#include <strstream>
  7. #include "parmfile.h"
  8. #include "misdefs.h"
  9. #include "quad_carr_genie.h"
  10. #include "model_graph.h"
  11. extern ParmFile *ParmInput;
  12. extern int PassNumber;
  13. //======================================================
  14. QuadCarrierRecovGenie::QuadCarrierRecovGenie( char* instance_name,
  15.                                 PracSimModel* outer_model,
  16.                                 Signal<float> *i_recov_carrier,
  17.                                 Signal<float> *q_recov_carrier )
  18.               :PracSimModel(instance_name,
  19.                             outer_model)
  20. {
  21.   MODEL_NAME(QuadCarrierRecovGenie);
  22.   //-----------------------------------
  23.   // Read configuration parameters
  24.   OPEN_PARM_BLOCK;
  25.   GET_DOUBLE_PARM(Carrier_Freq);
  26.   Carrier_Freq_Rad = TWO_PI * Carrier_Freq;
  27.   GET_DOUBLE_PARM(Phase_Offset_Deg);
  28.   Phase_Offset_Rad = PI * Phase_Offset_Deg /180.0;
  29.   //-----------------------------------
  30.   //  Signals
  31.   I_Recov_Carrier = i_recov_carrier;
  32.   Q_Recov_Carrier = q_recov_carrier;
  33.   MAKE_OUTPUT( I_Recov_Carrier );
  34.   MAKE_OUTPUT( Q_Recov_Carrier );
  35.   return;
  36.   }
  37. //================================================
  38. QuadCarrierRecovGenie::~QuadCarrierRecovGenie( void ){ };
  39. //=======================================================
  40. void QuadCarrierRecovGenie::Initialize()
  41. {
  42.   //---------------------------------------
  43.   //  Initialize derived parameters
  44.   Block_Size = I_Recov_Carrier->GetBlockSize();
  45.   Samp_Intvl = I_Recov_Carrier->GetSampIntvl();
  46.   Time = 0.0;
  47. }
  48. //=======================================
  49. int QuadCarrierRecovGenie::Execute()
  50. {
  51.   float *i_recov_carrier_ptr;
  52.   float *q_recov_carrier_ptr;
  53.   double omega, time, time_base;
  54.   double theta;
  55.   double samp_intvl;
  56.   int is;
  57.   i_recov_carrier_ptr = GET_OUTPUT_PTR( I_Recov_Carrier );
  58.   q_recov_carrier_ptr = GET_OUTPUT_PTR( Q_Recov_Carrier );
  59.   omega = Carrier_Freq_Rad;
  60.   theta = Phase_Offset_Rad;
  61.   time_base = Time;
  62.   samp_intvl = Samp_Intvl;
  63.   for(is=0; is<Block_Size; is++)
  64.     {
  65.     time = time_base + is * samp_intvl;
  66.     *i_recov_carrier_ptr++ = cos(omega * time + theta);
  67.     *q_recov_carrier_ptr++ = -sin(omega * time + theta);
  68.     }
  69.   Time = time_base + samp_intvl * Block_Size;
  70.   return(_MES_AOK);
  71. }