详解线性分组码(linear code)

news2024/10/1 17:38:13

目录

一. 介绍

二. 线性分组码

三. 生成矩阵

四. 对偶编码

五. 校验矩阵

六. 陪集编码

七. 小结


一. 介绍

Low-density parity-check,简称LDPC码,翻译为低密度奇偶校验码。

我们所熟悉的LDPC码就是一个典型的线性分组码(linear block code)。在接下来的讨论中,我们将主要关注二进制的线性分组码,也会简称为线性码。

看完本文章,你将学会对偶码(dual code),陪集码(coset),线性分组码。这些都是网络安全编码领域常用的概念。

二. 线性分组码

假定某二进制线性分组码的输出的比特长度为n-k,输出长度为n,那么该线性编码通常写做:

(n,n-k)

建议将此处的比特序列理解成向量,以方便后续的理解。

因为二进制每个元素均只能取0或1,那么就属于有限域GF(2)内,通常写做:

C\subseteq GF(2)^n

右上角的n可以理解为比特长度,也可以理解为向量维度。

很明显该码字的基数:

|C|=2^{n-k}

码字就是我们通常所说的codewords。

编码之前的元素叫消息,比特长度为n-k,其空间大小如下:

GF(2)^{n-k}

编码之和称之为码字,其比特长度为n,空间大小为:

GF(2)^n

编码的过程其实就是一种双射(bijective mapping)的过程。

编码的速率定义为输入长度除以输出长度,也就是:

R=\frac{n-k}{n}

三. 生成矩阵

generator matrix,生成矩阵,通常简写为G

一个线性码C可以利用生成矩阵来完整表示,生成矩阵的维度如下:

G\in GF(2)^{​{n-k}\times n}

那么我们就可以直接拿生成矩阵乘以输入的序列,便可以得到输出的序列,也就是完成了线性编码的过程:

右边输入的m为(n-k)行1列(看成列向量)

右边G^T为n行n-k列

右边便可以计算输出的左边的m为n行1列(看成列向量)

借助格理论很容易得到,可以把矩阵G的每一行看成该码字的基底(basis)。

通过以上讨论,我们发现,利用生成矩阵即可以把码字完整的表达清楚。当然码字不唯一,当生成矩阵在改变的时候,也就是编码算法在变化。

四. 对偶编码

原来的线性编码C,我们写做(n,n-k),其对偶的编码通常定义为如下:

对偶编码的输出长度也为n,否则向量无法完成相乘。一定要要注意此定义要求的任意性。

如果用向量的观点,那么对偶编码C^\bot包含所有跟原编码C垂直的向量,而且维度为n维,也就是向量属于:

GF(2)^n

五. 校验矩阵

parity-check matrix翻译为校验矩阵

根据以上的讨论,很容易证明对偶编码C^\bot为(n,k)的线性码,也就是输入长度为k,输出长度为n。那么很容易得到对偶编码C^\bot的生成矩阵可以记为H,如下:

H\in GF(2)^{k\times n}

该矩阵也被称之为编码C的校验矩阵。

根据定义校验矩阵和生成矩阵满足:

GH^T=0

对于任意的码字x,校验矩阵的理解就是:

Hx=0

六. 陪集编码

假定编码C的格式为(n,n-k),将其校验矩阵记为H,将上式子中的0改为s,格式如下:

s\in GF(2)^k

那么可以得到新的编码,如下:

上式子中的s通常称之为特征,syndrome。很明显当s=0时,就是原来的码字,也就是C=C(0)

我们还可以换个角度来理解陪集编码(coset code)。

比如x'满足如下:

Hx'=s

其中x'的格式满足:

x'\in GF(2)^n

那么陪集编码则可以理解为原编码相加的格式,如下:

来引入一个新的定义。从以上陪集编码中选择一个x',如果x'的汉明重量最小的话,那么就称之为coset leader。

假定原编码的格式为(n,n-k),那么容易证明其有2^k个不相交的陪集,对原始空间GF(2)^n进行了分割。

七. 小结

可以看到,信道编码的发展可以简单的归纳为分组码---卷积码-----分组码这样一个过程(在这里按其结构将 Turbo 码也归入卷积码的范畴)。其中 Turbo 码的出现以及迭代译码的思想引入使得信道编解码产生了前所未有的飞跃,但 Turbo 码之后卷积码却没有更大的发展,究其原因就是其没有完备的理论基础,使得人们不能给出其性能上严密的数学解释。

于是在那之后,Mackay等人再次发掘了 Gallager 于 1962 年提出的一种具有稀疏校验矩阵的分组纠错码,即 LDPC 码。LDPC 码和传统的分组码最大的区别在于它们的译码。分组码通常是用最大似然译码,因此,码长一般较短,并用代数方法设计使得复杂度较低。而 LDPC 码是迭代译码,校验矩阵用 Tanner 图表示,码长更长、围绕着校验矩阵 H 的特性进行设计是核心。LDPC 码自身的矩阵结构引入了交织特性,而且其采用迭代译码的方法,使其性能比以往的线性分组码有很大程度的提高。由于其基本原理是基于最原始的线性分组码,因此它有强大的数学工具作为其理论依据,几乎融图论、组合数学、概率论、矩阵论、代数、几何、代数数论、黎曼几何于一炉。

在通信,网络安全等领域,我们很难再找到某个方向可以有如此深厚的理论基础与之媲美。但理论上的完备性并不能使其直接应用于实际,因此从码字构造的方向来说,如何将 LDPC 码应用于实际工作才是值得深入研究的。为了保证其实现性,性能上就要有所妥协。在编码方面,以准循环 LDCP 码,即 QC-LDPC 码为例,为了降低硬件上的存储空间以及易于编码,就要以牺牲 LDPC 码先天的优势——交织特性为代价,这样便做出了性能与实现上的折中。但这种折中是有意义的,为 LDPC 码的实际应用开辟了道路。而且,通过某些方法,可以使设计出的码字在易于存储实现的同时,还能保证一定的性能。在译码方面,种种方法都可以归结为和积算法(SPA)的变形,都是在其基础上做出改进,从而保证译码性能前提下使译码器尽可能的简单。相对于 Turbo 码,LDPC 码的解码迭代次数还是过高,这样在实际应用中的竞争力便大打折扣。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1406785.html

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

相关文章

HarmonyOS(十三)——详解自定义组件的生命周期

前言 自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。 下图展示的是被Entry装饰的组件生命周期: 今…

大数据学习之Flink算子、了解DataStream API(基础篇一)

DataStream API (基础篇) 注: 本文只涉及DataStream 原因:随着大数据和流式计算需求的增长,处理实时数据流变得越来越重要。因此,DataStream由于其处理实时数据流的特性和能力,逐渐替代了DataSe…

macOS跨进程通信: Unix Domain Socket 创建实例

macOS跨进程通信: Unix Domain Socket 创建实例 一: 简介 Socket 是 网络传输的抽象概念。 一般我们常用的有Tcp Socket和 UDP Scoket, 和类Unix 系统(包括Mac)独有的 Unix Domain Socket(UDX)。 Tcp So…

基于SpringBoot Vue家政服务预约平台系统

大家好✌!我是Dwzun。很高兴你能来阅读我,我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结,还为大家分享优质的实战项目,本人在Java项目开发领域有多年的经验,陆续会更新更多优质的Java实战项目&#x…

Midjourney 提示词入门 | 提示词格式 特点如何写好自己的提示词?进阶技巧

文章目录 1 Prompt格式2 文本提示词的基本要求3 好的文本提示词的特点 上一节我们初步了解了Midjourney的使用 那么在使用过程中最重要的是通过Prompt告知Midjourney怎么画 因而高效写Prompt非常重要~ 先来了解一下Prompt基本格式 1 Prompt格式 /imagine Text_prompt如下图…

【数据结构与算法】4.自主实现单链表的增删查改

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点&…

开始学习Vue2(脚手架,组件化开发)

一、单页面应用程序 单页面应用程序(英文名:Single Page Application)简 称 SPA,顾名思义,指的是一个 Web 网站中只有唯一的 一个 HTML 页面,所有的功能与交互都在这唯一的一个页面内完成。 二、vue-cli …

JVM虚拟机面试题

一.JVM组成 1.JVM是什么 2.什么是程序计数器 3.java堆 4.虚拟机栈 5.方法区 6.直接内存 二.类加载器 1.什么是类加载器,类加载器有哪些 2.双亲委派模型 3.类装载的执行过程 三.垃圾回收 1.对象什么时候可以被垃圾器回收 2.JVM垃圾回收算法 3.JVM分代回收 4.JVM有哪些垃圾回收…

vcenter7.0

Vcenter7.0简易详细安装图解 环境:Windows server 2016 镜像:VMware-VCSA-all-7.0.3-20395099.iso 1.前提配置一个静态IP地址(192.168.80.120)和关闭防火墙 2.配置一个dns(这里做的是一个不加域的) 第一步…

数据仓库-相关概念

简介 数据仓库是一个用于集成、存储和管理大量数据的系统。它用于支持企业决策制定过程中的数据分析和报告需求。数据仓库从多个来源收集和整合数据,并将其组织成易于查询和分析的结构。 数据仓库的主要目标是提供高性能的数据访问和分析能力,以便…

不就业,纯兴趣,应该自学C#还是JAVA?

不就业,纯兴趣,应该自学C#还是JAVA? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家&#xff…

OpenHarmony 鸿蒙使用指南——概述

简介 OpenHarmony采用多内核(Linux内核或者LiteOS)设计,支持系统在不同资源容量的设备部署。当相同的硬件部署不同内核时,如何能够让设备驱动程序在不同内核间平滑迁移,消除驱动代码移植适配和维护的负担,…

2024年游泳骨传导耳机该怎么选?什么牌子的游泳耳机好?

游泳是一项非常有趣的运动,但是如果你想在水中听音乐或者收听其他音频内容,就需要一款专业的游泳骨传导耳机。那么,我们应该如何选择游泳骨传导耳机呢?接下来跟我一起看看这四款性能不错的游泳耳机吧。 1. 南卡骨传导游泳耳机 推…

【赠书第18期】人工智能B2B落地实战:基于云和Python的商用解决方案

文章目录 前言 1 方案概述 2 方案实施 2.1 云平台选择 2.2 Python环境搭建 2.3 应用开发与部署 2.4 应用管理 2.5 安全性与隐私保护 3 方案优势与效益 4 推荐图书 5 粉丝福利 前言 随着云计算技术的快速发展,越来越多的企业开始将业务迁移至云端&#x…

spring mvc Rest风格

南城余的Java学习 专栏收录该内容 70 篇文章0 订阅 我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发&#xf…

数据结构----线性表、顺序表、模拟实现顺序表

文章目录 1. 线性表2. 顺序表3. 模拟实现顺序表 1. 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,指具有相同数据类型的元素按照一定的顺序排列的数据结构,其中每…

Python笔记12-多线程、网络编程、正则表达式

文章目录 多线程网络编程正则表达式 多线程 现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统。 进程: 就是一个程序,运行在系统之上,那么便称之这个程序为一个运…

17β-Estradiol high sensitivity ELISA kit

高灵敏ELISA试剂盒,可检测到低至14 pg/ml的17β-雌二醇 雌二醇(estradiol) 是由卵巢内卵泡的颗粒细胞分泌的类固醇激素,是主要的雌激素,负责调节女性特征、附属性器官的成熟和月经-排卵周期,促进乳腺导管系统的产生,有…

全双工通信协议:WebSocket

全双工通信协议:WebSockets 前言何时使用WebSocketsWebSocket APITextWebSocketHandlerWebSocketConfigurerWebSocket握手配置服务器允许的来源心跳包Java WebSocket API案例一:前端发送消息并接收后端响应案例二:模拟后端向前端推送消息案例…

【DeepLearning-2】预归一化(Pre-Normalization)策略

2.1层归一化(Layer Normalization)在 PreNorm 类中的数学原理: 2.2代码实现: class PreNorm(nn.Module):def __init__(self, dim, fn):super().__init__()self.norm nn.LayerNorm(dim)self.fn fn def forward(self, x, **kwar…