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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = tone_gen.cpp
  3. //
  4. #include <stdlib.h>
  5. #include <fstream>
  6. #include "tone_gen.h"
  7. #include "misdefs.h"
  8. #include "parmfile.h"
  9. #include "model_graph.h"
  10. #include "sigstuff.h"
  11. #include "syst_graph.h"
  12. extern ParmFile *ParmInput;
  13. #ifdef _DEBUG
  14.   extern ofstream *DebugFile;
  15. #endif
  16. //======================================================
  17. ToneGener::ToneGener( char* instance_name,
  18.                     PracSimModel* outer_model,
  19.                     Signal<float>* out_sig )
  20.         :PracSimModel( instance_name,
  21.                         outer_model )
  22. {
  23.   MODEL_NAME(ToneGener);
  24.   Out_Sig = out_sig;
  25.   OPEN_PARM_BLOCK;
  26.   GET_DOUBLE_PARM(Phase_In_Deg);
  27.   GET_DOUBLE_PARM(Freq_In_Hz);
  28.   Phase_In_Cycles = Phase_In_Deg /360.0;
  29.   MAKE_OUTPUT(Out_Sig);
  30. }
  31. //====================================================
  32. ToneGener::~ToneGener( void){};
  33. //====================================================
  34. void ToneGener::Initialize(void)
  35. {
  36.   *DebugFile << "Now in ToneGener::Initialize()" << endl;
  37.   Block_Size = Out_Sig->GetBlockSize();
  38.   Samp_Intvl = Out_Sig->GetSampIntvl();
  39.   Arg_Increm = Freq_In_Hz * Samp_Intvl;
  40.   Base_Arg = Phase_In_Cycles;
  41. }
  42. //====================================================
  43. int ToneGener::Execute()
  44. {
  45.   int is;
  46.   float *out_sig_ptr;
  47.   double base_arg, arg_increm;
  48.   //--------------------------------
  49.   //  Get pointer for output buffer
  50.   Out_Sig->SetValidBlockSize(Block_Size);
  51.   out_sig_ptr = GET_OUTPUT_PTR(Out_Sig);
  52.   base_arg = Base_Arg;
  53.   arg_increm = Arg_Increm;
  54.   for (is=0; is<Block_Size; is++)
  55.     {
  56.     *out_sig_ptr++ = float(sin(TWO_PI * (base_arg + (is*arg_increm)) ));
  57.     }
  58.   Base_Arg = fmod(Base_Arg + Block_Size*Arg_Increm,1.0);
  59.   return(_MES_AOK);
  60. }