系统码的编译码与汉明码

news2024/12/23 9:02:10

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。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://www.coloradmin.cn/o/644999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android使用WebView与Native交互的三种方式 ( 附源码 )

先附上assets目录中html的源代码文件内容&#xff0c;下面的demo都是使用这几个文件&#xff1a; javascript.html: <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>Carson</title><script>function callAn…

深入理解多层感知机(MLP):原理与代码解析

文章目录 1. MLP的原理1.1 结构1.2 激活函数1.3 前向传播1.4 反向传播算法 2.MLP分类任务应用3.参考文献&#xff1a; 多层感知机&#xff08;MLP&#xff09;是一种经典的神经网络模型&#xff0c;由多个神经元层组成。它的结构和功能使其成为深度学习中的重要组成部分。MLP在…

【Java算法题】剑指offer_算法之01搜索算法

前言 刷题链接&#xff1a; https://www.nowcoder.com/exam/oj/ta?page2&tpId13&type265 1. 搜索算法 JZ53 数字在升序数组中出现的次数 思路&#xff1a;遍历数组&#xff0c;count记录k值出现次数&#xff0c;返回count public class Solution {public int GetN…

【word wps文字】目录页码中的格式在打印或打印预览时变为和正文页码格式一样,如何调整?

一、问题背景 之前在闲鱼上&#xff0c;有个人找我改word排版&#xff0c;有一个需求就是正文页码两边需要横杠。 但是目录中显示的页码&#xff0c;不需要横杠。 我当时是一个一个在目录中删除横杠的&#xff0c;借助了查找与替换功能。 更改后&#xff0c;目录页码如下所…

Java与SpringBoot对redis的使用方式

目录 1.Java连接redis 1.1 使用Jedis1.2 使用连接池连接redis1.3 java连接redis集群模式 2.SpringBoot整合redis 2.1 StringRedisTemplate2.2 RedisTemplate 1.Java连接redis redis支持哪些语言可以操作 &#xff08;去redis官网查询&#xff09; 1.1 使用Jedis (1)添加jedis…

HTML+CSS实训——Day14——项目其他页面的完善

仓库地址&#xff1a;HTML实训 前言 今天我们继续用老师提供的api&#xff0c;完善一些剩余的功能&#xff0c;因为我的git push好像传乱了&#xff0c;所以仓库大家看看最新的就好&#xff0c;最新的一天一定包括前一天所做的内容。 Collect.htmlcss 收藏界面 <!DOCT…

Dijkstra迪杰斯特拉算法求最短路径(C++实现)

名人说&#xff1a;一花独放不是春&#xff0c;百花齐放花满园。——《增广贤文》 作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 〇、Dijkstra迪杰斯特拉算法介绍1、Dijkstra算法是什么&#xff1f;2、Dijkstra算法…

低代码工具:jvs-list(列表引擎)2.1.7功能清单及新增功能介绍

在低代码开发平台中&#xff0c;列表页是一个用于显示数据列表的页面。它通常用于展示数据库中的多条记录&#xff0c;并提供搜索、排序和筛选等功能&#xff0c;以方便用户对数据进行查找和浏览。 jvs-list是jvs快速开发平台的列表页的配置引擎&#xff0c;它和普通的crud 具…

Rocky Linux9.的系统中安装MySQL8 实战

前言 Centos7 已经停止维护&#xff0c;学习其他linux系统势在必行&#xff0c;今天我们要探讨的是&#xff1a; 在Rocky linux9的系统上安装MySQL8 文章目录 前言1. 从Appstream中进行安装1.1 更新系统中的所有软件包1.2 安装MySQL1.3 启动并测试1.4 查看MySQL版本 2. 初始化操…

获取地理位置请求免费天气接口

需求&#xff1a;根据地理位置信息去请求免费的天气接口数据&#xff0c;拿到数据后进行展示&#xff0c;这边我用到了俩个key&#xff0c;一个是高德天气的key和心知天气的key&#xff0c;为什么要这么麻烦呢&#xff0c;是因为之前写过一版不需要获取地理位置&#xff0c;直接…

嵌入式系统开发中的常见挑战和困难

当涉及嵌入式系统开发时&#xff0c;可能会遇到以下一些常见的挑战和困难&#xff1a; 复杂的硬件和软件集成&#xff1a;嵌入式系统通常涉及硬件和软件的紧密集成&#xff0c;需要同时理解和处理硬件和软件层面的问题。这种复杂性可能导致调试和故障排除变得更加困难。 有限…

【哈佛积极心理学笔记】第19讲 让爱情天长地久

第19讲 让爱情天长地久 What makes relationship thrive, some characteristic: work hard the fix mindset: “you are so smart, you are so intelligent” the malleable mindset: “you work so hard” Finding mindset: “finding the right partner” (fix) some thin…

PLC领域从业者的工作待遇现状如何?

目前从事可编程逻辑控制器&#xff08;PLC&#xff09;领域的人员在工作待遇方面相对较好。PLC是工业自动化中广泛使用的控制设备&#xff0c;用于监控和控制各种工业过程和机械设备。以下是关于从事PLC的人员工作待遇的一些常见情况和趋势&#xff1a; 薪资水平&#xff1a;P…

【算法与数据结构】242、LeetCode有效的字母异位词

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;题目要求判断两个字符串是否为字母异位词。什么是字母异位词呢&#xff1f;顾名思义&#xff0c;就是字…

深入理解相机硬件抽象层

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、概览二、Camera HIDL 接口三 、Camera Provider 主程序四、Camera HAL3 接口 一、概览 始于谷歌的Treble开源项目&#xff0c;基于接口与实现的分离…

【AUTOSAR】UDS协议的代码分析与解读(二)----ECU诊断协议概述

UDSO诊断服务技术规范 1 范围 本规范规定了增强型诊断需求的诊断服务部分的内容&#xff0c;定义了通用电子系统需遵循的UDS通用执行 规则。 本规范适用于集团x事业部所有平台车型&#xff0c;所有电子控 制单元(ECU) 的诊断需求&#xff0c;均需按此规范执行。 本规范定义的…

Python神经网络编程学习笔记

文章目录 神经网络基本原理线性分类器学习率一个线性分类器的局限性逻辑AND、逻辑OR逻辑XOR 神经元sigmoid function的logistic function(逻辑函数) 多层神经元演示只有两层&#xff0c;每层两个神经元的神经网络的工作矩阵大法(点乘)使用矩阵乘法的三层神经网络示例反向传播误…

AJAX概述

1.1什么是AJAX. Ajax即AsynchronousJavascript And XML&#xff1a;异步数据回调。 使用Ajax技术网页应用能够快速地将更新呈现在用户界面上&#xff0c;不需要重载&#xff08;刷新&#xff09;整个页面【只刷新局部】&#xff0c;这使得程序能够更快地回应用户的操作。、 1…

H5U PLC EtherCAT总线伺服回原(6098H=3)

回原方式35请参看下面文章 汇川H5U PLC通过 EtherCAT总线控制伺服回原_RXXW_Dor的博客-CSDN博客大部分运动控制都会对机械回原点进行大篇幅讲解,也可以看出机械回原点的重要性。常规的回原点方式大概有几十种吧,本文会给出常用回原点的注意事项,和编程推荐写法。如果原点回…

二层和三层交换机到底有啥区别?二者如何切换?

概要 计算机网络中的交换机是用于在局域网&#xff08;LAN&#xff09;中转发数据包的重要设备。其中&#xff0c;二层交换机和三层交换机是两种常见的交换机类型。本文将详细介绍二层交换机和三层交换机的特点、工作原理、各自的优缺点以及在思科、华为、瞻博网络三家厂商如何…