编码生成矩阵与检错监督矩阵

news2024/11/26 21:32:42

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

文章目录

  • 线性分组码
    • 基本概念
    • 编码-生成矩阵
      • 编码和生成矩阵
        • 系统码与非系统码
      • 生成矩阵的特性
    • 检错-监督矩阵
      • 由分组码的生成矩阵可得到其监督矩阵。
        • 监督方程
      • 监督矩阵的特性

线性分组码

基本概念

线性分组码数学定义: 编码前信息码元空间 U k U^{k} Uk , 经映射 f f f , 编码后码字空间 C n C^{n} Cn , 即 f : U k → C n f: U^{k} \rightarrow C^{n} f:UkCn , 其中 n > k n>k n>k 。 若 f f f 进一步满足线性关系:
f ( α u ⊕ β u ′ ) = α f ( u ) ⊕ β f ( u ′ ) f\left(\alpha \mathbf{u} \oplus \beta \mathbf{u}^{\prime}\right)=\alpha f(\mathbf{u}) \oplus \beta f\left(\mathbf{u}^{\prime}\right) f(αuβu)=αf(u)βf(u)
其中 α , β ∈ G F ( 2 ) = { 0 , 1 } , u 与 u ′ ∈ U k \alpha, \beta \in G F(2)=\{0,1\}, \mathbf{u} 与 \mathbf{u}^{\prime} \in \mathbf{U}^{k} α,βGF(2)={0,1},uuUk 则称 f f f 为线性编码映射,进一步若 f 为一一对应映射,则 f 为唯一可译线性编码 。由 f 编写成的码 c 称为线性分组码。

线性分组码是一类奇偶校验码,它由(n,k )形式表示。编码器将一个 k 比特信息分组(信息矢量)转变成一个更长的由给定符号集组成的 n 比特编码分组(编码矢量)。当这个符号集包含 2 个元素 (0 and1) 时 , 称为二进制编码。

kbit 信息形成 2 k 2^k 2k 不同的信息序列 , 称为 k 元组。 nbit 可以形成 2 n 2^n 2n 个不同序列,称为 n 元组 。(n, k )分组码输出的长度为 n 的序列称为码字。所有这些码字的集合称为该线性分组码的码组。

定义: 如果分组码中任意两个码字的线性组合仍是分组码的一个码字,那么该分组码是线性的。 对于二进制码,如果 c i c_i ci c j c_j cj是码字, c i c_i ci+ c j c_j cj也是码字。其中+表示按位模 2 加 (就是逐位相加)。

例:(7,3)线性分组码

d min ⁡ = 4 d_{\min }=4 dmin=4 . c i + c j c_{i}+c_{j} ci+cj 仍为码字

快速计算方法:看除全零码以外,最小的码重就是它的码距。

编码-生成矩阵

编码和生成矩阵

(n,k )线性分组码的构造——依据给定的 k 个信息码元,设计满足编码条件(最小码距、码率)的 n-k个监督码元

例: 二元 (7,3) 线性分组码, n=7, k=3, r=7-3=4 ,

u = ( u 2 , u 1 , u 0 ) → c = ( c 6 , c 5 , c 4 , c 3 , c 2 , c 1 , c 0 ) \mathbf{u}=\left(u_{2}, u_{1}, u_{0}\right) \rightarrow \mathbf{c}=\left(c_{6}, c_{5}, c_{4}, c_{3}, c_{2}, c_{1}, c_{0}\right) u=(u2,u1,u0)c=(c6,c5,c4,c3,c2,c1,c0)
构造:

编码位高位直接对应信息位;

编码位低位由信息位组合而成。.
c 6 = u 2 c 3 = u 2 ⨁ u 0 = c 6 ⊕ c 4 c 5 = u 1 c 2 = u 2 ⨁ u 1 ⊕ u 0 = c 6 ⊕ c 5 ⊕ c 4 c 4 = u 0 c 1 = u 2 ⨁ u 1 = c 6 ⊕ c 5 c 0 = u 1 ⊕ u 0 = c 5 ⊕ c 4 \begin{array}{ll} c_{6}=u_{2} & c_{3}=u_{2} \bigoplus u_{0}=c_{6} \oplus c_{4} \\ c_{5}=u_{1} & c_{2}=u_{2} \bigoplus u_{1} \oplus u_{0}=c_{6} \oplus c_{5} \oplus c_{4} \\ c_{4}=u_{0} & c_{1}=u_{2} \bigoplus u_{1}=c_{6} \oplus c_{5} \\ & c_{0}=u_{1} \oplus u_{0}=c_{5} \oplus c_{4} \end{array} c6=u2c5=u1c4=u0c3=u2u0=c6c4c2=u2u1u0=c6c5c4c1=u2u1=c6c5c0=u1u0=c5c4
写成矩阵形式,为

即 : C = u G \mathbf{C}=\mathbf{u} \mathbf{G} C=uG
设信息码元序列为 u \mathbf{u} u , 长度为 k , 由 C = u G \mathbf{C}=\mathbf{u G} C=uG 可以得到一个 n 位的码组, 也即由 k 个信息位经过一个线性变换矩阵 G \mathbf{G} G 产生。

G \mathbf{G} G- 生成矩阵
G = ( g 1 g 2 ⋮ g k ) = ( g 11 … g 1 n ⋮ ⋮ ⋮ g k 1 … g k n ) k × n  阶  \mathbf{G}=\left(\begin{array}{c} \mathbf{g}_{1} \\ \mathbf{g}_{2} \\ \vdots \\ \mathbf{g}_{k} \end{array}\right)=\left(\begin{array}{ccc} g_{11} & \ldots & g_{1 n} \\ \vdots & \vdots & \vdots \\ g_{k 1} & \ldots & g_{k n} \end{array}\right) k \times n \text { 阶 } G= g1g2gk = g11gk1g1ngkn k×n  
线性分组码的编码: $\mathrm{C}=\mathbf{u G} $

该 (7,3) 码的生成矩阵为

如:若输入的信息为 [011], 由 C = u G \mathrm{C}=\mathrm{uG} C=uG , 得 C = [ 0111010 ] \mathrm{C}=[0111010] C=[0111010], 和码表中的码字一致。

例 生成矩阵如图矩阵。
若信息为 μ = ( 1 1 1 ) \mu=\left(\begin{array}{lll}1 & 1 & 1\end{array}\right) μ=(111) ,则编码出的码字是什么? 1110100
G = [ 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 1 1 0 1 ] G=\left[\begin{array}{lllllll} 1 & 0 & 0 & 1 & 1 & 1 & 0 \\ 0 & 1 & 0 & 0 & 1 & 1 & 1 \\ 0 & 0 & 1 & 1 & 1 & 0 & 1 \end{array}\right] G= 100010001101111110011

系统码与非系统码

若生成矩阵可以分解成两个子块,
G = [ I ⋮ Q ]  或  G = [ Q ⋮ I ] \boldsymbol{G}=[\boldsymbol{I} \vdots \boldsymbol{Q}] \text { 或 } \boldsymbol{G}=[\boldsymbol{Q} \vdots \boldsymbol{I}] G=[IQ]  G=[QI]
其中 I \mathrm{I} I k \boldsymbol{k} k 阶单位矩阵, Q \mathrm{Q} Q k ∗ ( n − k ) \boldsymbol{k} *(\boldsymbol{n}-\boldsymbol{k}) k(nk) 阶矩阵, 则 C 为系统码,又称为组织码, G 为系统码的生成矩阵 (典型生成矩阵)。

若信息分组以不变的形式出现在线性分组码的任意k位(一般为前k位,或后k位),则称此码组为系统码,否则称为非系统码。(如果编码器输出的比特流中原样包含了信息比特,叫系统码。编码输出中的这些原始信息位也叫系统位。)

生成矩阵的特性

a. 生成矩阵 G \mathbf{G} G 一定是 k \boldsymbol{k} k n \boldsymbol{n} n 列的 k × n \boldsymbol{k} \times \boldsymbol{n} k×n 阶矩阵, G \mathrm{G} G 的每行构成一行矢量, 共有 k \boldsymbol{k} k 个矢量。

b. 线性分组码的每个码字是生成矩阵 G \mathbf{G} G 各行矢量的线性组合。
C = u G = ( u k − 1 , … , u 1 , u 0 ) ( g 1 g 2 ⋮ g k ) = u k − 1 g 1 + u k − 2 g 2 + … + u 1 g k − 1 + u 0 g k \begin{array}{r} \mathbf{C}=\mathbf{u G}=\left(u_{k-1}, \ldots, u_{1}, u_{0}\right)\left(\begin{array}{c} \boldsymbol{g}_{1} \\ \boldsymbol{g}_{2} \\ \vdots \\ \boldsymbol{g}_{k} \end{array}\right) \\ =u_{k-1} \boldsymbol{g}_{1}+u_{k-2} \boldsymbol{g}_{2}+\ldots+u_{1} \boldsymbol{g}_{k-1}+u_{0} \boldsymbol{g}_{k} \end{array} C=uG=(uk1,,u1,u0) g1g2gk =uk1g1+uk2g2++u1gk1+u0gk

c. G的每一行是一个码字。

d. 生成矩阵G的各行线性无关。思考:已知码字集合,如何构造生成矩阵?

e. 对非系统码的生成矩阵,总可以经过初等行变换列交换构造成另一等价的系统码的生成矩阵并且这两个线性分组码检、纠错性能相同。

求非系统 (7,4) 线性分组码的等价系统码生成矩阵。
G = [ 0 1 0 1 0 1 0 0 1 1 1 0 0 1 1 1 1 0 0 1 0 1 0 1 0 1 0 1 ] \mathrm{G}=\left[\begin{array}{lllllll} 0 & 1 & 0 & 1 & 0 & 1 & 0 \\ 0 & 1 & 1 & 1 & 0 & 0 & 1 \\ 1 & 1 & 1 & 0 & 0 & 1 & 0 \\ 1 & 0 & 1 & 0 & 1 & 0 & 1 \end{array}\right] G= 0011111001111100000110100101

列的交换和初等行变换不改变矩阵的秩,变换后矩阵的各行矢量仍线性无关

任何一个线性分组 (n, k)码都可等价于一个系统码。(纠错能力、编码结构)

思考:由非系统型生成矩阵变换成系统型生成矩阵,答案唯一吗?

已知某(7,4)分组码的码表如下,请问最小汉明距是多少?请写出该码的典型生成矩阵。

最小汉明距:3

生成矩阵:
G = [ 1 0 0 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 1 ] G=\left[\begin{array}{lllllll} 1 & 0 & 0 & 0 & 1 & 1 & 1 \\ 0 & 1 & 0 & 0 & 1 & 1 & 0 \\ 0 & 0 & 1 & 0 & 1 & 0 & 1 \\ 0 & 0 & 0 & 1 & 0 & 1 & 1 \end{array}\right] G= 1000010000100001111011011011

检错-监督矩阵

由分组码的生成矩阵可得到其监督矩阵。


H C T = 0 T , [ P : I ] C T = 0 T \mathbf{H C}^{T}=\mathbf{0}^{T},[\mathbf{P}: \mathbf{I}] \mathbf{C}^{T}=\mathbf{0}^{T} HCT=0T,[P:I]CT=0T
一般情况下, 一个 (n, k) 线性分组码的H矩阵中的(n-k)行对应(n-k)个线性监督方程组, 以确定(n-k)个监督码元。

H \mathbf{H} H——线性分组码的监督矩阵,是 ( n − k ) × n (n-k) \times \mathbf{n} nk×n 阶的。

若 H=[P :I], 其中 I 是 ( n-k )阶方阵, 则 H 为典型监督矩阵。

监督矩阵
H ⋅ C T = H ⋅ G T μ T = 0 T H \cdot C^{T}=H \cdot G^{T} \mu^{T}=0^{T} HCT=HGTμT=0T
或者 G \mathbf{G} G 每一行及其线性组合都是 (n, k) 码的码字, 故 H ⋅ G T = 0 T ⇒ G ⋅ H T = 0 H \cdot G^{T}=0^{T} \Rightarrow G \cdot H^{T}=0 HGT=0TGHT=0 .
G ⋅ H T = [ I Q [ P T I ] = P T + Q = 0 ∴ Q = P T  或  P = Q T \begin{array}{c} G \cdot H^{T}=\left[\begin{array}{ll} I & Q \end{array}\left[\begin{array}{c} P^{T} \\ I \end{array}\right]=P^{T}+Q=0\right. \\ \therefore Q=P^{T} \text { 或 } P=Q^{T} \end{array} GHT=[IQ[PTI]=PT+Q=0Q=PT  P=QT
请思考:已知 G = [ I : Q ] ⇒ H = [ P : I ] \mathbf{G}=[I: Q] \Rightarrow \mathbf{H}=[\mathrm{P}: I] G=[I:Q]H=[P:I] G = [ Q : I ] G=[Q: I] G=[Q:I] ,则 H = [ I : P ] H= [I:P] H=[I:P]

监督方程


H ⋅ C T = H ⋅ G T μ T = 0 T ⇒ C H T = 0 \begin{aligned} H \cdot C^{T} & =H \cdot G^{T} \mu^{T}=0^{T} \\ & \Rightarrow C H^{T}=0 \end{aligned} HCT=HGTμT=0TCHT=0
可知,若
C ~ H T ≠ 0 \widetilde{\boldsymbol{C}} \boldsymbol{H}^{T} \neq \mathbf{0} C HT=0
C ~ \widetilde{\boldsymbol{C}} C 不是有效码字, 从而检测出错误。 故:
C H T = 0 \boldsymbol{C H}^{T}=0 CHT=0
称为线性分组码的监督方程。

监督矩阵的特性

  • 由H矩阵可以建立线性分组码的线性方程组, H矩阵共有 n-k 行, 其中每行代表一个线性方程的系数, 表示求一个监督位的线性方程;
  • H矩阵的每行与码集中的一个码字的内积为 0 ;
  • 任何一个 $ (\boldsymbol{n}-\boldsymbol{k})$ 线性分组码的 H \mathrm{H} H 矩阵有 $ (\boldsymbol{n}-\boldsymbol{k})$ 行, 且每行线性无关;
  • 一个 ( n , k , d ) (\boldsymbol{n}, \boldsymbol{k}, d) (n,k,d) 线性分组码, 如要纠正小于等于 t 个错误, 则其充要条件是H矩阵中任何 2t 列线性无关, 由于最小距离 d=2t+1 , 所以也相当于要求 H 矩阵中任意 (d-1) 列线性无关。
  • 系统码的典型生成矩阵 G \mathbf{G} G 可以方便的得到典型监督矩阵 H \mathbf{H} H

已知一 (6,3) 线性分组码的生成矩阵G如下,求其监督矩阵 H \mathbf{H} H
G = [ 1 0 0 1 1 0 0 1 0 1 0 1 0 0 1 0 1 1 ] \begin{array}{l} \boldsymbol{G}=\left[\begin{array}{llllll} 1 & 0 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 & 0 & 1 \\ 0 & 0 & 1 & 0 & 1 & 1 \end{array}\right] \\ \end{array} G= 100010001110101011

参考文献:

  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/643449.html

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

相关文章

Elasticsearch快速入门及使用

Elasticsearch快速入门及使用 一.Elasticsearch是什么二.基本概念1.index (索引)2. type (类型)3.Document (文档) 三.为什么Elasticsearch可以从海量数据里快速检索出数据四.Elasticsearch安装1.解压2.运行3.显示以下内容就是启动成功14.Kibana可视化软件安装 五.入门(基本的操…

如何编写有效的接口测试?

在所有的开发测试中,接口测试是必不可少的一项。有效且覆盖完整的接口测试,不仅能保障新功能的开发质量,还能让开发在修改功能逻辑的时候有回归的能力,同时也是能优雅地进行重构的前提。编写接口测试要遵守哪些原则?测…

unity Ignis - Interactive Fire(完美模拟:森林火灾、草原火灾、建筑火灾)

Ignis 可以把任何物体、植被或带皮带骨的网状物转换为可燃物体,它就会自动着火。然后,火焰可以蔓延,点燃其他物体,被粒子或光线熄灭,或者自然烧尽。也可以被粒子点燃。还会收到风力影响WindZone。 WindZone文档&#…

轻量级性能测试工具 wrk 如何使用?

项目设计之初或者是项目快要结束的时候,大佬就会问我们,这个服务性能测试的结果是什么,QPS 可以达到多少,RPS 又能达到多少?接口性能可以满足未来生产环境的实际情况吗?有没有自己测试过自己接口的吞吐量&a…

磁盘详解(一文搞懂磁盘)

目录 一.磁盘的结构 二.磁盘的分类 2.1按照磁头是否可以移动分类 2.2按照盘片是否可以更换分类 三.磁盘的读写过程 四.磁盘的调度 4.1FCFS先来先服务算法 4.2SSTF最短寻找时间优先 4.3 SACN扫描算法 4.4C-SACN循环扫描算法 4.5 SPTF(最短定位时间优先&…

Maxwell安装使用

​欢迎光临我的博客查看最新文章: https://river106.cn 1、Maxwell简介 Maxwell 是由美国Zendesk开源,用Java编写的MySQL实时抓取软件。读取 MySQL binlogs 并将修改行字段的更新写入 Kafka, Kinesis, RabbitMQ, Google Cloud Pub/Sub 或 Redis (Pub/Sub or LPUSH)…

基于Aidlux的停车标志检测(可修改为coco 80类目标检测)

●项目名称 基于Aidlux的停车标志检测(可修改为coco 80类目标检测) ●项目简介 本项目在Aidlux上部署检测停车标志检测,并可在源码上修改coco 80类目标检测索引直接检测其他79类目标,可以直接修改、快速移植到自己的项目中。 ●…

【学习笔记】Java——消息队列kafka

kafka 1、Kafka combines three key capabilities:2、kafka是如何工作的:3、Kafka APIS:4、kafka集群 1、Kafka combines three key capabilities: To publish (write) and subscribe to (read) streams of events, including co…

中国游戏等“春”来

对于游戏行业来说,2023年将是压力依旧的一年,但或许也是转型调优的希望之年。 压力在于,互联网流量见顶,用户付费意愿降低,行业整体进入下行周期,彻底进入存量竞争时代。《2022年中国游戏产业报告》显示&a…

相机标定实战之双目标定

相机标定原理 文章目录 相机标定原理前言一、采集图像二、基于Matlab单双目标定流程采集棋盘图 三、基于OpenCV-Python双目标定流程检测棋盘格角点对角点进行亚像素精细化单目标定双目标定双目校正保存标定参数读取标定参数代码示例 参考 前言 相机标定可以说是计算机视觉/机器…

哪个公司的 CEO 不想拥有一个自己的数字克隆?

⚠️ FBI Warning:本文纯属作者自娱自乐,数字人的观点不代表 CEO 本人的观点,请大家不要上当受骗!! 哪个公司的 CEO 不想拥有一个自己的数字克隆? 想象🤔一下,如果 CEO 数字克隆上线…

python基础语法总结

1.打印输出 print(“Hello World”) 在许多大众的编程语言中,需要在每个语句的末尾添加分号,但Python并非如此。Python是一种简洁的编程语言,你不需要添加不必要的字符和语法。在Python中,一条语句结束于一行的结尾(方括号&…

找不到msvcp120dll,无法继续执行代码的修复方法

本教程操作系统:Windows系统、 msvcp120.dll是电脑文件中的dll文件(动态链接库文件)。如果计算机中丢失了某个dll文件,可能会导致某些软件和游戏等程序无法正常启动运行,并且导致电脑系统弹窗报错。 msvcp120.dll文件…

IDEA整合GO并创建module工程

IDEA整合Go 安装包环境配置idea配置并创建test mode 安装包 1.去官网下载对应还的安装包 官网下载地址 我选择下载的window 版本: 直接按照对应的目录,然后点击下一步 环境配置 1.配置go环境变量 在高级环境变量PAHT中添加安装包的**/bin 目录&…

mysql数据库的基础

mysql数据库 一、数据库的基本概念二、关系数据库三、SQL语句增改查删 四、natvicat for mysql软件 一、数据库的基本概念 数据(data) 描述事物的符号记录包括数字、文字、图形、图像、声音、档案记录等以“记录”形式按统一的格式进行存储 表&#x…

基于Java少儿编程网上报名系统设计与实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

sizeof 和 strlen !!!

定义 sizeof()是单目操作符,是可以求变量(类型)所占空间的大小,不在乎内存中存放的是什么,只在乎内存大小 strlen()是函数,是计算字符串的长度的 它从内存的某个位置(可以是字符串开头&#x…

进程管道:pipe调用

在看过高级的popen函数之后&#xff0c;我们再来看看底层的pipe函数。通过这个函数在两个程序之间传递数据不需要启动一个shell来解释请求的命令。它同时还提供了对读写数据的更多控制。pipe函数的原型如下所示&#xff1a; #include <unistd.h> int pipe(int pipefd[2])…

OS的事件机制-Event

Event在OSEK OS中&#xff0c;其实就是一个flag的作用&#xff0c;如果某个TASK执行了&#xff0c;就调用<SetEvent()>把flag就置起来&#xff0c;和这个task关联的另一个TASK也执行了&#xff0c;就可以把flag清掉<ClearEvent>&#xff0c;如果第一个TASK没有执行…

这才是你想了解的Redis

文章简介 redis作为一个基于内存的数据结构存储系统&#xff0c;由于它的灵活性和可拓展性强&#xff0c;在我们日常开发中经常被用作数据库、缓存或者消息代理。本文就从Redis的基本部署使用说到Redis的集群、锁和消息对列 Redis基本使用 一、安装 下载地址&#xff1a;htt…