24小时热门版块排行榜    

查看: 2347  |  回复: 0

source03

银虫 (正式写手)


[资源] BCH编码说明

声明:本文参考了http://blog.csdn.net/shimeng/archive/2010/04/10/5471525.aspx BCH码小述而作,在此要向该作者表示感谢。
图片没能转载到此,请大家到我的博客里看吧。
http://source03.blog.163.com/blo ... 222201121322718365/

BCH属于循环码,是一种常用的纠错编码,其编码可以有两种方式实现:串行形式和并行形式。串行形式是利用生成多项式和相关寄存器来实现,具有占用资源少的优点,但速度比较慢(要n个时钟周期)。并行形式是利用生成矩阵和一些逻辑门(主要是异或门)来实现,属组合逻辑电路,占用资源多,速度快。

一、串行形式的编码实现

         设循环码的生成多项式为g(x),待编码的消息多项式为u(x),g(x)和u(x)的次数分别是r和k-1,则C(x)=u(x)·xn-k+u(x)·xn-k|modg(x)为编码后的多项式,用此方法编得的码字为系统码。

    下面给出电路实现,直接将u(x)移位n-k次即得到u(x)·xn-k,为得到C(x)的第二项,要用到除法器,是将u(x)移位n-k次后除g(x),取其余数。

    下图是g(x)= X8+X7+X6+X4+1,实现BCH(15,7)的编码电路图。





电路工作过程分两步:

1.       两个开关都向上,输入数据一路经SW2输出,组成编码的信息位,另一路与h的输出相异或后经SW1反馈到相应寄存器单元,这主要完成(u(x)·xn-k)/g(x)),完成这个过程需要k(7)个时钟周期;

2.       两个开关都向下,输入数据与h的输出通路断开,除法运算完成,每来一个脉冲把u(x)·xn-k)mod g(x)的结果依次输出,余数由h输出后经SW2输出成为编码的校验位。完成这个过程需要n-k(8)个时钟周期。



C语言实现如下:

/****************************************************

实现BCH(15,7)的编码输出

*****************************************************/

#include

#define           N            15

#define           K            7

int info[K];

int Encode[N];



void BCHencode()

{  

    int i;

    int a = 0, b = 0, c = 0, d = 0, e = 0,f = 0,g = 0,h = 0,j = 0;

    for(i=0; i
        if(i
           {

         Encode = info;

                    j = h^info;      //x8

                    h = g^j;              //x7

                    g = f^j;               //x6

                    f = e;

                    e = d^j;              //x4

                    d = c;

                    c = b;

                    b = a;

                    a = j;                            //1

        }

           else

           {

                    Encode = h;

                    h = g;

                    g = f;

                    f = e;

                    e = d;

                    d = c;

                    c = b;

                    b = a;

                    a = 0;

        }

    }

}



main()

{

int Num = 0,count;

int Din = 0x37;                            //十六进制形式,最大值为7F

int Edin = Din;


//把十六进制转换为二进制

for(Num = 0;Num
{

           if(Din%2)

                    info[K-1-Num] = 1;

           else

                    info[K-1-Num] = 0;

           Din = Din >>1;

}



BCHencode();



printf("The Data:%x \n encode is:",Edin);

for(count = 0;count
{

           if((N-count)%4==0)

           {

                    printf("\t";

           }

                    

printf("%d",Encode[count]);

}

printf("\n";



}

在VC上运行结果如下:




二、并行形式的编码实现

           对于并行形式的编码有

C=UG

         U—1行(N-k)列的数组,即输入数值的二进制排列形式

         G—生成矩阵

生成矩阵G= ,是(n-k)×n阶矩阵。

在文献[2]中给出了具体的实现方法。





参考文献:

[1]       沈连丰.信息论与编码[M].科学出版社,2004.

[2]       赵华,殷奎喜.(15,7)BCH编译码器的VHDL设计.现代电子技术,2004.
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

相关版块跳转 我要订阅楼主 source03 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见