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

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = qpsk_err_ctr.cpp
  3. //
  4. #include <stdlib.h>
  5. //#include <fstream>
  6. #include "parmfile.h"
  7. #include "qpsk_err_ctr.h"
  8. #include "typedefs.h"
  9. #include "model_graph.h"
  10. #include "syst_graph.h"
  11. extern ParmFile *ParmInput;
  12. extern ofstream *DebugFile;
  13. extern SystemGraph CommSystemGraph;
  14. extern int PassNumber;
  15. extern int MaxPassNumber;
  16. //======================================================
  17. QpskErrorCounter::QpskErrorCounter( char* instance_name,
  18.                         PracSimModel* outer_model,
  19.                         Signal<bit_t>* i_ref_signal,
  20.                         Signal<bit_t>* q_ref_signal,
  21.                         Signal<bit_t>* i_in_signal,
  22.                         Signal<bit_t>* q_in_signal )
  23.           :PracSimModel(instance_name,
  24.                         outer_model)
  25. {
  26.   MODEL_NAME(QpskErrorCounter);
  27.   I_In_Sig = i_in_signal;
  28.   Q_In_Sig = q_in_signal;
  29.   I_Ref_Sig = i_ref_signal;
  30.   Q_Ref_Sig = q_ref_signal;
  31.   OPEN_PARM_BLOCK;
  32.   GET_INT_PARM(Num_Holdoff_Passes);
  33.   GET_INT_PARM(Report_Intvl_In_Blocks);
  34.   MAKE_INPUT(I_In_Sig);
  35.   MAKE_INPUT(Q_In_Sig);
  36.   MAKE_INPUT(I_Ref_Sig);
  37.   MAKE_INPUT(Q_Ref_Sig);
  38.   Symb_Count = 0;
  39.   Error_Count = 0;
  40.   char sub_name[50];
  41.   strcpy(sub_name, GetInstanceName());
  42.   strcat(sub_name, ":Kernel");
  43. //  Kernel = new k_SerCounter(  sub_name, 
  44. //                              Num_Holdoff_Passes,
  45. //                              Report_Intvl_In_Blocks );
  46. }
  47. //======================================================
  48. QpskErrorCounter::~QpskErrorCounter( void ){ };
  49. //======================================================
  50. void QpskErrorCounter::Initialize(void)
  51. {
  52.   Block_Size = I_In_Sig->GetBlockSize();
  53. };
  54. //======================================================
  55. int QpskErrorCounter::Execute()
  56. {
  57.   bit_t *i_symbs_in, *q_symbs_in;
  58.   bit_t *i_symbs_ref, *q_symbs_ref;
  59.   bit_t i_symb_val, q_symb_val;
  60.   bit_t i_ref_val, q_ref_val;
  61.   int symb_count, error_count;
  62.   int is;
  63.   //if(PassNumber <= 3 ) return(_MES_AOK);
  64.   i_symbs_in = GET_INPUT_PTR( I_In_Sig );
  65.   q_symbs_in = GET_INPUT_PTR( Q_In_Sig );
  66.   i_symbs_ref = GET_INPUT_PTR( I_Ref_Sig );
  67.   q_symbs_ref = GET_INPUT_PTR( Q_Ref_Sig );
  68.   symb_count = Symb_Count;
  69.   error_count = Error_Count;
  70.   bool error_found = false;
  71.   for (is=0; is < Block_Size; is++)
  72.     {
  73.     i_symb_val = *i_symbs_in++;
  74.     q_symb_val = *q_symbs_in++;
  75.     i_ref_val = *i_symbs_ref++;
  76.     q_ref_val = *q_symbs_ref++;
  77.     symb_count++;
  78.     if( (i_symb_val != i_ref_val) || (q_symb_val != q_ref_val) )
  79.       {
  80.       error_found = true;
  81.       error_count++;
  82.       }
  83.     }
  84.   if( ((PassNumber - Num_Holdoff_Passes) % Report_Intvl_In_Blocks) == 0)
  85.     {
  86.     BasicResults << GetModelName() << " ( " << GetInstanceName() << " ): "
  87.               << PassNumber << "  SER = " << (float(error_count)/float(symb_count)) << " -- "
  88.               << error_count << " errors in " << symb_count << " symbols" << endl;
  89.     }
  90.   Symb_Count = symb_count;
  91.   Error_Count = error_count;
  92.   return(_MES_AOK);
  93. }