BCH码小述

BCH码小述

abcshimeng@163.com


BCH码是循环码的一种,循环码是线性分组码的一种。循环码有严密的代数理论的支持,应用比较广泛。本文不介绍BCH码的代数理论。本文以实用为目的,理解BCH码的编码和解码流程,并进行程序实现。

1.BCH编码

BCH码是循环码的一种,满足循环码的编码方法。令给定的编码方式为(nk),生成多项式为g(x),信息码多项式为m(x)。编码步骤如下:

1)xn-km(x)。这一运算实际上是把信息位码后附加上(n-k)的“0

2)g(x)xn-k m(x),得到商Q(x)和余式r(x),即(xn-k m(x)) / g(x) = Q(x) + (r(x)/g(x))

3)编码后的输出为T(x) = xn-k m(x) + r(x)

以上是BCH码的编码步骤,下面给出电路实现,一般用一个除法电路来实现。以生成多项式g(x)=x4+x+1,编码方式为(1511)为例。在实际应用中生成多项式的选择有比较成熟的规则。编码电路的形式根据生成多项式进行设计,本例的编码电路如下:

该电路的工作分为两个过程:

1)开关S置向下方。该过程中a,b,c,d,e寄存器进行移位,相当于进行多项式除法,所得的商数e进行反馈,输出序列和输入序列相同;

2)开关S置向上方。其实此时已经得到了所要求的余数r(x)。这个过程中反馈e被断开。根据编码步骤中的第一步,信息码后面已经加上n-k个“0,所以输入序列全为“0,输出其实就是a,b,c,d寄存器中的值经过移位后输出的序列。

上述过程的C语言实现的程序如下:

#define           N            15

#define           K            11

void BCH_Code(int *info, int *infor_coded)

{ 

    int i;

    int a = 0, b = 0, c = 0, d = 0, e = 0;

 

    for(i=0; i<N; i++) {

        if(i<K) {

            infor_coded[i] = info[i]; 

            e = d^sendcode[i];

            d = c;

            c = b;

            b = a^e;

            a = e;

        } else {

            infor_coded[i] = d^info[i];

            d = c;

            c = b;

            b = a;

            a = 0;

        }

    }

}

令信息码为二进制序列10110100101,上述编码程序在VC++6.0上仿真结果如下:

 

参考书籍:

樊昌信 等,《通信原理》,国防工业出版社。

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值