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

📄 msk_genie.cpp

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

#include <stdlib.h>
//#include <fstream>
#include "parmfile.h"
#include "msk_genie.h"
#include "misdefs.h"
#include "model_graph.h"
extern ParmFile *ParmInput;

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

MskShapeGenie::MskShapeGenie( char* instance_name,
                            PracSimModel* outer_model,
                            Signal< float >* i_shape_sig,
                            Signal< float >* q_shape_sig)
              :PracSimModel(instance_name,
                            outer_model)
{
  MODEL_NAME(MskShapeGenie);

  //----------------------------------------
  //  Read model config parms
  
  OPEN_PARM_BLOCK;
  
  GET_DOUBLE_PARM(Bit_Durat);
  GET_BOOL_PARM(Shaping_Is_Bipolar);
  //GET_INT_PARM(block_size);
  //GET_DOUBLE_PARM(samp_intvl);

  //-------------------------------------
  //  Connect input and output signals

  I_Shape_Sig = i_shape_sig;
  Q_Shape_Sig = q_shape_sig;

  MAKE_INPUT( I_Shape_Sig );
  MAKE_INPUT( Q_Shape_Sig );

  //--------------------------------------------
  // Set up derived parms

  Pi_Over_Bit_Dur = PI/Bit_Durat;
}
//===========================================
MskShapeGenie::~MskShapeGenie( void ){ };
//==========================================
void MskShapeGenie::Initialize(void)
{
  Samps_Out_Cnt = 0;
  Block_Size = I_Shape_Sig->GetBlockSize();
  Samp_Intvl = I_Shape_Sig->GetSampIntvl();
}
//===========================================
int MskShapeGenie::Execute(void)
{
  float *i_shape_sig_ptr, *q_shape_sig_ptr;
  int samps_out_cnt;
  double samp_intvl;
  double pi_over_bit_dur, argument;
  long int_mult;
  int shaping_is_bipolar;
  int is;

  i_shape_sig_ptr = GET_INPUT_PTR( I_Shape_Sig );
  q_shape_sig_ptr = GET_INPUT_PTR( Q_Shape_Sig );

  samps_out_cnt = Samps_Out_Cnt;
  samp_intvl = Samp_Intvl;
  pi_over_bit_dur = Pi_Over_Bit_Dur;
  shaping_is_bipolar = Shaping_Is_Bipolar;

  for (is=0; is<Block_Size; is++)
    {
    argument = pi_over_bit_dur * samps_out_cnt * samp_intvl;
    int_mult = long(argument/TWO_PI);
    argument -= int_mult*TWO_PI;
    //cout << "arg = " << argument << endl;

    if(shaping_is_bipolar)
      {
      *i_shape_sig_ptr = sin(argument);
      *q_shape_sig_ptr = cos(argument);
      }
    else
      {
      *i_shape_sig_ptr = fabs(sin(argument));
      *q_shape_sig_ptr = fabs(cos(argument));
      }
    samps_out_cnt++;
    i_shape_sig_ptr++;
    q_shape_sig_ptr++;
    }
  Samps_Out_Cnt = samps_out_cnt;
  return(_MES_AOK);
}

⌨️ 快捷键说明

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