↓ 跳过正文
  1. 文章/

信息论9 循环码

学习笔记 信息论

目录
信息论 - 这篇文章属于一个选集。
§ 9: 本文

🌟 欢迎来到第9讲:循环码——优雅的代数结构与高效的电路实现
#

(对应教材《数字通信原理》第八章8.6)

在上节,我们学习了用矩阵来"生产"和"检验"码字。今天,我们要给这个过程装上"流水线"。循环码就是这样一种自带"流水线"属性的编码。它的核心特点是循环移位不变性:一个合法的码字,把它像传送带一样循环挪动任意位,得到的仍然是一个合法的码字!

这种看似简单的特性背后,蕴含着深刻的代数结构。它允许我们抛开繁琐的矩阵,转而使用一个更强大的工具——多项式——来描述和操作码字。编码过程将变为多项式乘法,而译码和校验则变为多项式除法求余数。最精彩的是,这一切都可以用简单的线性反馈移位寄存器 (LFSR) 电路来飞速完成。本讲,我们将彻底揭开循环码的面纱,从多项式表示到最终的电路实现。

学习目标:

  1. 【语言】 掌握用多项式描述码字,并熟练进行模2下的多项式加、乘、除运算。
  2. 【理论】 深刻理解生成多项式 g(X) 的核心地位及其代数性质(是 $X^n+1$ 的因式,能整除所有码多项式)。
  3. 【编码】 彻底掌握系统型循环码的编码原理,能手算多项式长除法求得监督位,并能根据 g(X) 画出编码器电路。
  4. 【译码】 理解伴随式多项式 S(X) 的原理,并掌握利用其循环特性进行错误定位的精髓。
  5. 【硬件】 能够分析译码器电路,并完整复现一个码字的接收、校验、错误定位和纠正的全过程。
  6. 【扩展】 了解循环汉明码和强大的BCH码的设计思想与能力。

📚 本讲知识地图
#

file-9循环码6.jpg

📝 本讲主要内容
#

1. 循环码的新语言:多项式及其运算
#

线性分组码使用向量和矩阵,而循环码则升级到了一个更强大的代数工具:多项式。

1.1. 从向量到多项式
#

一个n维码字 $C = (c_{n-1}, c_{n-2}, \dots, c_1, c_0)$ 可以唯一地表示为一个次数最高为 $n-1$ 的多项式: $$ C(X) = c_{n-1}X^{n-1} + c_{n-2}X^{n-2} + \dots + c_1X^1 + c_0X^0 $$

  • 示例 (PPT p115): 码字 [1 1 0 1] $\leftrightarrow$ $C(X) = X^3 + X^2 + 1$。

1.2. 核心运算:GF(2)上的多项式运算
#

所有系数的运算都在 GF(2) 域上进行,即"模2加(异或)“和"模2乘(与)"。

  • 加法 (异或)
  • 示例: [1101] + [0101]
  • $(X^3+X^2+1) + (X^2+1) = X^3 + (1+1)X^2 + (1+1) = X^3$
  • 结果: [1000]
  • 乘法
  • 按普通多项式乘法展开,然后系数模2。
  • 示例: $(X^3+X^2+1) \times (X^2+1) = X^5+X^4+X^2+X^3+X^2+1 = X^5+X^4+X^3+1$
  • 除法 (模运算)
  • 这是循环码的核心运算,使用长除法,但借位时用异或。
  • 示例 (PPT p114): $\frac{X^5+X^4+X^3+1}{X^3+X^2+1}$ 【图片:PPT p114中的多项式长除法过程图】 file-9循环码1.jpg 商为 $X^2+1$,余数为 $X^1$。

1.3. 循环码的代数定义
#

  • 定义 8.7.1: 一个线性分组码是循环码,如果其码字集 {C} 中任意一个码字 $C$ 循环移位后,得到的码字 $C'$ 仍属于 {C}。
  • 代数等价: 码字循环左移一位,在多项式上等价于:$C'(X) = [X \cdot C(X)] \pmod{X^n+1}$。

循环左移可以看作卷积

2. 生成多项式 g(X):循环码的DNA
#

  • 定理 8.7.4 & 8.7.6:
    1. 在一个 (n,k) 循环码中,有且仅有一个次数为 $r=n-k$ 的生成多项式 g(X)。
    2. 任何一个许用码字多项式 C(X) 都能被 g(X) 整除。
    3. g(X) 必须是 $X^n+1$ 的一个因式。

3. 编码实现:从数学到电路
#

3.1. 系统型循环码编码原理
#

我们重点学习更实用的系统码编码方式。目标是生成 $C(X)$,使其既包含原始信息 $A(X)$,又能被 $g(X)$ 整除。

  • 系统码编码步骤 (PPT p126):
    1. 预留监督位:将 k 位信息多项式 $A(X)$ 乘以 $X^{n-k}$,相当于在其末尾添加 $n-k$ 个0,为监督位腾出空间。
    1. 计算监督位:用生成多项式 $g(X)$去除 $X^{n-k}A(X)$,得到余数多项式 $r(X)$。 $$ \frac{X^{n-k}A(X)}{g(X)} = Q(X) + \frac{r(X)}{g(X)} $$
    1. 合成码字:最终的码字多项式 $C_s(X)$ 由预留了位置的信息位和监督位(余数)构成。 $$ C_s(X) = X^{n-k}A(X) + r(X) $$ 这个 $C_s(X)$ 一定能被 $g(X)$ 整除,是一个合法的许用码字。

3.2. 【深度例题剖析】(7,4)系统循环码编码 (PPT p127)
#

  • 参数: n=7, k=4。生成多项式 $g(X) = X^3+X^2+1$。
  • 输入信息: 1100,对应信息多项式 $A(X) = X^3+X^2$。
  • 步骤1: 计算 $X^{n-k}A(X) = X^3(X^3+X^2) = X^6+X^5$。
  • 步骤2: 做多项式长除法 $\frac{X^6+X^5}{X^3+X^2+1}$。
X^3 + 1 (商 Q(X)) 
____________ 
X^3+X^2+1 | X^6 + X^5 + 0 + 0 + 0 + 0 
           -(X^6 + X^5 + X^3) 
            _________________ 
            X^3 + 0 + 0 -(X^3 + X^2 + 1) 
                ______________ 
                X^2 + 1 (余数 r(X)) 
  • 步骤3: 合成码字 $C_s(X) = (X^6+X^5) + (X^2+1) = X^6+X^5+X^2+1$。 码字: [1 1 0 0 1 0 1],其中 1100 是信息部分,101 是监督部分。

3.3. 编码器硬件实现 (PPT p137)
#

✨ 费曼学习法之生动比喻:自动余数计算器

  • 想象一个有 r 个格子的盒子(移位寄存器),每个格子能存一个比特。
  • 盒子上有一些"管道”(反馈线),管道的开关位置由 g(X) 决定。
  • 前 k 步:你把 k 个信息比特一个接一个地从"入口"推进盒子。每推进一个,盒子里的比特就自动"晃动"一次(移位和反馈异或)。这k次推进和晃动,就是在模拟多项式除法。同时,这 k 个比特也直接从"主出口"出去了。
  • 后 r 步:你关掉入口,盒子不再晃动,只让里面的比特从"次出口"一个接一个地排队出去。这时出去的,就是你千辛万苦算出来的余数!

电路分析 (PPT p137): 【图片:PPT p137 系统码编码器电路图】 file-9循环码2.jpg

  • 电路结构:
  • $r=n-k$ 个 D 触发器构成移位寄存器。
  • 反馈由加法器(异或门)实现,反馈抽头的位置由 $g(X)$ 的系数决定。$g(X) = X^r + g_{r-1}X^{r-1} + \dots + g_1X + 1$。
  • 工作流程:
  1. 前 k 个时钟: 开关 S1, S2 合下。信息位 $a_{k-1}, \dots, a_0$ 依次输入。
  • 信息位直接输出,构成码字 $c_{n-1}, \dots, c_{n-k}$。
  • 同时信息位进入除法电路进行运算。
  1. 后 n-k 个时钟: 开关 S1, S2 合上。
  • 输入接地(0),反馈回路断开。
  • 寄存器中存储的余数 $r_{n-k-1}, \dots, r_0$ 依次移位输出,构成码字 $c_{n-k-1}, \dots, c_0$。

4. 译码实现:定位错误的艺术
#

4.1. 伴随式 S(X)
#

译码过程与线性分组码思想一致,但工具换成了多项式。

  • 译码原理 (PPT p138-139):
  • 接收多项式 $R(X) = C(X) + E(X)$。
  • 伴随式多项式 S(X):计算接收多项式 $R(X)$ 除以 $g(X)$ 的余数。 $$ S(X) = R(X) \pmod{g(X)} $$
  • 核心性质: 由于 $C(X)$ 一定能被 $g(X)$ 整除,所以 $C(X) \pmod{g(X)} = 0$。 因此: $$ S(X) = [C(X) + E(X)] \pmod{g(X)} = E(X) \pmod{g(X)} $$ 伴随式 S(X) 只取决于错误图样 E(X)!

4.2. 译码器硬件实现 (PPT p140)
#

译码器的核心就是一个伴随式计算电路,它和编码器中的除法电路结构完全相同。 【图片:PPT p140 的 (7,4) 循环码译码电路图,g(X) = X^3+X^2+1】 file-9循环码3.jpg

  • 电路工作:
  1. 将接收到的 n 位码字 R 串行输入到该电路。
  2. 当 n 位全部输入完毕后,寄存器中的 r 位值就是伴随式 S。
  3. 如果 S 全为 0,则判定无错误。

4.3. 【核心】错误定位的电路技巧 (Meggit译码器思想, PPT p139, 141)
#

如果S不为0,如何找到错误位置 E 呢?

  • 理论基础: 错误图样和伴随式之间存在循环关系。
  • 如果错误是 $E(X)$,伴随式是 $S(X)$。
  • 如果将错误循环移一位变成 $E_1(X) = X \cdot E(X) \pmod{X^n+1}$,那么新的伴随式 $S_1(X) = [X \cdot S(X)] \pmod{g(X)}$。
  • 这意味着,对伴随式进行一次移位寄存器操作,得到的就是移位后错误图样的新伴随式!
  • 译码过程详解:
    1. 计算初始伴随式: 接收的 n 位码字 R 通过伴随式电路,得到初始伴随式 S。
    2. 循环移位寻找"靶心":
      • 我们预先设定一个"靶心",即一个特定的错误模式,通常是最高位出错,即 $E_{target}(X) = X^{n-1}$。我们计算出它的伴随式 $S_{target}$。
      • 然后,我们继续向伴随式电路输入0,并让它继续工作。每输入一个0,寄存器中的伴随式就会更新一次,这个过程就模拟了错误位置在不断地"循环移位"。
      • 我们用一个逻辑电路持续检测寄存器中的值,看它是否等于我们预设的 $S_{target}$。
    3. 执行纠错:
      • 假设经过 i 次移位后,寄存器中的伴随式恰好等于 $S_{target}$。
      • 这说明,原始的错误位置,经过 i 次循环移位后,跑到了最高位。反过来说,原始错误就在第 n-i 位!
      • 为了纠正它,我们让接收码字 R 在一个同样长为 n 的缓冲寄存器里同步移位。当伴随式等于 $S_{target}$ 时,缓冲寄存器出口处的比特正好就是那个出错的比特,我们用一个异或门将其翻转即可。
  • 示例 (PPT p141): 对于一个(7,4)码,假设我们把第1位($X^0$)出错的伴随式001作为"靶心"。
    • 如果收到的伴随式是 111(第2位出错),我们让电路继续移位。
    • 移1次,111 变为 011(第3位出错的伴随式)。
    • 移2次,011 变为 110(第4位出错的伴随式)。
    • …
    • 移6次后,伴随式会变为001,与"靶心"匹配!此时我们知道错误在第 $7-6=1$ 位,即第1位。
    • 结论: 译码器硬件不需要存储整个查找表,只需要一个固定的"靶心"比较器和一个计数器(或同步的缓冲器)即可完成纠错,极大简化了电路。

5. 循环码家族:汉明码与BCH码
#

  • 循环汉明码 (PPT p142)
    • 当(n,k)参数满足 $n=2^m-1, k=n-m$,且生成多项式 g(X) 是一个 m 次的本原多项式时,得到的循环码就是汉明码。
    • 它继承了汉明码 $d_{min}=3$ 的特性,是高效的单比特纠错码。
    • PPT p143的表格给出了不同m值可构造的循环汉明码参数。
  • BCH码 (PPT p146)
    • ✨ 费曼学习法之生动比喻:带多把"尺子"的校验系统
      • 普通循环码用一把尺子 g(X) 去测量。
      • BCH码非常"严格",它要求一个合法的码字必须同时被多把特定的尺子($m_1(X), m_2(X), \dots$)整除。它的生成多项式 g(X) 是这些尺子的"最小公倍多项式"。
      • 这些"尺子"的选择,是基于高阶有限域(伽罗华域)$GF(2^m)$ 中的元素(根)来确定的。
    • 能力: BCH码的设计非常灵活,可以通过选择 g(X) 的根,精确地构造出能纠正任意 t 个错误的码。
    • 参数 (PPT p149, 155):
      • 码长 $n=2^m-1$。
      • 最小码距 $d_{min} \ge 2t+1$ (由设计保证)。
      • 监督位数 $r=n-k \le mt$。
      • PPT p155的表格展示了BCH码的强大能力,例如一个(63, 24)的BCH码可以纠正多达7个错误!

🔗 知识关联与应用
#

  • 承上启下:循环码是线性分组码的一个子集,但它引入了多项式和代数域的工具,使得分析和实现(特别是硬件实现)都大大简化。它是通往更高级的BCH码和里德-所罗门码(RS码)的桥梁。
  • 现实应用:
      1. CRC (循环冗余校验): 这是循环码最广为人知的应用。以太网帧、Wi-Fi数据包、SATA/USB数据传输、ZIP/RAR压缩文件,几乎所有需要数据完整性校验的地方,都在使用CRC。它本质上就是一个只检错不纠错的循环码系统,其校验器电路就是我们今天学习的除法电路。
      1. 里德-所罗门 (RS) 码: 这是一种在更高阶有限域上构造的非二元BCH码。它对于突发错误(连续一片数据出错)有极强的纠正能力,广泛应用于CD/DVD/蓝光光盘、二维码、数字电视广播等领域。

🤔 引导式提问
#

  1. 为什么生成多项式 g(X) 必须是 X^n+1 的一个因式?这与码字的"循环"特性之间究竟有什么数学联系? (提示:思考码字循环移位一位,在多项式上等效于乘以X再模 $X^n+1$)
  2. 对比线性分组码的矩阵译码(计算S=RHᵀ, 查表)和循环码的电路译码(LFSR计算S(X),移位纠错),两者在实现复杂度、译码速度和所需存储(查找表大小)方面各有什么优缺点?
  3. CRC只能检错,而BCH码能纠错。从生成多项式 g(X) 的角度看,你认为是什么核心差异导致了它们能力的不同?(提示:g(X)的根在哪个域上,以及根的性质)

💡 本讲总结
#

今天我们完成了一次从理论到实践的华丽飞跃。循环码的核心魅力在于它将复杂的纠错问题代数化和电路化了。我们用多项式作为语言,以生成多项式g(X)为"基因",通过多项式除法实现了系统化的编码。更精彩的是译码部分,我们揭示了伴随式S(X)和错误E(X)之间的深刻联系,并理解了如何利用伴随式的循环特性,设计出无需庞大查找表、仅靠移位和比较就能完成错误定位的高效译码电路。最后,通过了解BCH码等高级循环码,我们看到了这条技术路线的巨大潜力。可以说,掌握了循环码,你就掌握了现代数字通信和存储系统中差错控制的半壁江山。

信息论 - 这篇文章属于一个选集。
§ 9: 本文

相关文章