循环码由于其便于实现,从而得到了广泛的应用,这其中较为常见的有CRC校验,BCH码和RS码。CRC主要用于检验被保护数据段的有效性,而并不用于纠错。狭义的BCH码是二进制码,即编码是针对二进制序列,输出同样也是二进制序列。RS码可以看作是BCH码在多元域上的拓展,从生成多项式的角度看,多项式的系数取自多元域(通常是二元域的扩域),信息多项式及码多项式系数也均取自多元域。当然,由于整个数字系统本身是二进制的,所以在编码前需要经过串并转换将二进制序列映射到多元域上的元素,在编码后也需要相应的并串转换将多元域元素映射到二进制序列。
在定义RS编码之前,首先需要确定二进制序列到多元域元素的映射关系
。由于常用的RS码建立在二元扩域上,所以接下来的内容中涉及到多元域均只针对二元扩域。二元扩域GF(2^m)中一共包含2^m个元素。给定本原元
,这2^m个元素分别是
。显然,为了表示多元域上的元素,需要m个二进制比特。很容易想到用alpha的阶来表示多元域元素,这2^m个元素的阶分别为
。这种表示方法虽然可行,却不利于硬件实现。选择二进制表示的问题本质上就是确定一组多元域上的维数为m的基,任意一个元素的二进制表示即为该元素在这组基上的坐标。除了前面说的指数基之外,还可以将
作为一组基,每个元素都可以表示为它们的线性组合,一共有2^m种。这组基应用十分广泛,在这里我们称之为标准基。除了这两种易于理解的表示外,还有一种十分重要但定义较为复杂的基叫做对偶基。首先需要定义多元域元素的迹如下:
设某组基为
,与之对偶的基为
。假设某元素基于对偶基的表示为
则
。称
为
的对偶基。同时,也常将标准基的对偶基直接简称为对偶基。之所以引入对偶基,是为了方便硬件实现,尤其是多元域乘法的实现。在介绍对偶基乘法之前,首先列出迹的主要性质:
接下来考虑乘法算式W=ZG的实现,其中Z用对偶基表示为
G用标准基表示为
则
基
的坐标为
令
,其值可如下迭代得到:
而
的计算需要用到本原元的表达式
:
所以
可以用m-1低阶量的线性组合表示,显然可以用反馈电路实现
随着k的更新。根据
和g_i的值可以得到乘积W=ZG在对偶基下的坐标。注意到,上面讨论的基于反馈电路的设计是串行实现,为了提高速度还可以采取并行实现(to
be appended)。
总而言之,基于对偶基的乘法要求其中被乘数为对偶基表示,乘数为标准基表示,乘积输出为对偶基,即product(dual) =
multiplicand(dual) *
multiplier(standard),了解这一点很重要,后面我们将看到选择哪一个作为乘数是有讲究的。
相比于乘法而言,加法则十分简单。无论是采用标准基,还是对偶基,两个多元域元素相加,只要将它们对应的坐标相加就可以得到和的坐标。