编码理论|循环码
例题1一般循环码
设[7,3]循环码的生成多项式为 \(g(x)= x^4+x^3+x^2+1\)
1)写出它的校验多项式 \(h(x)\);
2)利用生成多项式和校验多项式,对信息多项式 \(m(x)=x^2+1\) 编码写出码字多项式并验证(要求直接使用多项式,不要用矩阵形式);
3)求出生成矩阵和校验矩阵。
(码长 $ n = 7 $,信息位 $ k = 3 $,校验位 $ r = 4 $)
1. 校验多项式 $ h(x) $ 的计算
原理:由 $ g(x) h(x) = x^7 - 1 $(在 GF(2) 中为 $ x^7 + 1 $),通过多项式除法求 $ h(x) $。
计算:
\((x^7 + 1) \div (x^4 + x^3 + x^2 + 1)\)
\(h(x) = x^3 + x^2 + 1\)。
验证:$ g(x) h(x) = (x^4 + x^3 + x^2 + 1)(x^3 + x^2 + 1) = x^7 + 1 $,满足要求。
2. 编码过程及验证
输入信息多项式:$ m(x) = x^2 + 1 $(对应信息位 $ (1, 0, 1) $,因 $ m(x) = 1 \cdot x^0 + 0 \cdot x^1 + 1 \cdot x^2 $)
编码原理:
- 步骤 1:计算 $ x^r m(x) = x^4 (x^2 + 1) = x^6 + x^4 $
- 步骤 2:求校验多项式 $ p(x) = x^r m(x) \mod g(x) $
- 步骤 3:码字多项式 $ c(x) = x^r m(x) + p(x) $(在 GF(2) 中加法为异或)。
- 计算:
求 \(p(x)\):
$
(x^6 + x^4) \div (x^4 + x^3 + x^2 + 1)
$
余数为 \(p(x) = x + 1\)
码字多项式:
\(c(x) = (x^6 + x^4) + (x + 1) = x^6 + x^4 + x + 1\)
对应码字向量:\((c_0, c_1, c_2, c_3, c_4, c_5, c_6) = (1, 1, 0, 0, 1, 0, 1)\)(系数:$ x^0:1, x^1:1, x^2:0, x^3:0, x^4:1, x^5:0, x^6:1 $) - 使用校验多项式 $ h(x) $验证:
原理:码字满足 $ c(x) h(x) \equiv 0 \pmod{x^7 - 1} $。
计算:
$
c(x) h(x) = (x^6 + x^4 + x + 1)(x^3 + x^2 + 1) = x^9 + x^8 + x^7 + x^2 + x + 1.
$
模 $ x^7 - 1 $(利用 \(x^7 \equiv 1, x^8 \equiv x, x^9 \equiv x^2\)):
\(x^9 + x^8 + x^7 + x^2 + x + 1 \equiv x^2 + x + 1 + x^2 + x + 1 = 0 \pmod{x^7 - 1}\)
结果为 0,验证通过。
码字多项式 $ c(x) = x^6 + x^4 + x + 1 $,对应码字 $ (1, 1, 0, 0, 1, 0, 1) $。
3. 生成矩阵 $ G $ 和校验矩阵 $ H $
-
生成矩阵 $ G $ 构造原理:
行向量由 $ g(x) $ 及其循环移位 \(x^i g(x)\)(\(i = 0, 1, \dots, k-1\)) 的系数组成。
向量顺序:$ (c_0, c_1, \dots, c_6) $ 对应多项式系数($ c_i $ 为 $ x^i $ 系数)。 -
计算:
$ g(x) = x^4 + x^3 + x^2 + 1 $ → 向量:\((1, 0, 1, 1, 1, 0, 0)\)
$ x g(x) = x^5 + x^4 + x^3 + x $ → 向量:\((0, 1, 0, 1, 1, 1, 0)\)
$ x^2 g(x) = x^6 + x^5 + x^4 + x^2 $ → 向量:\((0, 0, 1, 0, 1, 1, 1)\)
生成矩阵:
\(G = \begin{bmatrix} 1 & 0 & 1 & 1 & 1 & 0 & 0 \\ 0 & 1 & 0 & 1 & 1 & 1 & 0 \\ 0 & 0 & 1 & 0 & 1 & 1 & 1 \end{bmatrix}\) -
校验矩阵 $ H $ 构造原理:
使用校验多项式 $ h(x) = x^3 + x^2 + 1 $ 的互反多项式 $ \tilde{h}(x) = x^{\deg h} h(1/x) = x^3 + x + 1 $。
行向量由 $ \tilde{h}(x) $ 及其循环移位 \(x^i \tilde{h}(x)\)(\(i = 0, 1, \dots, r-1\)) 的系数组成。 -
计算:
$ \tilde{h}(x) = x^3 + x + 1 $ → 向量:\((1, 1, 0, 1, 0, 0, 0)\)。
$ x \tilde{h}(x) = x^4 + x^2 + x $ → 向量:\((0, 1, 1, 0, 1, 0, 0)\)。
$ x^2 \tilde{h}(x) = x^5 + x^3 + x^2 $ → 向量:\((0, 0, 1, 1, 0, 1, 0)\)。
$ x^3 \tilde{h}(x) = x^6 + x^4 + x^3 $ → 向量:\((0, 0, 0, 1, 1, 0, 1)\)。
校验矩阵:
\(H = \begin{bmatrix} 1 & 1 & 0 & 1 & 0 & 0 & 0 \\ 0 & 1 & 1 & 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 1 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 & 1 & 0 & 1 \end{bmatrix}\)
验证:矩阵满足 $ G H^T = 0 $,表明码字空间与校验空间正交。
循环码概述
任何码字循环移位后,仍然是该循环码的一个码字。
线性分组码:首先,循环码是线性码,意味着码字空间是一个向量空间,具有封闭性(任意两个码字的线性组合仍然是码字)和零元素(全零序列是码字)。其次,它是分组码,意味着将信息分成固定长度的组(k位),然后为每组添加r=n-k位的冗余(校验位),生成一个n位的码字。
循环性:如果一个码字是 \((c_{n-1}, c_{n-2}, ..., c_1, c_0)\),那么将其循环右移一位得到的序列 \((c_0, c_{n-1}, c_{n-2}, ..., c_1)\) 也必然是同一个循环码的一个码字。同样,循环左移也保持码字性质。
码字的多项式表示
为了利用循环码的循环特性,我们引入码字多项式的概念。对于一个长度为n的码字 \((c_{n-1}, c_{n-2}, ..., c_1, c_0)\),可以定义其对应的多项式为:
\(C(x) = c_{n-1}x^{n-1} + c_{n-2}x^{n-2} + ... + c_1x + c_0\)
循环移位:将码字循环右移一位,对应的多项式变为 \(x C(x) mod (x^n - 1)\)因为 \(x^n C(x)\) 在模 \((x^n - 1)\) 下等于 \(C(x)\),所以 \(x C(x)\) 只是将最高次项 \(x^n\) 降下来变成常数项 \(c_{n-1}\),实现了循环。
例如,码字 \((c_2, c_1, c_0)\) 的多项式是 \(C(x) = c_2x^2 + c_1x + c_0\)
循环右移一位得到 \((c_0, c_2, c_1)\),其多项式是 \(c_0x^2 + c_2x + c_1 = x (c_2x^2 + c_1x + c_0) mod (x^3 - 1) = x C(x) mod (x^3 - 1)\)
生成多项式 g(x)
循环码的所有码字多项式 \(C(x)\) 都有一个共同的性质:它们都是一个固定次数为 \(r = n-k\) 的多项式 g(x) 的倍式。这个多项式 g(x) 被称为生成多项式。
生成多项式 g(x) 的性质:
1. g(x) 是一个 r 次多项式。
2. g(x) 是 \((x^n - 1)\) 的一个因子,即 \((x^n - 1) = g(x) h(x)\)
3. g(x) 是码字中次数最低的非零码字多项式(通常取常数项不为零的那个)。
4. g(x) 本身也是一个码字多项式。
如何找到 g(x):找到 \((x^n - 1)\) 的所有因式,然后选择一个 r 次的因式作为 g(x)。这个选择通常是为了满足特定的纠错能力(如最小距离)。
编码过程
利用生成多项式 g(x),可以将 k 位信息组 \((m_{k-1}, ..., m_0)\) 编码成长为 n = k + r 的循环码码字。
(系统循环码)
步骤如下:
- 将信息组表示为多项式:\(M(x) = m_{k-1}x^{k-1} + ... + m_0\)
- 用 \(x^r\) 乘以 M(x):得到 \(x^r M(x)\)。这一步是为了在信息位后面预留 r 个位置给校验位。
- 计算余式:计算 \((x^r M(x))\) 除以 g(x) 的余式 r(x)。即,找到 r(x) 使得 \(x^r M(x) = q(x) g(x) + r(x)\),其中 \(deg(r(x)) < r\)
- 构造码字多项式:码字多项式 \(C(x) = x^r M(x) + r(x)\)
- 得到码字:将 C(x) 转换回码字序列\((c_{n-1}, ..., c_0)\)
\(C(x) = x^r M(x) + r(x) = [q(x) g(x) + r(x)] + r(x) = q(x) g(x)\)
C(x) 是 g(x) 的倍式,根据生成多项式的定义,它必然是一个码字多项式。
校验多项式 h(x)
除了生成多项式 g(x),还可以定义校验多项式 h(x)。因为 \(g(x) h(x) = x^n - 1\),所以 \(h(x) = (x^n - 1) / g(x)\)。h(x) 的次数是 k
编码步骤:
- 将信息多项式表示为 M(x)。
- 计算 \(s(x) = M(x) h(x) mod (x^n - 1)\)。由于 h(x) 的最高次是 k,s(x) 的最高次最多是 n-1。
- 码字多项式 \(C(x) = s(x)\)。这是一个系统码,因为 M(x) 的系数会出现在 C(x) 的前 k 位(或特定位置)。
译码过程
接收端收到序列 \(R = (r_{n-1}, ..., r_0)\),对应多项式 R(x)。
- 计算伴随式多项式:计算 \(S(x) = R(x) mod g(x)\)。如果传输没有错误,\(R(x) = C(x) = q(x)g(x)\),则 S(x) = 0。如果 S(x) ≠ 0,则表示有错误。
- 错误检测:检查 S(x) 是否为零。若为零,则认为无错(或错误无法检测)。若不为零,则认为有错。
- 错误定位与纠正:
根据伴随式 S(x) 的值,尝试确定错误图样 E(x)。
由于循环性,可以利用错误图样本身的循环特性。例如,如果知道一个特定错误图样 \(E_1(x)\) 对应的伴随式是 \(S_1(x)\),那么循环移位后的错误图样 \(x^i E_1(x) mod (x^n - 1)\) 对应的伴随式就是 \(x^i S_1(x) mod g(x)\)
对于简单的循环码(如汉明码),可以通过查表法将 S(x) 映射到对应的错误位置。
对于更复杂的循环码(如BCH码),有更高级的算法(如Berlekamp-Massey算法)来求解错误位置和错误值。 - 纠正错误:计算 V(x) = R(x) + E(x)(注意:这里的加法是模2加,即异或)。然后从 V(x) 中提取出信息位。
循环码的优点
结构简单:可以用简单的反馈移位寄存器实现编码和伴随式计算。
循环特性:简化了译码器的设计,特别是错误定位。
性能良好:存在具有良好纠错性能的循环码,如BCH码、RS码等。
种类丰富:包含了许多重要的子类,如汉明码、BCH码、RS码等。
循环码的系统码
例题2
题目:考虑一个 (7, 4) 循环码,其生成多项式为 \(g(x) = x^3 + x + 1\)
- 如果信息组是 (1, 0, 1, 1),请用系统编码方法求出对应的码字。
- 如果接收到的码字是 (1, 0, 1, 1, 0, 1, 1),请判断是否有错误,并尝试纠正。
解:
系统编码方法通过多项式除法实现:将信息多项式乘以 $ x^r = x^3 $,然后除以 $ g(x) $,余数作为校验多项式,码字多项式为 $ c(x) = x^3 m(x) + p(x) $
编码:
信息组 (1, 0, 1, 1) 对应信息多项式 \(M(x) = x^3 + x^2 + 1\)
k=4, r=3。计算 \(x^r M(x) = x^3 (x^3 + x^2 + 1) = x^6 + x^5 + x^3\)
计算 \((x^6 + x^5 + x^3)\) 除以 \(g(x) = x^3 + x + 1\)
余式 r(x) = 1
码字多项式 \(C(x) = x^r M(x) + r(x) = x^6 + x^5 + x^3 + 1\)
对应的码字为 (1, 0, 0, 1, 0, 1, 1)
译码:
接收码字 R = (1, 0, 1, 1, 0, 1, 1) 对应 \(R(x) = x^6 + x^5 + x^3 + x^2 + 1\)
计算伴随式多项式 \(S(x) = R(x) mod g(x)\)
$ = x^2$
余式 \(S(x) = x^2 ≠ 0\)所以有错误。
尝试纠正(对于简单的循环码,可以尝试定位单个错误):
假设只有一个错误,发生在第 i 位(从0开始计数,对应 \(x^i\))
单个错误图样 \(E_i(x) = x^i\)其伴随式 \(S_i(x) = E_i(x) mod g(x) = x^i mod g(x)\)
找到一个 i,使得 \(x^i mod g(x) = S(x) = x + 1\)
尝试计算:
\(i=0: x^0 mod g(x) = 1\)
\(i=1: x^1 mod g(x) = x\)
\(i=2: x^2 mod g(x) = x^2\)
发现当 i=2 时,\(x^2 mod g(x) = x^2 = S(x)\)因此,错误发生在第2位(对应 \(x^2\) 的系数)
纠正错误:将接收码字的第2位取反(模2加1)。
接收码字:1 0 1 1 0 1 1
纠正后: 1 0 0 1 0 1 1
提取信息:纠正后的码字是 \((1, 0, 0, 1, 0, 1, 1)\)
对应多项式 $ c(x) = x^6 + x^5 + x^3 + 1 $,验证 $ c(x) \div g(x) $ 余数为 0,正确

浙公网安备 33010602011771号