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

📄 bchcode.cpp

📁 (31,21) bch 码编解码程序 C++实现.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{1,1,0,0,0,1,0,1,0,0,9,14},
{0,0,1,0,0,1,0,0,1,1,9,15},
{1,0,1,1,1,0,0,1,0,0,9,16},
{0,0,0,1,1,0,1,0,1,1,9,17},
{1,0,1,0,0,1,1,0,0,0,9,18},
{0,0,0,1,0,1,0,1,0,1,9,19},
{1,0,1,0,0,0,0,1,1,1,9,20},
{1,1,1,1,1,0,1,1,1,0,9,21},
{0,0,1,1,1,0,1,1,1,0,9,22},
{0,1,0,1,1,0,1,1,1,0,9,23},
{0,1,1,0,1,0,1,1,1,0,9,24},
{0,1,1,1,0,0,1,1,1,0,9,25},
{0,1,1,1,1,1,1,1,1,0,9,26},
{0,1,1,1,1,0,0,1,1,0,9,27},
{0,1,1,1,1,0,1,0,1,0,9,28},
{0,1,1,1,1,0,1,1,0,0,9,29},
{0,1,1,1,1,0,1,1,1,1,9,30},
{1,1,0,0,1,1,1,0,0,0,10,11},
{1,0,1,0,1,0,0,1,0,0,10,12},
{1,0,0,1,1,0,1,0,1,0,10,13},
{1,0,0,0,0,0,1,1,0,1,10,14},
{0,1,1,0,0,0,1,0,1,0,10,15},
{1,1,1,1,1,1,1,1,0,1,10,16},
{0,1,0,1,1,1,0,0,1,0,10,17},
{1,1,1,0,0,0,0,0,0,1,10,18},
{0,1,0,1,0,0,1,1,0,0,10,19},
{1,1,1,0,0,1,1,1,1,0,10,20},
{1,0,1,1,1,1,0,1,1,1,10,21},
{0,1,1,1,1,1,0,1,1,1,10,22},
{0,0,0,1,1,1,0,1,1,1,10,23},
{0,0,1,0,1,1,0,1,1,1,10,24},
{0,0,1,1,0,1,0,1,1,1,10,25},
{0,0,1,1,1,0,0,1,1,1,10,26},
{0,0,1,1,1,1,1,1,1,1,10,27},
{0,0,1,1,1,1,0,0,1,1,10,28},
{0,0,1,1,1,1,0,1,0,1,10,29},
{0,0,1,1,1,1,0,1,1,0,10,30},
{0,1,1,0,0,1,1,1,0,0,11,12},
{0,1,0,1,0,1,0,0,1,0,11,13},
{0,1,0,0,1,1,0,1,0,1,11,14},
{1,0,1,0,1,1,0,0,1,0,11,15},
{0,0,1,1,0,0,0,1,0,1,11,16},
{1,0,0,1,0,0,1,0,1,0,11,17},
{0,0,1,0,1,1,1,0,0,1,11,18},
{1,0,0,1,1,1,0,1,0,0,11,19},
{0,0,1,0,1,0,0,1,1,0,11,20},
{0,1,1,1,0,0,1,1,1,1,11,21},
{1,0,1,1,0,0,1,1,1,1,11,22},
{1,1,0,1,0,0,1,1,1,1,11,23},
{1,1,1,0,0,0,1,1,1,1,11,24},
{1,1,1,1,1,0,1,1,1,1,11,25},
{1,1,1,1,0,1,1,1,1,1,11,26},
{1,1,1,1,0,0,0,1,1,1,11,27},
{1,1,1,1,0,0,1,0,1,1,11,28},
{1,1,1,1,0,0,1,1,0,1,11,29},
{1,1,1,1,0,0,1,1,1,0,11,30},
{0,0,1,1,0,0,1,1,1,0,12,13},
{0,0,1,0,1,0,1,0,0,1,12,14},
{1,1,0,0,1,0,1,1,1,0,12,15},
{0,1,0,1,0,1,1,0,0,1,12,16},
{1,1,1,1,0,1,0,1,1,0,12,17},
{0,1,0,0,1,0,0,1,0,1,12,18},
{1,1,1,1,1,0,1,0,0,0,12,19},
{0,1,0,0,1,1,1,0,1,0,12,20},
{0,0,0,1,0,1,0,0,1,1,12,21},
{1,1,0,1,0,1,0,0,1,1,12,22},
{1,0,1,1,0,1,0,0,1,1,12,23},
{1,0,0,0,0,1,0,0,1,1,12,24},
{1,0,0,1,1,1,0,0,1,1,12,25},
{1,0,0,1,0,0,0,0,1,1,12,26},
{1,0,0,1,0,1,1,0,1,1,12,27},
{1,0,0,1,0,1,0,1,1,1,12,28},
{1,0,0,1,0,1,0,0,0,1,12,29},
{1,0,0,1,0,1,0,0,1,0,12,30},
{0,0,0,1,1,0,0,1,1,1,13,14},
{1,1,1,1,1,0,0,0,0,0,13,15},
{0,1,1,0,0,1,0,1,1,1,13,16},
{1,1,0,0,0,1,1,0,0,0,13,17},
{0,1,1,1,1,0,1,0,1,1,13,18},
{1,1,0,0,1,0,0,1,1,0,13,19},
{0,1,1,1,1,1,0,1,0,0,13,20},
{0,0,1,0,0,1,1,1,0,1,13,21},
{1,1,1,0,0,1,1,1,0,1,13,22},
{1,0,0,0,0,1,1,1,0,1,13,23},
{1,0,1,1,0,1,1,1,0,1,13,24},
{1,0,1,0,1,1,1,1,0,1,13,25},
{1,0,1,0,0,0,1,1,0,1,13,26},
{1,0,1,0,0,1,0,1,0,1,13,27},
{1,0,1,0,0,1,1,0,0,1,13,28},
{1,0,1,0,0,1,1,1,1,1,13,29},
{1,0,1,0,0,1,1,1,0,0,13,30},
{1,1,1,0,0,0,0,1,1,1,14,15},
{0,1,1,1,1,1,0,0,0,0,14,16},
{1,1,0,1,1,1,1,1,1,1,14,17},
{0,1,1,0,0,0,1,1,0,0,14,18},
{1,1,0,1,0,0,0,0,0,1,14,19},
{0,1,1,0,0,1,0,0,1,1,14,20},
{0,0,1,1,1,1,1,0,1,0,14,21},
{1,1,1,1,1,1,1,0,1,0,14,22},
{1,0,0,1,1,1,1,0,1,0,14,23},
{1,0,1,0,1,1,1,0,1,0,14,24},
{1,0,1,1,0,1,1,0,1,0,14,25},
{1,0,1,1,1,0,1,0,1,0,14,26},
{1,0,1,1,1,1,0,0,1,0,14,27},
{1,0,1,1,1,1,1,1,1,0,14,28},
{1,0,1,1,1,1,1,0,0,0,14,29},
{1,0,1,1,1,1,1,0,1,1,14,30},
{1,0,0,1,1,1,0,1,1,1,15,16},
{0,0,1,1,1,1,1,0,0,0,15,17},
{1,0,0,0,0,0,1,0,1,1,15,18},
{0,0,1,1,0,0,0,1,1,0,15,19},
{1,0,0,0,0,1,0,1,0,0,15,20},
{1,1,0,1,1,1,1,1,0,1,15,21},
{0,0,0,1,1,1,1,1,0,1,15,22},
{0,1,1,1,1,1,1,1,0,1,15,23},
{0,1,0,0,1,1,1,1,0,1,15,24},
{0,1,0,1,0,1,1,1,0,1,15,25},
{0,1,0,1,1,0,1,1,0,1,15,26},
{0,1,0,1,1,1,0,1,0,1,15,27},
{0,1,0,1,1,1,1,0,0,1,15,28},
{0,1,0,1,1,1,1,1,1,1,15,29},
{0,1,0,1,1,1,1,1,0,0,15,30},
{1,0,1,0,0,0,1,1,1,1,16,17},
{0,0,0,1,1,1,1,1,0,0,16,18},
{1,0,1,0,1,1,0,0,0,1,16,19},
{0,0,0,1,1,0,0,0,1,1,16,20},
{0,1,0,0,0,0,1,0,1,0,16,21},
{1,0,0,0,0,0,1,0,1,0,16,22},
{1,1,1,0,0,0,1,0,1,0,16,23},
{1,1,0,1,0,0,1,0,1,0,16,24},
{1,1,0,0,1,0,1,0,1,0,16,25},
{1,1,0,0,0,1,1,0,1,0,16,26},
{1,1,0,0,0,0,0,0,1,0,16,27},
{1,1,0,0,0,0,1,1,1,0,16,28},
{1,1,0,0,0,0,1,0,0,0,16,29},
{1,1,0,0,0,0,1,0,1,1,16,30},
{1,0,1,1,1,1,0,0,1,1,17,18},
{0,0,0,0,1,1,1,1,1,0,17,19},
{1,0,1,1,1,0,1,1,0,0,17,20},
{1,1,1,0,0,0,0,1,0,1,17,21},
{0,0,1,0,0,0,0,1,0,1,17,22},
{0,1,0,0,0,0,0,1,0,1,17,23},
{0,1,1,1,0,0,0,1,0,1,17,24},
{0,1,1,0,1,0,0,1,0,1,17,25},
{0,1,1,0,0,1,0,1,0,1,17,26},
{0,1,1,0,0,0,1,1,0,1,17,27},
{0,1,1,0,0,0,0,0,0,1,17,28},
{0,1,1,0,0,0,0,1,1,1,17,29},
{0,1,1,0,0,0,0,1,0,0,17,30},
{1,0,1,1,0,0,1,1,0,1,18,19},
{0,0,0,0,0,1,1,1,1,1,18,20},
{0,1,0,1,1,1,0,1,1,0,18,21},
{1,0,0,1,1,1,0,1,1,0,18,22},
{1,1,1,1,1,1,0,1,1,0,18,23},
{1,1,0,0,1,1,0,1,1,0,18,24},
{1,1,0,1,0,1,0,1,1,0,18,25},
{1,1,0,1,1,0,0,1,1,0,18,26},
{1,1,0,1,1,1,1,1,1,0,18,27},
{1,1,0,1,1,1,0,0,1,0,18,28},
{1,1,0,1,1,1,0,1,0,0,18,29},
{1,1,0,1,1,1,0,1,1,1,18,30},
{1,0,1,1,0,1,0,0,1,0,19,20},
{1,1,1,0,1,1,1,0,1,1,19,21},
{0,0,1,0,1,1,1,0,1,1,19,22},
{0,1,0,0,1,1,1,0,1,1,19,23},
{0,1,1,1,1,1,1,0,1,1,19,24},
{0,1,1,0,0,1,1,0,1,1,19,25},
{0,1,1,0,1,0,1,0,1,1,19,26},
{0,1,1,0,1,1,0,0,1,1,19,27},
{0,1,1,0,1,1,1,1,1,1,19,28},
{0,1,1,0,1,1,1,0,0,1,19,29},
{0,1,1,0,1,1,1,0,1,0,19,30},
{0,1,0,1,1,0,1,0,0,1,20,21},
{1,0,0,1,1,0,1,0,0,1,20,22},
{1,1,1,1,1,0,1,0,0,1,20,23},
{1,1,0,0,1,0,1,0,0,1,20,24},
{1,1,0,1,0,0,1,0,0,1,20,25},
{1,1,0,1,1,1,1,0,0,1,20,26},
{1,1,0,1,1,0,0,0,0,1,20,27},
{1,1,0,1,1,0,1,1,0,1,20,28},
{1,1,0,1,1,0,1,0,1,1,20,29},
{1,1,0,1,1,0,1,0,0,0,20,30},
{1,1,0,0,0,0,0,0,0,0,21,22},
{1,0,1,0,0,0,0,0,0,0,21,23},
{1,0,0,1,0,0,0,0,0,0,21,24},
{1,0,0,0,1,0,0,0,0,0,21,25},
{1,0,0,0,0,1,0,0,0,0,21,26},
{1,0,0,0,0,0,1,0,0,0,21,27},
{1,0,0,0,0,0,0,1,0,0,21,28},
{1,0,0,0,0,0,0,0,1,0,21,29},
{1,0,0,0,0,0,0,0,0,1,21,30},
{0,1,1,0,0,0,0,0,0,0,22,23},
{0,1,0,1,0,0,0,0,0,0,22,24},
{0,1,0,0,1,0,0,0,0,0,22,25},
{0,1,0,0,0,1,0,0,0,0,22,26},
{0,1,0,0,0,0,1,0,0,0,22,27},
{0,1,0,0,0,0,0,1,0,0,22,28},
{0,1,0,0,0,0,0,0,1,0,22,29},
{0,1,0,0,0,0,0,0,0,1,22,30},
{0,0,1,1,0,0,0,0,0,0,23,24},
{0,0,1,0,1,0,0,0,0,0,23,25},
{0,0,1,0,0,1,0,0,0,0,23,26},
{0,0,1,0,0,0,1,0,0,0,23,27},
{0,0,1,0,0,0,0,1,0,0,23,28},
{0,0,1,0,0,0,0,0,1,0,23,29},
{0,0,1,0,0,0,0,0,0,1,23,30},
{0,0,0,1,1,0,0,0,0,0,24,25},
{0,0,0,1,0,1,0,0,0,0,24,26},
{0,0,0,1,0,0,1,0,0,0,24,27},
{0,0,0,1,0,0,0,1,0,0,24,28},
{0,0,0,1,0,0,0,0,1,0,24,29},
{0,0,0,1,0,0,0,0,0,1,24,30},
{0,0,0,0,1,1,0,0,0,0,25,26},
{0,0,0,0,1,0,1,0,0,0,25,27},
{0,0,0,0,1,0,0,1,0,0,25,28},
{0,0,0,0,1,0,0,0,1,0,25,29},
{0,0,0,0,1,0,0,0,0,1,25,30},
{0,0,0,0,0,1,1,0,0,0,26,27},
{0,0,0,0,0,1,0,1,0,0,26,28},
{0,0,0,0,0,1,0,0,1,0,26,29},
{0,0,0,0,0,1,0,0,0,1,26,30},
{0,0,0,0,0,0,1,1,0,0,27,28},
{0,0,0,0,0,0,1,0,1,0,27,29},
{0,0,0,0,0,0,1,0,0,1,27,30},
{0,0,0,0,0,0,0,1,1,0,28,29},
{0,0,0,0,0,0,0,1,0,1,28,30},
{0,0,0,0,0,0,0,0,1,1,29,30}};

bool BCH::Decode(bvec Ncode, bvec &unKcode)
{
	if (Ncode.size() != n)
		return false;

	unKcode.resize(k);

	bvec   cGuess; //估计出来的发送码向量
	cGuess.resize(n);

	//寄存器清0
	for (int i = 0;i < n-k; i++)
	{
		m_shiftReg[i] = 0;
		m_backReg[i] = 0;

	}


	bit		bGateOut = 0; //与门输出

	//模拟除法电路,求余式.
	//一共需要2n拍时钟
	for (i = 0;i < n ;i ++)
	{
		bit temp = 0;

		//求余式第一位寄存器联入
		if (i < n)
			m_shiftReg[0] = (Ncode[i] + bGateOut) % 2;
		else 
			m_shiftReg[0] = bGateOut;

		if (m_gx[0] == 1)
			m_shiftReg[0] = (m_shiftReg[0] + m_backReg[n-k-1]) % 2;

		for (int j = 1; j < n-k; j++)
		{
			if (m_gx[j] == 1)
				m_shiftReg[j] = (m_backReg[n-k-1] + m_backReg[j-1]) % 2;
			else
				m_shiftReg[j] = m_backReg[j-1];

		}
		
		//拷贝过来,相当于一次时钟触发
		m_backReg = m_shiftReg;
	}
	cGuess = Ncode;
	bool bNoErr = true;
	for (i = 0;i < n-k; i++)
	{
		if (m_shiftReg[i] == 1)
		{
			bNoErr = false;
			break;
		}
		

	}
	if (bNoErr)
		goto uncode_msg;


	for(i = 0;i < 496;i++)
	{
		bool bFind = true;
		for(int j = 0;j < 10; j++)
		{
			if (S[i][j] != m_backReg[9-j])
			{
				bFind = false;
				break;
			}
		}

		if (bFind)
		{
			//一位错误
			if (S[i][10] == S[i][11])
				cGuess[S[i][10]] = (cGuess[S[i][10]] + 1)%2;
			else //二位错误
			{
				cGuess[S[i][10]] = (cGuess[S[i][10]] + 1)%2;
				cGuess[S[i][11]] = (cGuess[S[i][11]] + 1)%2;
			}

			break;
		}

	}
	

uncode_msg:
	for (i = 0;i < k ; i++)
		unKcode[i] = cGuess[i];





	return true;
}

/*+++
系统码编码器
+++*/
bool BCH::SysEncode(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 ; //输入信息位
	bit		feedback; //反馈信息位


	for ( i = 0;i < n; i++)	//模拟n个时钟节拍
	{
		//反馈信息位,前k拍为信息,后n-k拍无输入
		if (i < k)
			feedback = (unKcode[i] + m_backReg[n-k-1]) % 2;
		else
			feedback = 0;
		
		//DO寄存器连接
		if (m_gx[0] == 1)
			m_shiftReg[0] = feedback ;


		//对寄存器进行移位操作. 移位的同时带上g(x)系数
		for(int j = 1;j < n-k ; j++)
		{
			if (m_gx[j] == 1)
				m_shiftReg[j] = (feedback + m_backReg[j-1]) % 2;
			else
				m_shiftReg[j] = m_backReg[j-1];
		}

		//输出部分
		if (i < k)
			Ncode[i] = unKcode[i];
		else
			Ncode[i] = m_backReg[n-k-1];

		
		//拷贝过来,相当于一次时钟触发
		m_backReg = m_shiftReg;


	}


	
	return true;
}

⌨️ 快捷键说明

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