从概念上,我们知道所谓编码就是根据信息字映射到码字,如果这一映射是代数关系确定和唯一的,就称为线性。
这一个过程用数学表达就是信息矩阵乘生成矩阵;当然从多项式角度也是这样,因为多项式和矩阵时表达的两种方式。
具体到实现时,一般我们会考虑用C或者matlab来辅助实现或者仿真,在硬件逻辑上实现时会考虑一些处理方式的技巧。
硬件逻辑实现有两种方式,用多项式乘法实现或者用除法实现。除法一般考虑用线性反馈移位寄存器实现,下面以这种方法
为例来实现。
系统码的矩阵表达为G=[Ikp],用多项式表达为C(x) = m(x)x^n-k + r(x) 同余0 (mod g(x)),这里r(x)是校验位多项式,m(x)是信息多项式。
故 r(x) = C(x) + m(x) x^n-k 同余m(x)x^n-k(mod g(x))。说明:因为码字多项式C(x)整除生成多项式g(x),故C(x)和0相对于g(x)同余,同时
也推出了r(x) =m(x)x^n-k(mod g(x))这个表达式,该表达式用于逻辑实现。对这个表达式的解读就是:要用g(x)生成系统码,首先必须将
信息组乘以x^n-k变成x^n-km(x);然后,用g(x)除(或者说x^n-km(x)除以g(x)),得到余式r(x);就得到所要求的校验位。因此。循环系统码的
编码问题就是以g(x)为模的除法问题。
一般用matlab生成的多项式是按降幂排列的行向量,记住这点便于理解其生成多项式来构造上述编码电路。
编码电路这样实现:g(x)的升幂和线性反馈移位寄存器从左到右是一一对应的。输入的信息bit从最右边输入(最高幂次n-k)处输入,然后根据
g(x)中多项式中系数为1引入反馈。注意在实现中对n-k个寄存器的编号可以根据自己喜好任意编,跟刚才说的幂的顺序没有关系。比如可以定义
最左边的寄存器位c[n-k],一次到最右边时是c[0]等。