BCH编码——c语言代码


前言

主要讲述BCH码如何用c语言写出来

一、BCH码是什么?

BCH码是一类重要的纠错码,它把信源待发的信息序列按固定的κ位一组划分成消息组,再将每一消息组独立变换成长为n(n>κ)的二进制数字组,称为码字。如果消息组的数目为M(显然M>=2),由此所获得的M个码字的全体便称为码长为n、信息数目为M的分组码,记为n,M。把消息组变换成码字的过程称为编码,其逆过程称为译码。 比如有60bit数据,我每11bit为一组进行BCH编码(n=11),然后进行BCH编码,得到4位校验位,总位数就是M=15位。

二、BCH编码

1.原理

将上述11bit称为信息位,每次都是用信息位除以生成多项式对应的数(比如生成多项式g(x)=x^4+x+1,则对应10011,就是x的幂的系数)
改进BCH编码算法,去掉生成多项式最高位,判断信息位最高位是否为1,为1就左移并异或生成多项式,如果信息位最高位不是1,则对信息位直接左移1位。
比如任意给一个11位信息位11100011101,10011是对应生成多项式的系数,这里去掉其最高位变为0011,按照上述算法,一共要循环11次,11位信息位的位数。得到最高位的4位1010就是校验位,原来的11位信息位加上4位校验位就得到BCH编码后的数据包。
在这里插入图片描述

代码如下(示例):

	uint16_t bch_code(uint16_t data){
	uint8_t i = 0;
	uint16_t BCH = 0;
	uint16_t poly =(0x3<<7);// g = x^4 + x + 1
	uint16_t code = 0;
	BCH = (data & 0x07ff);
	for (i=0;i<11;i++){ if ((BCH & 0x0400) == 0x0400){
		BCH = (BCH<<1) ^ poly;
		}
	else{
		BCH = BCH<<1;
		}
	}

	code = (data & 0x07ff)<<4;
	code|= ((BCH>>7) & 0xf);
	return code;
	}

poly就是对应的多项式系数左移之后的结果,这里左移7位是为了和信息位对齐。


总结

本文初略介绍了BCH编码的C语言表述,如有不对,还请指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值