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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = downsampler_T.cpp
  3. //
  4. #include <stdlib.h>
  5. #include <fstream>
  6. #include <strstream>
  7. #include "parmfile.h"
  8. #include "model_error.h"
  9. #include "downsampler_T.h"
  10. #include "model_graph.h"
  11. extern ParmFile *ParmInput;
  12. extern PracSimModel *ActiveModel;
  13. extern int PassNumber;
  14. //======================================================================
  15. //  Constructor
  16. template< class T >
  17. Downsampler< T >::Downsampler( char* instance_name,
  18.                                 PracSimModel* outer_model,
  19.                                 Signal<T>* in_signal,
  20.                                 Signal<T>* out_signal )
  21.               :PracSimModel(instance_name,
  22.                             outer_model)
  23. {  
  24.   MODEL_NAME(Downsampler);
  25.   ENABLE_MULTIRATE;
  26. //  ActiveModel = this;
  27.   //-----------------------------------
  28.   // Read configuration parameters
  29.   OPEN_PARM_BLOCK;
  30.   GET_INT_PARM(Decim_Rate);
  31.   //-----------------------------------
  32.   //  Signals
  33.   In_Sig = in_signal;
  34.   Out_Sig = out_signal;
  35.   double resamp_rate;
  36.   resamp_rate = 1.0/Decim_Rate;
  37.   MAKE_OUTPUT( Out_Sig );
  38.   MAKE_INPUT( In_Sig );
  39.   CHANGE_RATE(In_Sig, Out_Sig, resamp_rate);
  40. };
  41. //================================================
  42. template< class T >
  43. Downsampler<T>::~Downsampler( void ){ };
  44. //=======================================================
  45. template< class T >
  46. void Downsampler<T>::Initialize()
  47.   {
  48.   //---------------------------------------
  49.   //  Initialize derived parameters
  50.   Samp_Intvl = In_Sig->GetSampIntvl();
  51.   //Block_Size = In_Sig->GetBlockSize();
  52.   Num_Opening_Drops = 0;
  53. }
  54. //=======================================
  55. template< class T >
  56. int Downsampler<T>::Execute()
  57. {
  58.   T input_samp, *input_signal_ptr;
  59.   T *output_signal_ptr;
  60.   int is, block_size;
  61.   int out_block_size;
  62.   int new_num_opening_drops;
  63.   //-----------------------------------------
  64.   // Get pointers for input and output signals
  65.   
  66.   output_signal_ptr = GET_OUTPUT_PTR(Out_Sig);
  67.   input_signal_ptr = GET_INPUT_PTR(In_Sig);
  68.   block_size = In_Sig->GetValidBlockSize();
  69.   out_block_size = (block_size - Num_Opening_Drops)/Decim_Rate;
  70.    new_num_opening_drops = block_size - Num_Opening_Drops - out_block_size * Decim_Rate;
  71.    if(new_num_opening_drops != 0) out_block_size++;
  72.   Out_Sig->SetValidBlockSize( out_block_size );
  73.   //-----------------------------------------------------
  74.   //  normal processing loop
  75.    for(is=0; is<out_block_size; is++) {
  76.       input_samp = *input_signal_ptr++;
  77.       *output_signal_ptr++ = input_samp;
  78.       for(int j=1; j<Decim_Rate; j++) {
  79.          input_signal_ptr++;
  80.       }
  81.    }
  82.    Num_Opening_Drops = new_num_opening_drops;
  83.    return(_MES_AOK);
  84. }
  85. template Downsampler< int >;
  86. template Downsampler< float >;
  87. template Downsampler< bit_t >;