系统码的编译码与汉明码

news/2024/7/5 3:37:53

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。

文章目录

    • 系统码的编译码
      • 线性分组码的编码器
      • 线性分组码的译码器
        • 伴随式校验(Syndrome Testing)
        • 纠错
        • 陪集的伴随式
        • 纠错译码
        • 译码方法与译码电路
    • 汉明码
    • 总结

系统码的编译码

线性分组码的编码器

  1. 如图硬件实现。生成矩阵为


G = [ 1011000 1110100 1100010 0110001 ] G=\left[\begin{array}{l} 1011000 \\ 1110100 \\ 1100010 \\ 0110001 \end{array}\right] G= 1011000111010011000100110001

  1. 查表。(软件)

  2. 矩阵乘法。(软件)

线性分组码的译码器

所有编码符合监督方程, 监督方程在译码中非常重要。

对二元信道, 传输后 y = C + e \mathbf{y}=\mathbf{C}+\mathbf{e} y=C+e , 向量 e = [ e n − 1 , e n − 2 , … , e i , … , e 0 ] \mathrm{e}=\left[e_{n-1}, e_{n-2}, \ldots, e_{i}, \ldots, e_{0}\right] e=[en1,en2,,ei,,e0] 称为错误图样 e i = 1 e_{i}=1 ei=1 表示第 i 位错误。

如果译码器能推测出错误图样e, 那它就可以给出译码结果为
C ^ = y + e \hat{\mathbf{C}}=\mathbf{y}+\mathbf{e} C^=y+e

伴随式校验(Syndrome Testing)

y = [ y n − 1 y n − 2 ⋯ y 0 ] \mathbf{y}=\left[y_{n-1} y_{n-2} \cdots y_{0}\right] y=[yn1yn2y0] 是一个接收矢量,由传输的 C = [ c n − 1 c n − 2 ⋯ c 0 ] \mathbf{C}=\left[c_{n-1} c_{n-2} \cdots c_{0}\right] C=[cn1cn2c0]产生。可以将 y \mathbf{y} y 写成 y = C + e \mathbf{y}=\mathbf{C}+\mathbf{e} y=C+e

其中 e = [ e n − 1 , e n − 2 , … , e i , … , e 0 ] \mathrm{e}=\left[e_{n-1}, e_{n-2}, \ldots, e_{i}, \ldots, e_{0}\right] e=[en1,en2,,ei,,e0] 是由信道引入的错误矢量(图样)。

2 n 2^{n} 2n n \mathrm{n} n 元组空间中存在 2 n − 1 2^{n}-1 2n1 个非零的潜在错误图样。(为什么?)

y \mathbf{y} y 的伴随式 (或称校正子) 定义为

S = y H T \mathbf{S}=\mathbf{y H}^{\mathbf{T}} S=yHT

  • S = 0 , y \mathbf{S}=\mathbf{0}, \mathbf{y} S=0,y 是有效码字.

  • 若 $ \mathbf{y}$ 包含可检测到的错误,伴随式 S ≠ 0 \mathbf{S} \neq \mathbf{0} S=0 ;

  • 若 $ \mathbf{y}$ 包含可以纠正的错误, S \mathbf{S} S 将由特殊的非零值来指示特定的错误图样。

    线性分组码的一个重要性质是,(可纠正的)错误图样与伴随式一一对应。

S = y H T = ( C + e ) H T = C H T + e H T = e H T \mathbf{S}=\mathbf{y H}^{\mathrm{T}}=(\mathbf{C}+\mathrm{e}) \mathbf{H}^{\mathrm{T}}=\mathbf{C H}^{\mathrm{T}}+\mathrm{eH}^{\mathrm{T}}=\mathrm{eH}^{\mathrm{T}} S=yHT=(C+e)HT=CHT+eHT=eHT

(7,4) 循环码校验矩阵如下所示, 设发送码字为 C = 1000011 \mathbf{C}=1000011 C=1000011 , 接收矢量为 y = 1100011 \mathbf{y}=1100011 y=1100011
试求伴随式矢量 S = y H T \mathbf{S}=\mathbf{y H}^{\mathrm{T}} S=yHT 并证明它等于 $ \mathrm{eH}^{\mathrm{T}}$

校验矩阵: $H=\left(\begin{array}{lllllll}0 & 1 & 1 & 1 & 1 & 0 & 0 \ 1 & 1 & 0 & 1 & 0 & 1 & 0 \ 1 & 0 & 1 & 1 & 0 & 0 & 1\end{array}\right) $

注意:监督矩阵必须具有两个性质:

  1. H中没有全0列,否则的话,相应码字位置上的错误就无法影响伴随式,因而无法检测。
  2. H中的所有列是唯一的,如果H有两列相同,那么对应这两列发生的错码位置将无法识别。

例:已知 (7,3) 线性分组码的监督矩阵为
H = ( 1 0 1 1 0 0 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 ) \mathbf{H}=\left(\begin{array}{lllllll} 1 & 0 & 1 & 1 & 0 & 0 & 0 \\ 1 & 1 & 1 & 0 & 1 & 0 & 0 \\ 1 & 1 & 0 & 0 & 0 & 1 & 0 \\ 0 & 1 & 1 & 0 & 0 & 0 & 1 \end{array}\right) H= 1110011111011000010000100001
信道输出端的接收矢量为
y = ( 1 0 0 1 0 0 1 ) \mathbf{y}=\left(\begin{array}{lllllll} 1 & 0 & 0 & 1 & 0 & 0 & 1 \end{array}\right) y=(1001001)
请求出 y \mathbf{y} y 的伴随式。并估计最有可能的译码结果。

解: S = y H T = ( 0 1 1 1 ) \mathbf{S}=\mathbf{y} \mathbf{H}^{T}=\left(\begin{array}{llll}0 & 1 & 1 & 1\end{array}\right) S=yHT=(0111)
所有可能的错误图样有(1001001)(1010100) (1110011) (0000111) (0011010) (0100000) (0111101)
取码重最小即可能性最大的错误图样 (0100000) 为可纠正的错误图样。译码结果
C ^ = y + e ′ = ( 1 0 0 1 0 0 1 ) + ( 0 1 0 0 0 0 0 ) = ( 1 1 0 1 0 0 1 ) \begin{array}{l} \widehat{\mathbf{C}}=\mathbf{y}+\mathbf{e}^{\prime}=\left(\begin{array}{lllllll} 1 & 0 & 0 & 1 & 0 & 0 & 1 \end{array}\right)+ \\ \left(\begin{array}{lllllll} 0 & 1 & 0 & 0 & 0 & 0 & 0 \end{array}\right)=\left(\begin{array}{lllllll} 1 & 1 & 0 & 1 & 0 & 0 & 1 \end{array}\right) \\ \end{array} C =y+e=(1001001)+(0100000)=(1101001)

纠错

伴随式不仅可以检测错误, 而且可以同时纠正错误, 因 为可纠正的错误图样与伴随式之间一一对应。

在硬判决译码中, 一般采用标准阵(standard array) 来完成纠错的设计。

标准阵包含了 2 n 2^{\mathrm{n}} 2n 个所有的可能接收矢量. 其第一行以全 0 码 字开始,包括了所有码字, 而第一列包括了所有可纠正的错误图样 (一般选汉明重量最小的元素)。每行称为一个陪集 (coset), 由第一列的错误图样 (称为陪集首)及其干扰的码字组成。 ( n . k ) (\boldsymbol{n} . \boldsymbol{k}) (n.k) 码的标准阵如下:

注意:码字 C 1 C_{1} C1 (全0码)起两个作用:既是其中的一个码字, 也是错误图样 e 1 \mathrm{e}_{1} e1 ,代表没有错误, 即 y = C \mathbf{y}=\mathbf{C} y=C .

译码机制要求将每个有错的矢量用此矢量同列的最顶端的有效码字代替。

假设一个码字 C i \mathrm{C}_{\mathrm{i}} Ci 通过一个噪声信道, 接收矢量为量将被正确译码为码字 C i \mathrm{C}_{\mathrm{i}} Ci 。 如果错误图样不是一个陪集首, 那么将会导致译码错误。

陪集的伴随式

陪集中的每一个元素具有相同的伴随式。伴随式用于估计错误图样。

纠错译码

  1. 计算 y \mathbf{y} y 的伴随式 S = y H T \mathbf{S}=\mathbf{y H}^{\mathrm{T}} S=yHT .
  2. 定位错误图样 (陪集首) e j \mathrm{e}_{\mathrm{j}} ej , 它的伴随式与 y H T \mathrm{yH}^{\mathrm{T}} yHT 相等。
  3. 假设错误图样是由信道衰落引起的。
  4. 错误接收的矢量或码字表示为 C = y + e j \mathrm{C}=\mathbf{y}+\mathrm{e}_{\mathbf{j}} C=y+ej 。通过减去其中已识别出的错误来恢复正确码字。

Example: (6,3)线性分组码如下表所示,求它的生成矩阵和监督矩阵。

其生成矩阵为
G = [ 110100 011010 101001 ] G=\left[\begin{array}{l} 110100 \\ 011010 \\ 101001 \end{array}\right] G= 110100011010101001
监督矩阵为

H = [ 100101 010110 001011 ] H=\left[\begin{array}{l} 100101 \\ 010110 \\ 001011 \end{array}\right] H= 100101010110001011
(6,3)码的标准阵如下。

根据标准阵,可以得到错误图样与伴随式的一一对应关系,可用来译码,同时完成纠错。

在线性分组码中,[全0码]码字一定是有效码字。

已知接收矢量y=001110.请问译码器译码所得是什么?

S = 100,监督矩阵为
H = [ 100101 010110 001011 ] H=\left[\begin{array}{l} 100101 \\ 010110 \\ 001011 \end{array}\right] H= 100101010110001011
S=100

C=101110

U=110

译码方法与译码电路

(1) 在设计阶段:

对每一种可能伴随式的取值确定出它所对应的可纠正错误图样,存储为表格。

(2)译码器运行时:

当接收端收到y后,计算伴随式S,用S查可纠正错误图样表,根据查表结果纠正错误。

“查错误图样表”这个环节往往可以进行逻辑化简,比如在(7.4)码的情形下,“查错误图样表”是用3比特地址查8种结果,所有结果除全0外,只有1个1。这样的电路类似38译码器。

(7,4)码错误图样与伴随式表

汉明码

一能纠正单个随机错误、编码效率最高的线性分组码

  • 主要参数:码长 n = 2 m − 1 n=2^{m}-1 n=2m1 ;
  • 信息位: k = n − m = 2 m − 1 − m k=n-m=2^{m}-1-m k=nm=2m1m ;
  • 监督位: n − k = m n-k=m nk=m , 且 m ≥ 3 ; ( m = 3 , n = 7 , k = 4 ) m \geq 3 ;(m=3, n=7, k=4) m3;(m=3,n=7,k=4)
  • 最小距离 : d min  = d 0 = 3 d_{\text {min }}=d_{0}=3 dmin =d0=3
  • 汉明码的非全 0 伴随式有 n = 2 n − k − 1 n=2^{n-k}-1 n=2nk1 个, 每个伴随式对应一种单比特错误图样, 因此每个伴随式就是监督矩阵 H \boldsymbol{H} H 的一个列, 而 H \boldsymbol{H} H 的所有列构成了全 0 以外的所有可能的 n − k n-k nk 比特向量。

如 m=3 , 则可以得到一个 n = 2 3 − 1 = 7 n=2^{3}-1=7 n=231=7 的 (7,4) 汉明码, 其 H \boldsymbol{H} H 矩阵的列由所有非 0 三重组成:
H = ( 1 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 ) H=\left(\begin{array}{lllllll} 1 & 0 & 1 & 1 & 1 & 0 & 0 \\ 1 & 1 & 1 & 0 & 0 & 1 & 0 \\ 0 & 1 & 1 & 1 & 0 & 0 & 1 \end{array}\right) H= 110011111101100010001
由于任意两列线性无关 (d=3, t=1) , 故能纠任意单个随机错误(监督矩阵的特性 d )。 R = k / n = 1 − m / n R=k / n=1-m / n R=k/n=1m/n .

高效率纠错码。广泛应用于RAM中。

总结

线性分组码

①编码:生成矩阵编码

②译码:校验矩阵,错误图样,伴随式译码,标准阵

③生成矩阵与监督矩阵的关系

④汉明码

参考文献:

  1. Proakis, John G., et al. Communication systems engineering. Vol. 2. New Jersey: Prentice Hall, 1994.
  2. Proakis, John G., et al. SOLUTIONS MANUAL Communication Systems Engineering. Vol. 2. New Jersey: Prentice Hall, 1994.
  3. 周炯槃. 通信原理(第3版)[M]. 北京:北京邮电大学出版社, 2008.
  4. 樊昌信, 曹丽娜. 通信原理(第7版) [M]. 北京:国防工业出版社, 2012.

http://lihuaxi.xjx100.cn/news/1243655.html

相关文章

如何录制声音?推荐这2款电脑录音软件!

案例:怎么录制电脑上的声音?在电脑上怎么录制自己的声音?有没有小伙伴知道操作的步骤。 【我想录制语音会议,还想录制自己的歌声,在电脑上如何录制声音?求一个简单易懂的教程,在线等&#xff0…

Optional简述(Java8新特性)

Optional类是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引入的一个同名Optional类,使用Optional类可以避免显式的null值判断(null的防御性检查),避免null导致的NPE(NullPointerExcep…

高速视觉筛选机PCI Express实时运动控制卡XPCIE1028

产品导读 正运动技术的PCI Express总线运动控制卡XPCIE1028,具备位置锁存、多维高速硬件位置比较输出PSO、同步跟随、精准触发的运动控制和I/O控制功能。 配合正运动技术MotionRT7实时内核使用,可高度满足高速视觉筛选机应用所需的运动控制需求。 XPC…

linuxOPS基础_yum详解

yum是如何安装软件的 yum仓库(也称yum源)用于存放各种rpm的软件包以及软件包之间的依赖关系(repodata目录)需要安装软件的计算机连接到指定yum仓库来安装软件包 yum源作用 软件包管理器,类似Windows下的软件管家 yu…

为什么超三成制造企业上市公司选择用友U9 cloud?

导读:30%制造企业上市公司和40%专精特新制造业上市公司都选择用友U9 cloud 当前,数智化转型已经成为中国制造重构竞争力、实现高质量发展的必经之路。《“十四五”智能制造发展规划》提出,到2025年,70%的规模以上制造业企业基本实…

由于找不到msvcr120.dll,无法继续执行代码,多种解决方法修复这个故障

在使用电脑时,我们常常会遇到各种各样的问题。其中一个比较常见的问题是“由于找不到msvcr120.dll,无法继续执行代码”。这个问题可能会让一些用户感到困惑和无助。那么,究竟什么是msvcr120.dll?它缺失了会有什么后果?如何修复这个…

SpringBatch从入门到实战(六):ItemReader

一&#xff1a;ListItemReader 用于简单的开发测试。 Bean public ItemReader<String> listItemReader() {return new ListItemReader<>(Arrays.asList("a", "b", "c")); }二&#xff1a;FlatFileItemReader 1.1 完全映射 当文件…

【计算机网络基础】第3章 单元复习

文章目录 一. 单选题(共22题)二. 填空题(共7题)三. 判断题(共5题)一. 单选题(共22题) (单选题)以下哪一个不是关于千兆位以太网的正确描述( D )。 A. 支持全双工传送方式 B. 帧格式与以太网帧格式相同 C. 数据传输速率为1000Mb/S D. 只能基于光纤实现 (单选题)下列设…