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

📄 disc_auto_cov.cpp

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

#include <stdlib.h>
#include "parmfile.h"
#include "disc_auto_cov.h"
#include "misdefs.h"
#include "model_graph.h"
#include "sigplot.h"
extern ParmFile* ParmInput;
extern int PassNumber;
#ifdef _DEBUG
  extern ofstream *DebugFile;
#endif
ofstream CovarFile("covar_res.txt", ios::out);

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

DiscreteAutoCovar::DiscreteAutoCovar( char* instance_name,
                                PracSimModel* outer_model,
                                Signal<byte_t>* in_sig)
            :PracSimModel(instance_name,
                          outer_model)
{
  In_Sig = in_sig;

  OPEN_PARM_BLOCK;

  GET_INT_PARM(Num_Corr_Passes);
  GET_DOUBLE_PARM(Mean);
  Mean_Sqrd = Mean * Mean;

  MAKE_INPUT(In_Sig);

}
DiscreteAutoCovar::~DiscreteAutoCovar( void ){ };

void DiscreteAutoCovar::Initialize(void)
{
   Proc_Block_Size = In_Sig->GetBlockSize();
   Samp_Intvl = In_Sig->GetSampIntvl();
   Corr_Buf = new double[Proc_Block_Size/2];
   for(int i=0; i<Proc_Block_Size/2; i++) Corr_Buf[i]=0.0;

//   Max_Corr = 0.0;
//   Max_Corr_Time = 0.0;

   //INITIALIZATION_REPORT(BasicResults);
   return;
}

int DiscreteAutoCovar::Execute()
{
   byte_t *in_sig_beg;
   byte_t *in_sig_ptr;
   byte_t *slide_sig_beg;
   byte_t *slide_sig_ptr;
   int i, j;
   int sum;
   double covar_val;

   if(PassNumber > Num_Corr_Passes) return(_MES_AOK);

   //-------------------------------------------------------
   //  Copy frequently accessed member vars into local vars
   int proc_block_size = Proc_Block_Size;
   int slide_block_size = proc_block_size/2;
   double samp_intvl = Samp_Intvl;

   //----------------------------------------
   // Get pointers for input and output
   in_sig_beg = GET_INPUT_PTR(In_Sig);
   slide_sig_beg = in_sig_beg + proc_block_size/4;

   //----------------------------------------

   for( j=0; j<slide_block_size; j++)
   {
      sum = 0;
      in_sig_ptr = in_sig_beg;
      slide_sig_ptr = slide_sig_beg;
      for( i=0; i<slide_block_size; i++)
      {
         sum += (*in_sig_ptr )*(*slide_sig_ptr );
         slide_sig_ptr++;
         in_sig_ptr++;
      }
      Corr_Buf[j] += ((float(sum)/slide_block_size)- Mean_Sqrd);
      in_sig_beg++;
   }
   if(PassNumber == Num_Corr_Passes)
   {
      for( j=0; j<slide_block_size; j++)
      {
         covar_val = fabs((Corr_Buf[j]/Num_Corr_Passes));
         if(covar_val <1e-20) covar_val = 1e-20;
         CovarFile << j-slide_block_size/2 << ", " << 10.0*log10(covar_val) << endl;
         //CovarFile << j-slide_block_size/2 << ", " << Corr_Buf[j] << endl;
      }
      CovarFile.close();
      exit(22);
   }
   //---------------------
   return(_MES_AOK);
}

⌨️ 快捷键说明

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