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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = ideal_hard_lim.cpp
  3. //
  4. #include <stdlib.h>
  5. #include <fstream>
  6. #include "parmfile.h"
  7. #include "ideal_hard_lim.h"
  8. #include "model_graph.h"
  9. //#include "uni_rand.h"
  10. extern ParmFile *ParmInput;
  11. //======================================================
  12. IdealHardLimiter::IdealHardLimiter( char* instance_name,
  13.                         PracSimModel* outer_model,
  14.                         Signal<float>* in_sig,
  15.                         Signal<float>* out_sig )
  16.                 :PracSimModel(instance_name,
  17.                               outer_model)
  18. {
  19.   MODEL_NAME(IdealHardLimiter);
  20.   //ENABLE_MULTIRATE;
  21.   //---------------------------------------
  22.   //  Read model config parms
  23.   OPEN_PARM_BLOCK;
  24.   GET_DOUBLE_PARM( Pos_Limit );
  25.   GET_DOUBLE_PARM( Neg_Limit );
  26.   //--------------------------------------
  27.   //  Connect input and output signals
  28.   In_Sig = in_sig;
  29.   Out_Sig = out_sig;
  30.   MAKE_OUTPUT( Out_Sig );
  31.   MAKE_INPUT( In_Sig );
  32.   }
  33. //======================================
  34. IdealHardLimiter::~IdealHardLimiter( void ){ };
  35. //=======================================
  36. void IdealHardLimiter::Initialize(void)
  37. {
  38.   //------------------
  39.   double samp_intvl = Out_Sig->GetSampIntvl();
  40.   Out_Avg_Block_Size = Out_Sig->GetBlockSize();
  41. }
  42. //=======================================================
  43. int IdealHardLimiter::Execute()
  44. {
  45.   float *out_sig_ptr;
  46.   float out_sig_val;
  47.   float *in_sig_ptr;
  48.   float in_sig_val;
  49.   int is;
  50.   int block_size;
  51.   out_sig_ptr = GET_OUTPUT_PTR( Out_Sig );
  52.   in_sig_ptr = GET_INPUT_PTR( In_Sig );
  53.   block_size = In_Sig->GetValidBlockSize();
  54.   Out_Sig->SetValidBlockSize(block_size);
  55.   for (is=0; is<block_size; is++) {
  56.       in_sig_val = *in_sig_ptr++;
  57.       if(in_sig_val >= 0.0) {
  58.          out_sig_val = Pos_Limit;
  59.       }
  60.       else {
  61.          out_sig_val = Neg_Limit;
  62.       }
  63.       *out_sig_ptr++ = out_sig_val;
  64.   }
  65.   return(_MES_AOK);
  66. }