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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = swep_tone_xmtr.cpp
  3. //
  4. #include <stdlib.h>
  5. //#include <fstream>
  6. #include "swep_tone_xmtr.h"
  7. //#include "uni_rand.h"
  8. #include "misdefs.h"
  9. #include "parmfile.h"
  10. #include "model_graph.h"
  11. #include "sigstuff.h"
  12. #include "syst_graph.h"
  13. extern int PassNumber;
  14. extern ParmFile *ParmInput;
  15. #ifdef _DEBUG
  16.   extern ofstream *DebugFile;
  17. #endif
  18. //======================================================
  19. SweptToneTransmitter::SweptToneTransmitter( char* instance_name,
  20.                     PracSimModel* outer_model,
  21.                     Signal<float>* out_sig,
  22.                     Control<bool> *rx_enable,
  23.                     Control<double> *inst_freq_ctl,
  24.                     Control<double> *block_phase_ctl)
  25.         :PracSimModel( instance_name,
  26.                         outer_model )
  27. {
  28.   MODEL_NAME(SweptToneTransmitter);
  29.   Out_Sig = out_sig;
  30.   OPEN_PARM_BLOCK;
  31.   //GET_LONG_PARM(Initial_Seed);
  32.   //Seed = Initial_Seed;
  33.   //GET_LONG_PARM(Block_Size);
  34.   //GET_DOUBLE_PARM(Phase_In_Deg);
  35.   GET_DOUBLE_PARM(Beg_Freq_In_Hz);
  36.   GET_DOUBLE_PARM(End_Freq_In_Hz);
  37.   GET_INT_PARM(Num_Freqs);
  38.   GET_INT_PARM(Num_Holdoff_Passes);
  39.   MAKE_OUTPUT(Out_Sig);
  40.   //-----------------------------------
  41.   // controls
  42.   Inst_Freq_Ctl = inst_freq_ctl;
  43.   Block_Phase_Ctl = block_phase_ctl;
  44.   Rx_Enable = rx_enable;
  45. }
  46. //====================================================
  47. SweptToneTransmitter::~SweptToneTransmitter( void){};
  48. //====================================================
  49. void SweptToneTransmitter::Initialize(void)
  50. {
  51.   *DebugFile << "Now in SweptToneTransmitter::Initialize()" << endl;
  52.   Block_Size = Out_Sig->GetBlockSize();
  53.   Samp_Intvl = Out_Sig->GetSampIntvl();
  54.   //Phase_Increm = Freq_In_Hz * Samp_Intvl;
  55.   Base_Phase = 0.125;
  56. }
  57. //====================================================
  58. int SweptToneTransmitter::Execute()
  59. {
  60.   int is;
  61.   float *out_sig_ptr;
  62.   double base_phase, phase_increm;
  63.   double freq_in_hz;
  64.    if(PassNumber < Num_Holdoff_Passes)
  65.    {
  66.       freq_in_hz = Beg_Freq_In_Hz;
  67.       Rx_Enable->SetValue(false);
  68.    }
  69.    else if(PassNumber < Num_Holdoff_Passes + Num_Freqs)
  70.    {
  71.       freq_in_hz = Beg_Freq_In_Hz + 
  72.                (PassNumber - Num_Holdoff_Passes) * (End_Freq_In_Hz - Beg_Freq_In_Hz) /(Num_Freqs-1);
  73.       Rx_Enable->SetValue(true);
  74.    }
  75.    else
  76.    {
  77.       Rx_Enable->SetValue(false);
  78.    }
  79.    if(PassNumber < Num_Holdoff_Passes + Num_Freqs)
  80.    {
  81.       //--------------------------------
  82.       //  Get pointer for output buffer
  83.       out_sig_ptr = GET_OUTPUT_PTR(Out_Sig);
  84.       base_phase = Base_Phase;
  85.       phase_increm = freq_in_hz * Samp_Intvl;
  86.       Block_Phase_Ctl->SetValue(base_phase);
  87.       Inst_Freq_Ctl->SetValue(freq_in_hz);
  88.       for (is=0; is<Block_Size; is++)
  89.       {
  90.          *out_sig_ptr++ = sin(TWO_PI * (base_phase + (is*phase_increm)) );
  91.       }
  92.       Base_Phase = fmod(Base_Phase + Block_Size*Phase_Increm,1.0);
  93.    }
  94.    return(_MES_AOK);
  95. }