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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = quad_to_polar.cpp
  3. //
  4. #include <stdlib.h>
  5. //#include <fstream>
  6. #include <math.h>
  7. #include "parmfile.h"
  8. #include "ampl_to_db_pwr.h"
  9. #include "model_graph.h"
  10. #include "sigstuff.h"
  11. #include "syst_graph.h"
  12. #include "misdefs.h"
  13. //#include "gensig.h"
  14. extern ParmFile ParmInput;
  15. extern SystemGraph SystGraph;
  16. #ifdef _DEBUG
  17.   extern ofstream *DebugFile;
  18. #endif
  19. //======================================================
  20. AmplitudeToDbPower::AmplitudeToDbPower( char* instance_name,
  21.                                 PracSimModel* outer_model,
  22.                                 Signal<float>* in_sig,
  23.                                 Signal<float>* out_sig)
  24.               :PracSimModel(instance_name,
  25.                             outer_model)
  26. {
  27.   In_Sig = in_sig;
  28.   Out_Sig = out_sig;
  29.   MAKE_OUTPUT(Out_Sig);
  30.   MAKE_INPUT(In_Sig);
  31.   SAME_RATE(In_Sig, Out_Sig);
  32. }
  33. //=============================================
  34. AmplitudeToDbPower::~AmplitudeToDbPower( void ){ };
  35. //===========================================
  36. void AmplitudeToDbPower::Initialize(void)
  37. {
  38.   *DebugFile << "Now in AmplitudeToDbPower::Initialize()" << endl;
  39.   Proc_Block_Size = Out_Sig->GetBlockSize();
  40. }
  41. //=============================================
  42. int AmplitudeToDbPower::Execute(void)
  43. {
  44.   float *in_sig;
  45.   float *out_sig;
  46.   double in_val;
  47.   int is;
  48.   *DebugFile << "In AmplitudeToDbPower::Execute" << endl;
  49.   out_sig = GET_OUTPUT_PTR(Out_Sig);
  50.   in_sig = GET_INPUT_PTR(In_Sig);
  51.   Out_Sig->SetValidBlockSize(Proc_Block_Size);
  52.   for (is=0; is<Proc_Block_Size; is++)
  53.     {
  54.     in_val = *in_sig++;
  55.     if(fabs(in_val)<1e-100) {
  56.       *out_sig = -100.0;
  57.     }
  58.     else {
  59.       *out_sig = float(10.0*log10(in_val*in_val));
  60.    }
  61.     out_sig++;
  62.     }
  63.   return(_MES_AOK);
  64. }