⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downsampler_t.cpp

📁 《无线通信系统仿真——c++使用模型》这本书的源代码
💻 CPP
字号:
//
//  File = downsampler_T.cpp
//

#include <stdlib.h>
#include <fstream>
#include <strstream>
#include "parmfile.h"
#include "model_error.h"
#include "downsampler_T.h"
#include "model_graph.h"
extern ParmFile *ParmInput;
extern PracSimModel *ActiveModel;
extern int PassNumber;

//======================================================================
//  Constructor

template< class T >
Downsampler< T >::Downsampler( char* instance_name,
                                PracSimModel* outer_model,
                                Signal<T>* in_signal,
                                Signal<T>* out_signal )
              :PracSimModel(instance_name,
                            outer_model)
{  
  MODEL_NAME(Downsampler);
  ENABLE_MULTIRATE;

//  ActiveModel = this;

  //-----------------------------------
  // Read configuration parameters
  OPEN_PARM_BLOCK;

  GET_INT_PARM(Decim_Rate);

  //-----------------------------------
  //  Signals

  In_Sig = in_signal;
  Out_Sig = out_signal;
  double resamp_rate;
  resamp_rate = 1.0/Decim_Rate;

  MAKE_OUTPUT( Out_Sig );
  MAKE_INPUT( In_Sig );
  CHANGE_RATE(In_Sig, Out_Sig, resamp_rate);
};
//================================================
template< class T >
Downsampler<T>::~Downsampler( void ){ };

//=======================================================

template< class T >
void Downsampler<T>::Initialize()
  {
  //---------------------------------------
  //  Initialize derived parameters

  Samp_Intvl = In_Sig->GetSampIntvl();
  //Block_Size = In_Sig->GetBlockSize();
  Num_Opening_Drops = 0;

}

//=======================================
template< class T >
int Downsampler<T>::Execute()
{
  T input_samp, *input_signal_ptr;
  T *output_signal_ptr;
  int is, block_size;
  int out_block_size;
  int new_num_opening_drops;

  //-----------------------------------------
  // Get pointers for input and output signals
  
  output_signal_ptr = GET_OUTPUT_PTR(Out_Sig);
  input_signal_ptr = GET_INPUT_PTR(In_Sig);

  block_size = In_Sig->GetValidBlockSize();
  out_block_size = (block_size - Num_Opening_Drops)/Decim_Rate;
   new_num_opening_drops = block_size - Num_Opening_Drops - out_block_size * Decim_Rate;
   if(new_num_opening_drops != 0) out_block_size++;

  Out_Sig->SetValidBlockSize( out_block_size );


  //-----------------------------------------------------
  //  normal processing loop

   for(is=0; is<out_block_size; is++) {
      input_samp = *input_signal_ptr++;
      *output_signal_ptr++ = input_samp;
      for(int j=1; j<Decim_Rate; j++) {
         input_signal_ptr++;
      }
   }
   Num_Opening_Drops = new_num_opening_drops;
   return(_MES_AOK);

}
template Downsampler< int >;
template Downsampler< float >;
template Downsampler< bit_t >;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -