循环码生成原理与FPGA实现

        近日,因为项目的需要,重新拾起编码理论,这个项目当中,发送端的信息序列添加了CRC码字,好在接收端进行CRC校验,检测接收到的信息序列是否在传输过程中出现了错误。CRC编码作为循环码字的一种,通常用在数据传输的检错中,其生成原理与循环码字的生成完全一致,其原理下面会进行说明。

1. 编码原理

        循环码的码字多项式都是多项式g(D)的倍式,该g(D)的阶数为r=n-k,对于一个信息序列M(D),其码字多项式可以表示为

A(D) = D^(n-k)*M(D) + r(D),

        r(D)为监督码多项式,它等于D^(n-k)*M(D)除以g(D)得到的余式,说的通俗一点,循环码的构造就是凑出一个余式r(D)使得码字多项式A(D)能够被生成多项式g(D)整除,在传输过程中码字A(D)一旦发生了错误,则接收端的码字不能够被生成多项式整除,就可以知道在传输过程中发生了错误,在循环码字的纠错范围内时,可以根据错误的图案(接收到的码字除以生成多项式的余式),找到对应错误的信息比特位。余式r(D)可以表示为

r(D) = D^(n-k)*M(D) mod g(D),

        下面举个例子看看循环码字是怎么生成的。对于一个(7, 4)的系统循环码,7表示码字长度n=7,4表示编码的信息序列长度k=4,那么监督序列的长度r=n-k=3,系统码表示生成的n比特码字中,前面k个比特的码字与信息码字完全一致,只是在信息码字后添加了r个比特的校验位。言归正传,(7, 4)系统循环码的生成多项式为g(D) = D^3 + D^2 + 1,若信息码为1001,那么怎么求编码后的码字呢?我们知道,只要求出后面r个比特的监督码字就行了,前面的k个比特的码字照抄信息码字就行了。信息码字1001写成多项式的形式为

M(D) = D^3 + 1,

        监督多项式通过求余得到:

r(D) = D^3*(D^3 + 1) mod (D^3 + D^2 + 1) = D + 1,

        码字多项式:

A(D) = D^3*(D^3 + 1) + D + 1 = D^6 + D^3 + D + 1,

        码字多项式写成序列的形式为1001011。值得一提的是,在编码过程中,所采用是GF(2)域上的加减法运算,相当于说减法也可看成加法,所有的加法都是模2加运算,即

1 + 1 = 0, 1 + 0 = 1, 0 + 1 = 1, 0 + 0 = 0,

        对于k比较长的情况,写成这种多项式的形式不便于计算,这里提供另外一种表达形式,实际上都是求余式操作,不过在形式上做了简化而已。

                                                                                         1  1  1  1

                                                                                 _____________________

                                                               1101       |         1   0  0  1  0  0  0

                                                                                   +    1   1  0  1

                                                                                   ----------------------------

  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
FPGA(现场可编程逻辑门阵列)是一种可编程的硬件设备,可以根据用户的需求进行灵活的配置和实现。CRC(循环冗余校验)是一种错误检测技术,常用于数据传输中。 FPGA实现CRC原理的基本过程包括以下几个步骤: 1. 首先,需要定义CRC的生成多项式。生成多项式是决定校验位长度和性能的关键因素。常用的生成多项式有CRC-8、CRC-16和CRC-32等。 2. 接下来,需要将生成多项式转化为二进制形式,并计算出对应的多项式系数。这些系数将会在后续的计算中被使用。 3. 然后,在FPGA中创建一个数据位宽与生成多项式位数相等的寄存器。该寄存器将用于存储待校验的数据。 4. 将数据与生成多项式进行异或运算,并将结果暂存在一个寄存器中。然后,将该结果右移一位,再次进行异或运算。重复这个过程,直到将所有的数据位都处理完毕。 5. 循环冗余校验码即为最后的寄存器内容。将该校验码与数据一起传输,接收方可通过相同的生成多项式和计算过程进行校验,并判断数据是否出现错误。 通过使用FPGA实现CRC校验,可以高效地处理数据,并能够在传输过程中快速检测出数据是否出现错误。FPGA的灵活性使得校验位长度和生成多项式能够根据需要进行改变,提高了系统的可定制性和应用范围。同时,FPGA的并行计算能力也使得CRC计算速度更快,能够满足高速数据传输的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值