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

📄 berlemat.cpp

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

#include <iostream>
#include "berlemat.h"
#include <fstream>
extern ofstream DebugFile;

BerlekampMatrix::BerlekampMatrix( PolyOvrPrimeField *poly )
{
  int i, k1, k2;
  int deg = poly->MaxDegree();
  Degree = deg;
  int prime_char = poly->PrimeBase();
  Prime_Base = prime_char;
  allocate(0,deg,0,deg);
  //-----------------------------------------------------
  //  Populate B matrix

  PrimeFieldElem *work_vec = new PrimeFieldElem[deg+1];
  PrimeFieldElem *u;
  PrimeFieldElem temp;
  u = new PrimeFieldElem[deg+1];
  poly->GetCoeffs(u);

  for(i=1; i<=deg; i++) work_vec[i] = PrimeFieldElem(prime_char,0);
  work_vec[0] = PrimeFieldElem(prime_char,1);

  setrow(0,work_vec);

  for( k1=1; k1<deg; k1++)
    {
    for( k2=1; k2<=prime_char; k2++)
      {
      for( i=deg; i>0; i--)
        work_vec[i] = work_vec[i-1];
      work_vec[0] = PrimeFieldElem(prime_char,0);

      if( work_vec[deg] != 0 )
        {
        // reduce work_vec modulo u(x) using arithmetic
        // over GF(p) on the coefficients
        for( i=0; i<deg; i++)
          {
          temp = work_vec[deg] * u[i];
          work_vec[i] -= work_vec[deg] * u[i];
          }
        } // end of 'if( work_vec[deg] != 0 )'
      } // end of loop over k2
//    B_Mtx->setrow(k1,work_vec);
    setrow(k1,work_vec);
    } // end of loop over k1

  //-----------------------------------------------------
  //  Subtract identity matrix from B
  for(i=0; i<deg; i++)
    {
    (operator[](i)).operator[](i) -= PrimeFieldElem(prime_char,1);
    }
};
int BerlekampMatrix::GetDegree( void )
{
return(Degree);
};
int BerlekampMatrix::PrimeBase( void )
{
return(Prime_Base);
};

⌨️ 快捷键说明

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