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

📄 bchcode.cpp

📁 (31,21) bch 码编解码程序 C++实现.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -