📄 bchcode.cpp
字号:
// BCHCode.cpp: implementation of the BCH class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BCHCode.h"
/*
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
*/
#include <assert.h>
#define ASSERT assert
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
BCH::BCH()
{
this->n = 31;
this->k = 21;
m_shiftReg.resize(n-k);
m_backReg.resize(n-k);
ivec coeff;
coeff.resize(11);
coeff[10] = 1;
coeff[9] = 1;
coeff[8] = 1;
coeff[7] = 0;
coeff[6] = 1;
coeff[5] = 1;
coeff[4] = 0;
coeff[3] = 1;
coeff[2] = 0;
coeff[1] = 0;
coeff[0] = 1;
m_gx = coeff;
}
BCH::~BCH()
{
}
/*+++
非系统码编码器
+++*/
/*
//uncode: 未编码信息组(k)
//返回值: 编码后信息组(n)
bool BCH::Encode(bvec unKcode,bvec & Ncode)
{
if (unKcode.size() != k)
return false;
Ncode.resize(n);
//寄存器清0
//memset(m_shiftReg, 0, sizeof(bit)*(n-k));
for (int i = 0;i < n-k; i++)
{
m_shiftReg[i] = 0;
m_backReg[i] = 0;
}
bit m ; //输入信息位
for ( i = 0;i < n; i++) //模拟n个时钟节拍
{
//输入信息位,前k拍为信息,后n-k拍无输入
if (i < k)
m = unKcode[i];
else
m = 0;
//DO寄存器连接
if (m_gx[0] == 1)
m_shiftReg[0] = m ;
//对寄存器进行移位操作. 移位的同时带上g(x)系数
for(int j = 1;j < n-k ; j++)
{
if (m_gx[j] == 1)
m_shiftReg[j] = (m + m_backReg[j-1]) % 2;
else
m_shiftReg[j] = m_backReg[j-1];
}
//输出部分
Ncode[i] = (m + m_backReg[n-k-1]) % 2;
//拷贝过来,相当于一次时钟触发
m_backReg = m_shiftReg;
}
return true;
}*/
/*
Ncode: R[] 接收码向量
*/
static int S[496][12] = {{1,1,1,0,1,1,0,1,0,0,0,0},
{0,1,1,1,0,1,1,0,1,0,1,1},
{0,0,1,1,1,0,1,1,0,1,2,2},
{1,1,1,1,0,0,0,0,1,0,3,3},
{0,1,1,1,1,0,0,0,0,1,4,4},
{1,1,0,1,0,0,0,1,0,0,5,5},
{0,1,1,0,1,0,0,0,1,0,6,6},
{0,0,1,1,0,1,0,0,0,1,7,7},
{1,1,1,1,0,1,1,1,0,0,8,8},
{0,1,1,1,1,0,1,1,1,0,9,9},
{0,0,1,1,1,1,0,1,1,1,10,10},
{1,1,1,1,0,0,1,1,1,1,11,11},
{1,0,0,1,0,1,0,0,1,1,12,12},
{1,0,1,0,0,1,1,1,0,1,13,13},
{1,0,1,1,1,1,1,0,1,0,14,14},
{0,1,0,1,1,1,1,1,0,1,15,15},
{1,1,0,0,0,0,1,0,1,0,16,16},
{0,1,1,0,0,0,0,1,0,1,17,17},
{1,1,0,1,1,1,0,1,1,0,18,18},
{0,1,1,0,1,1,1,0,1,1,19,19},
{1,1,0,1,1,0,1,0,0,1,20,20},
{1,0,0,0,0,0,0,0,0,0,21,21},
{0,1,0,0,0,0,0,0,0,0,22,22},
{0,0,1,0,0,0,0,0,0,0,23,23},
{0,0,0,1,0,0,0,0,0,0,24,24},
{0,0,0,0,1,0,0,0,0,0,25,25},
{0,0,0,0,0,1,0,0,0,0,26,26},
{0,0,0,0,0,0,1,0,0,0,27,27},
{0,0,0,0,0,0,0,1,0,0,28,28},
{0,0,0,0,0,0,0,0,1,0,29,29},
{0,0,0,0,0,0,0,0,0,1,30,30},
{1,0,0,1,1,0,1,1,1,0,0,1},
{1,1,0,1,0,1,1,0,0,1,0,2},
{0,0,0,1,1,1,0,1,1,0,0,3},
{1,0,0,1,0,1,0,1,0,1,0,4},
{0,0,1,1,1,1,0,0,0,0,0,5},
{1,0,0,0,0,1,0,1,1,0,0,6},
{1,1,0,1,1,0,0,1,0,1,0,7},
{0,0,0,1,1,0,1,0,0,0,0,8},
{1,0,0,1,0,1,1,0,1,0,0,9},
{1,1,0,1,0,0,0,0,1,1,0,10},
{0,0,0,1,1,1,1,0,1,1,0,11},
{0,1,1,1,1,0,0,1,1,1,0,12},
{0,1,0,0,1,0,1,0,0,1,0,13},
{0,1,0,1,0,0,1,1,1,0,0,14},
{1,0,1,1,0,0,1,0,0,1,0,15},
{0,0,1,0,1,1,1,1,1,0,0,16},
{1,0,0,0,1,1,0,0,0,1,0,17},
{0,0,1,1,0,0,0,0,1,0,0,18},
{1,0,0,0,0,0,1,1,1,1,0,19},
{0,0,1,1,0,1,1,1,0,1,0,20},
{0,1,1,0,1,1,0,1,0,0,0,21},
{1,0,1,0,1,1,0,1,0,0,0,22},
{1,1,0,0,1,1,0,1,0,0,0,23},
{1,1,1,1,1,1,0,1,0,0,0,24},
{1,1,1,0,0,1,0,1,0,0,0,25},
{1,1,1,0,1,0,0,1,0,0,0,26},
{1,1,1,0,1,1,1,1,0,0,0,27},
{1,1,1,0,1,1,0,0,0,0,0,28},
{1,1,1,0,1,1,0,1,1,0,0,29},
{1,1,1,0,1,1,0,1,0,1,0,30},
{0,1,0,0,1,1,0,1,1,1,1,2},
{1,0,0,0,0,1,1,0,0,0,1,3},
{0,0,0,0,1,1,1,0,1,1,1,4},
{1,0,1,0,0,1,1,1,1,0,1,5},
{0,0,0,1,1,1,1,0,0,0,1,6},
{0,1,0,0,0,0,1,0,1,1,1,7},
{1,0,0,0,0,0,0,1,1,0,1,8},
{0,0,0,0,1,1,0,1,0,0,1,9},
{0,1,0,0,1,0,1,1,0,1,1,10},
{1,0,0,0,0,1,0,1,0,1,1,11},
{1,1,1,0,0,0,1,0,0,1,1,12},
{1,1,0,1,0,0,0,1,1,1,1,13},
{1,1,0,0,1,0,0,0,0,0,1,14},
{0,0,1,0,1,0,0,1,1,1,1,15},
{1,0,1,1,0,1,0,0,0,0,1,16},
{0,0,0,1,0,1,1,1,1,1,1,17},
{1,0,1,0,1,0,1,1,0,0,1,18},
{0,0,0,1,1,0,0,0,0,1,1,19},
{1,0,1,0,1,1,0,0,1,1,1,20},
{1,1,1,1,0,1,1,0,1,0,1,21},
{0,0,1,1,0,1,1,0,1,0,1,22},
{0,1,0,1,0,1,1,0,1,0,1,23},
{0,1,1,0,0,1,1,0,1,0,1,24},
{0,1,1,1,1,1,1,0,1,0,1,25},
{0,1,1,1,0,0,1,0,1,0,1,26},
{0,1,1,1,0,1,0,0,1,0,1,27},
{0,1,1,1,0,1,1,1,1,0,1,28},
{0,1,1,1,0,1,1,0,0,0,1,29},
{0,1,1,1,0,1,1,0,1,1,1,30},
{1,1,0,0,1,0,1,1,1,1,2,3},
{0,1,0,0,0,0,1,1,0,0,2,4},
{1,1,1,0,1,0,1,0,0,1,2,5},
{0,1,0,1,0,0,1,1,1,1,2,6},
{0,0,0,0,1,1,1,1,0,0,2,7},
{1,1,0,0,1,1,0,0,0,1,2,8},
{0,1,0,0,0,0,0,0,1,1,2,9},
{0,0,0,0,0,1,1,0,1,0,2,10},
{1,1,0,0,1,0,0,0,1,0,2,11},
{1,0,1,0,1,1,1,1,1,0,2,12},
{1,0,0,1,1,1,0,0,0,0,2,13},
{1,0,0,0,0,1,0,1,1,1,2,14},
{0,1,1,0,0,1,0,0,0,0,2,15},
{1,1,1,1,1,0,0,1,1,1,2,16},
{0,1,0,1,1,0,1,0,0,0,2,17},
{1,1,1,0,0,1,1,0,1,1,2,18},
{0,1,0,1,0,1,0,1,1,0,2,19},
{1,1,1,0,0,0,0,1,0,0,2,20},
{1,0,1,1,1,0,1,1,0,1,2,21},
{0,1,1,1,1,0,1,1,0,1,2,22},
{0,0,0,1,1,0,1,1,0,1,2,23},
{0,0,1,0,1,0,1,1,0,1,2,24},
{0,0,1,1,0,0,1,1,0,1,2,25},
{0,0,1,1,1,1,1,1,0,1,2,26},
{0,0,1,1,1,0,0,1,0,1,2,27},
{0,0,1,1,1,0,1,0,0,1,2,28},
{0,0,1,1,1,0,1,1,1,1,2,29},
{0,0,1,1,1,0,1,1,0,0,2,30},
{1,0,0,0,1,0,0,0,1,1,3,4},
{0,0,1,0,0,0,0,1,1,0,3,5},
{1,0,0,1,1,0,0,0,0,0,3,6},
{1,1,0,0,0,1,0,0,1,1,3,7},
{0,0,0,0,0,1,1,1,1,0,3,8},
{1,0,0,0,1,0,1,1,0,0,3,9},
{1,1,0,0,1,1,0,1,0,1,3,10},
{0,0,0,0,0,0,1,1,0,1,3,11},
{0,1,1,0,0,1,0,0,0,1,3,12},
{0,1,0,1,0,1,1,1,1,1,3,13},
{0,1,0,0,1,1,1,0,0,0,3,14},
{1,0,1,0,1,1,1,1,1,1,3,15},
{0,0,1,1,0,0,1,0,0,0,3,16},
{1,0,0,1,0,0,0,1,1,1,3,17},
{0,0,1,0,1,1,0,1,0,0,3,18},
{1,0,0,1,1,1,1,0,0,1,3,19},
{0,0,1,0,1,0,1,0,1,1,3,20},
{0,1,1,1,0,0,0,0,1,0,3,21},
{1,0,1,1,0,0,0,0,1,0,3,22},
{1,1,0,1,0,0,0,0,1,0,3,23},
{1,1,1,0,0,0,0,0,1,0,3,24},
{1,1,1,1,1,0,0,0,1,0,3,25},
{1,1,1,1,0,1,0,0,1,0,3,26},
{1,1,1,1,0,0,1,0,1,0,3,27},
{1,1,1,1,0,0,0,1,1,0,3,28},
{1,1,1,1,0,0,0,0,0,0,3,29},
{1,1,1,1,0,0,0,0,1,1,3,30},
{1,0,1,0,1,0,0,1,0,1,4,5},
{0,0,0,1,0,0,0,0,1,1,4,6},
{0,1,0,0,1,1,0,0,0,0,4,7},
{1,0,0,0,1,1,1,1,0,1,4,8},
{0,0,0,0,0,0,1,1,1,1,4,9},
{0,1,0,0,0,1,0,1,1,0,4,10},
{1,0,0,0,1,0,1,1,1,0,4,11},
{1,1,1,0,1,1,0,0,1,0,4,12},
{1,1,0,1,1,1,1,1,0,0,4,13},
{1,1,0,0,0,1,1,0,1,1,4,14},
{0,0,1,0,0,1,1,1,0,0,4,15},
{1,0,1,1,1,0,1,0,1,1,4,16},
{0,0,0,1,1,0,0,1,0,0,4,17},
{1,0,1,0,0,1,0,1,1,1,4,18},
{0,0,0,1,0,1,1,0,1,0,4,19},
{1,0,1,0,0,0,1,0,0,0,4,20},
{1,1,1,1,1,0,0,0,0,1,4,21},
{0,0,1,1,1,0,0,0,0,1,4,22},
{0,1,0,1,1,0,0,0,0,1,4,23},
{0,1,1,0,1,0,0,0,0,1,4,24},
{0,1,1,1,0,0,0,0,0,1,4,25},
{0,1,1,1,1,1,0,0,0,1,4,26},
{0,1,1,1,1,0,1,0,0,1,4,27},
{0,1,1,1,1,0,0,1,0,1,4,28},
{0,1,1,1,1,0,0,0,1,1,4,29},
{0,1,1,1,1,0,0,0,0,0,4,30},
{1,0,1,1,1,0,0,1,1,0,5,6},
{1,1,1,0,0,1,0,1,0,1,5,7},
{0,0,1,0,0,1,1,0,0,0,5,8},
{1,0,1,0,1,0,1,0,1,0,5,9},
{1,1,1,0,1,1,0,0,1,1,5,10},
{0,0,1,0,0,0,1,0,1,1,5,11},
{0,1,0,0,0,1,0,1,1,1,5,12},
{0,1,1,1,0,1,1,0,0,1,5,13},
{0,1,1,0,1,1,1,1,1,0,5,14},
{1,0,0,0,1,1,1,0,0,1,5,15},
{0,0,0,1,0,0,1,1,1,0,5,16},
{1,0,1,1,0,0,0,0,0,1,5,17},
{0,0,0,0,1,1,0,0,1,0,5,18},
{1,0,1,1,1,1,1,1,1,1,5,19},
{0,0,0,0,1,0,1,1,0,1,5,20},
{0,1,0,1,0,0,0,1,0,0,5,21},
{1,0,0,1,0,0,0,1,0,0,5,22},
{1,1,1,1,0,0,0,1,0,0,5,23},
{1,1,0,0,0,0,0,1,0,0,5,24},
{1,1,0,1,1,0,0,1,0,0,5,25},
{1,1,0,1,0,1,0,1,0,0,5,26},
{1,1,0,1,0,0,1,1,0,0,5,27},
{1,1,0,1,0,0,0,0,0,0,5,28},
{1,1,0,1,0,0,0,1,1,0,5,29},
{1,1,0,1,0,0,0,1,0,1,5,30},
{0,1,0,1,1,1,0,0,1,1,6,7},
{1,0,0,1,1,1,1,1,1,0,6,8},
{0,0,0,1,0,0,1,1,0,0,6,9},
{0,1,0,1,0,1,0,1,0,1,6,10},
{1,0,0,1,1,0,1,1,0,1,6,11},
{1,1,1,1,1,1,0,0,0,1,6,12},
{1,1,0,0,1,1,1,1,1,1,6,13},
{1,1,0,1,0,1,1,0,0,0,6,14},
{0,0,1,1,0,1,1,1,1,1,6,15},
{1,0,1,0,1,0,1,0,0,0,6,16},
{0,0,0,0,1,0,0,1,1,1,6,17},
{1,0,1,1,0,1,0,1,0,0,6,18},
{0,0,0,0,0,1,1,0,0,1,6,19},
{1,0,1,1,0,0,1,0,1,1,6,20},
{1,1,1,0,1,0,0,0,1,0,6,21},
{0,0,1,0,1,0,0,0,1,0,6,22},
{0,1,0,0,1,0,0,0,1,0,6,23},
{0,1,1,1,1,0,0,0,1,0,6,24},
{0,1,1,0,0,0,0,0,1,0,6,25},
{0,1,1,0,1,1,0,0,1,0,6,26},
{0,1,1,0,1,0,1,0,1,0,6,27},
{0,1,1,0,1,0,0,1,1,0,6,28},
{0,1,1,0,1,0,0,0,0,0,6,29},
{0,1,1,0,1,0,0,0,1,1,6,30},
{1,1,0,0,0,0,1,1,0,1,7,8},
{0,1,0,0,1,1,1,1,1,1,7,9},
{0,0,0,0,1,0,0,1,1,0,7,10},
{1,1,0,0,0,1,1,1,1,0,7,11},
{1,0,1,0,0,0,0,0,1,0,7,12},
{1,0,0,1,0,0,1,1,0,0,7,13},
{1,0,0,0,1,0,1,0,1,1,7,14},
{0,1,1,0,1,0,1,1,0,0,7,15},
{1,1,1,1,0,1,1,0,1,1,7,16},
{0,1,0,1,0,1,0,1,0,0,7,17},
{1,1,1,0,1,0,0,1,1,1,7,18},
{0,1,0,1,1,0,1,0,1,0,7,19},
{1,1,1,0,1,1,1,0,0,0,7,20},
{1,0,1,1,0,1,0,0,0,1,7,21},
{0,1,1,1,0,1,0,0,0,1,7,22},
{0,0,0,1,0,1,0,0,0,1,7,23},
{0,0,1,0,0,1,0,0,0,1,7,24},
{0,0,1,1,1,1,0,0,0,1,7,25},
{0,0,1,1,0,0,0,0,0,1,7,26},
{0,0,1,1,0,1,1,0,0,1,7,27},
{0,0,1,1,0,1,0,1,0,1,7,28},
{0,0,1,1,0,1,0,0,1,1,7,29},
{0,0,1,1,0,1,0,0,0,0,7,30},
{1,0,0,0,1,1,0,0,1,0,8,9},
{1,1,0,0,1,0,1,0,1,1,8,10},
{0,0,0,0,0,1,0,0,1,1,8,11},
{0,1,1,0,0,0,1,1,1,1,8,12},
{0,1,0,1,0,0,0,0,0,1,8,13},
{0,1,0,0,1,0,0,1,1,0,8,14},
{1,0,1,0,1,0,0,0,0,1,8,15},
{0,0,1,1,0,1,0,1,1,0,8,16},
{1,0,0,1,0,1,1,0,0,1,8,17},
{0,0,1,0,1,0,1,0,1,0,8,18},
{1,0,0,1,1,0,0,1,1,1,8,19},
{0,0,1,0,1,1,0,1,0,1,8,20},
{0,1,1,1,0,1,1,1,0,0,8,21},
{1,0,1,1,0,1,1,1,0,0,8,22},
{1,1,0,1,0,1,1,1,0,0,8,23},
{1,1,1,0,0,1,1,1,0,0,8,24},
{1,1,1,1,1,1,1,1,0,0,8,25},
{1,1,1,1,0,0,1,1,0,0,8,26},
{1,1,1,1,0,1,0,1,0,0,8,27},
{1,1,1,1,0,1,1,0,0,0,8,28},
{1,1,1,1,0,1,1,1,1,0,8,29},
{1,1,1,1,0,1,1,1,0,1,8,30},
{0,1,0,0,0,1,1,0,0,1,9,10},
{1,0,0,0,1,0,0,0,0,1,9,11},
{1,1,1,0,1,1,1,1,0,1,9,12},
{1,1,0,1,1,1,0,0,1,1,9,13},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -