喷泉码浅谈

01、喷泉码简介

喷泉码(Fountain Code)是一种在无线通信、数据传输和网络编码领域中使用的错误纠正技术。它与传统的纠错码和编码方法有所不同,喷泉码被设计用于在不确定信道条件下的高效数据传输。传统的纠错码(如海明码、RS码等)通常需要在发送方对数据进行编码,接收方则使用相同的编码进行解码和纠错。这些方法一般具有固定的码率(Code Rate),即针对一定长度的原始数据,编码后的长度是固定的,这些方法在面对不稳定的信道或严重的信道丢失时可能效果不佳。相比之下,喷泉码通过在发送方生成随机的冗余数据,然后将其注入到原始数据中,以创造出一个“喷泉”流——相应的码率也也就不固定了。接收方可以从这个流中采样任意数量的数据包,并将它们合并以恢复原始数据。喷泉码的一种常见应用是在无线传感器网络中,其中网络节点之间的通信可能受到弱信号、干扰和多径传播等因素的影响。通过使用喷泉码,节点可以在较差的通信条件下实现可靠的数据传输。喷泉码另外一个常用的场景是大量文件或者数据的广播,这种时候每位接受者的丢包率是不确定的,因此固定码率的编码就不适用,喷泉码却可以解决该场景下的问题——丢包率高的接受者多收一些包,丢包率少的接受者则少收一些包。本文会介绍最常见的两种喷泉码实现,LT 编码 和 Raptor 编码。通过这两种编码的介绍和比较可以比较好的了解喷泉码的特性和基本的实现原理。

02、LT 编码


LT 编码 是第一个被实现的具有实用价值的喷泉码,该编码在 2002 年被提出,实现记的基本原理也非常简单,即位运算中的 xor 操作。Xor 操作有如下的特性:

  1. 两个相同的数据块 M,它们 Xor 的结果是 0。即 M ^ M = 0。
  2. 对一块数据块 M,Xor 两次相同的数据块 N,最终结果仍然为 M。即 M ^ N ^ N = M。
  3. 假设两个等长的数据块 M 和 N,M ^ N = L。那么 L ^ M = N 并且 L ^ N = M。

基于上述的特性,LT 编码的方式就可以描述为下列的步骤:

  1. 对于长度为 N 的等宽数据块序列,随机选取一个 degree (d),1 ≤ d ≤ N。
  2. 从上述的数据块中选取随机 d 个数据块,将所有选取的数据块进行 xor 操作,最终得到一个编码的数据块。
  3. 重复上述步骤 1 和 2,我们可以得到源源不断的编码数据块,好像“喷泉”一样水流不断。

编码过程很简单,唯一需要注意一下的问题是如何获得等款的数据块。如果总数长度不能够恰巧分成 N 等分,我们可以通过在后续加 padding 的方式来实现可以 N 等分。解码相对比较复杂, 描述如下:

  1. 已经接受过的重复的编码块丢弃。
  2. 如果接收的数据块 d > 1, 将其和 所有已知和该编码块相关的 d = 1 的原始数据块进行 xor 操作,没操作一次 d 减一,如果知道最后 d > 1,则将结果暂存到队列中,否则将最终得到的原始数据块记录下来。
  3. 每当发现一个新的 d = 1的原始数据块,将该数据块和所有等待数据块中相关的数据块进行 xor 操作,以期待发现更多的 d = 1 的原始数据块。
  4. 重复上述操作,直到所有的原始数据块被恢复出来。

该过程中的编码数据块一般还是会携带 metadata 信息,包含原始数据块的位置信息,例如告知该编码块由 第1 和 第3 个原始数据块 xor 而来。LT 编码有其局限性,如果我们想保证编码块的数量 m 和原始数据块数量 k 非常接近,且恢复的成功率较高,那么平均每个编码块的生成需要进行 O(log(k)) 次 Xor 操作,需要消耗非常多的计算资源。相反,如果 degree 比较低,虽然每个编码块的操作数减少了,但是我们会需要更多的编码块来恢复出全部数据。上述所说的局限性是受到信息论的约束的,无法进一步降低。那么我们有没有办法实现一种方式来降低计算资源的消耗呢?比如我们如果不需要恢复出全部的原始数据呢?受到这个思路的启发 Raptor 算法应运而生。

03、Raptor 算法

Raptor 本质上是一类混合编码方式,结合 LT 编码和 LDPC 编码,同时获取了两种编码的好处。如下图所示:

Raptor 编码首先通过 LDPC 编码进行一次固定码率编码,形成一个中间编码层,然后再对该编码层进行 LT 编码,生成最终的编码数据块。当然 Raptor 编码也会有其他变种,不过原理大同小异,例如下图所示:

该编码具有三层结构,中间编码结果经过了两层固定码率编码,分别是Hamming 编码LDPC 编码,然后再进行LT 编码生成最终的编码块。针对 Raptor 编码的解码方式一般有两种。第一种和编码方式完全相反,首先利用 LT 编码的解码方式恢复出部分的中间编码块,然后利用固定编码的解码方式恢复出原始的数据块。第二种方式则是将上述所有的多层编码方式都变成一种矩阵运算,针对收到数据后利用矩阵的高斯消元方法解出原始的数据块。现有为人所熟知的 Raptor 编码主要有 RFC 5053 和 RFC 6330 RaptorQ 编码。两者的实现细节有诸多区别,但是内在的思路和上述的方法是类似的,有兴趣的读者可以进一步进行阅读和学习。

04、总结

喷泉码是一种无固定码率的编码方式,其中比较著名的有 LT 编码和 Raptor 编码。LT 编码算法简单,实现也简单,但是算法效率不高。Raptor 算法结合了 LT 编码和一些固定码率编码,利用混合编码的方式实现了高效的喷泉码。

达坦科技(DatenLord)专注下一代云计算——“天空计算”的基础设施技术,致力于拓宽云计算的边界。达坦科技打造的新一代开源跨云存储平台DatenLord,通过软硬件深度融合的方式打通云间壁垒,实现数据高效跨云访问,建立海量异地、异构数据的统一存储访问机制,为云上应用提供高性能安全存储支持。以满足不同行业客户对海量数据跨云、跨数据中心高性能访问的需求。

公众号:达坦科技DatenLord

DatenLord官网:http://www.datenlord.io

知乎账号:

达坦科技DatenLord - 知乎

B站



https://space.bilibili.com/2017027518

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

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

相关文章

MAC苹果电脑如何压缩rar文件?

作为开发者,想必主力开发机肯定都以苹果的MacBook为主,究其原因,为非是因为其对开发者的友好性,且可同时进行iOS 以及android的app开发,但是windows在这方面就欠缺太多了,虽然很多人说可以使用,…

Linux服务器部署JavaWeb后端项目

适用于:MVVM前后台分离开发、部署、域名配置 前端:Vue 后端:Spring Boot 这篇文章只讲后端部署,前端部署戳这里 目录 Step1:服务器上搭建后端所需环境1、更新服务器软件包2、安装JDK83、安装MySQL4、登录MySQL5、修…

可视化绘图技巧100篇基础篇(九)-子弹图(一)

目录 前言 适用场景 图例 绘图工具及代码实现 Excel绘制子弹图 Python绘制子弹图

钉钉消息已读、未读咋实现的嘞?

前言 一款app,消息页面有:钱包通知、最近访客等各种通知类别,每个类别可能有新的通知消息,实现已读、未读功能,包括多少个未读,这个是怎么实现的呢?比如用户A访问了用户B的主页,难道…

Kotlin的内置函数 apply、let、run、with、also

let 1.let函数返回类型,是根据匿名函数的最后一行变化而变化 2.let函数中的匿名函数里面持有的是it 集合自身 fun main() {var num1 1var num2 1var result:Intresult num1 num2var str result?.let {//传入本身,it指代本身即result,result不为空…

Mac下Docker Desktop安装命令行工具、开启本地远程访问

Mac系统下,为了方便在terminal和idea里使用docker,需要安装docker命令行工具,和开启Docker Desktop本地远程访问。 具体方法是在设置-高级下, 1.将勾选的User调整为System,这样不用手动配置PATH即可使用docker命令 …

Nuxt 菜鸟入门学习笔记五:CSS 样式

文章目录 本地样式表在组件内导入通过 Nuxt 配置 CSS 属性导入使用字体导入通过 NPM 发布的样式表 外部样式表动态添加样式表【高级】使用 Nitro 插件修改渲染的头部 使用预处理器单文件组件 SFC 样式类和样式绑定使用 v-bind 的动态样式Scoped StylesCSS Modules预处理器支持 …

基于Python+OpenCV智能答题卡识别系统——深度学习和图像识别算法应用(含Python全部工程源码)+训练与测试数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境PyCharm安装OpenCV环境 模块实现1. 信息识别2. Excel导出模块3. 图形用户界面模块4. 手写识别模块 系统测试1. 系统识别准确率2. 系统识别应用 工程源代码下载其它资料下载 前言 本项目基于Python和OpenCV图像处…

多重背包模板题,P1776 宝物筛选

题目描述 终于,破解了千年的难题。小 FF 找到了王室的宝物室,里面堆满了无数价值连城的宝物。 这下小 FF 可发财了,嘎嘎。但是这里的宝物实在是太多了,小 FF 的采集车似乎装不下那么多宝物。看来小 FF 只能含泪舍弃其中的一部分…

【SA8295P 源码分析】87 - SA8295P HQNX + Android 编译环境搭建指导

【SA8295P 源码分析】87 - SA8295P HQNX + Android 编译环境搭建指导 一、Android 编译环境搭建:Android + sa8295p-hqx-4-2-4-0_hlos_dev_la.tar.gz1.1 更新 Ubuntu 18.04 源路径1.2 安装基础编译环境1.3 设置JDK8 的环境变量1.4 配置sh为bash(默认为dash)1.5 Android 编译…

图像扭曲之旋转

源码: void twirl(cv::Mat& src,cv::Mat& dst,double angle,double radius) {dst.create(src.rows, src.cols, CV_8UC3);dst.setTo(0);int radius2radius*radius;int cx src.cols / 2;int cy src.rows / 2;int distance,distance2 0;for (int h 0; h &…

P13 VUE 二级menu实现

主要修改以下几个点&#xff1a; CommonAside.vue中 外层便利有孩子节点&#xff0c;关键词key是对应的标签&#xff0c;class动态图表渲染 内层遍历不能再用item&#xff0c;用subitem&#xff0c;遍历该item.childeren&#xff0c;关键词是path&#xff0c; <templat…

k8s etcd 简介

Etcd是CoreOS基于Raft协议开发的分布式key-value存储&#xff0c;可用于服务发现、共享配置以及一致性保障&#xff08;如数据库选主、分布式锁等&#xff09;。 如&#xff0c;Etcd也可以作为微服务的注册中心&#xff0c;比如SpringCloud也基于ETCD实现了注册中心功能&#…

dayjs格式转换成日期

目录 方法一&#xff1a; ​编辑方法二&#xff1a; 这个项目在筛选订单时间的时候是由前端进行筛选的&#xff0c;用的是adt-design-pro进行二开的&#xff0c;其中在用日期组件的时候遇到了一个问题&#xff0c;组件返回的是&#xff1a; 但是我需要的是年-月-日&#xff…

OpenCV中Mat、Ipllmage以及Halcon中Hobject数据类型之间转换

OpenCV中Mat、CVMat、Ipllmage类型都可以代表和显示图像。IplImage是由CVMat派生,而CvMat由CvArr派生即CvArr -> CvMat -> IplImage,Mat类型则是C++版本的矩阵类型(CvArr用作函数的参数,无论传入的是CvMat或IplImage,内部都是按CvMat处理)。 Mat类型侧重于计算,数…

计算机网络 第二节

目录 一&#xff0c;计算机网络的分类 1.按照覆盖范围分 2.按照所属用途分 二&#xff0c;计算机网络逻辑组成部分 1.核心部分 &#xff08;通信子网&#xff09; 1.1电路交换 1.2 分组交换 两种方式的特点 重点 2.边缘部分 &#xff08;资源子网&#xff09; 进程通信的方…

模拟电子技术基础学习笔记三 PN结

采用不周的掺杂工艺&#xff0c;将P型半导体与N型半导体制作在同一块硅片上&#xff0c;在它们的交界面就形成PN结。 扩散运动 物质总是从浓度高的地方向浓度低的地方运动&#xff0c;这种由于浓度差而产生的运动称为扩散运动。 空间电荷区 - 耗尽层 漂移运动 在电场力的作…

成集云 | 飞书审批同步金蝶云星空 | 解决方案

源系统成集云目标系统 方案介绍 飞书员工报销审批通过后&#xff0c;审批单据内容和审批状态实时同步金蝶云星空 飞书是字节跳动于2016年自研的新一代一站式协作平台&#xff0c;将即时沟通、日历、云文档、云盘和工作台深度整合&#xff0c;通过开放兼容的平台&#xff0c;…

BIO到NIO、多路复用器, 从理论到实践, 结合实际案例对比各自效率与特点(下)

文章目录 多路复用器简介多路复用器的两个阶段Java中的多路复用器封装测试代码压测结果总结 本篇文章是BIO到NIO、多路复用器, 从理论到实践, 结合实际案例对比各自效率与特点(上)的下一篇, 如果没有看的小伙伴, 可以先看下, 不然可能会不连贯. 多路复用器简介 多路复用器是对…

JavaScript Web APIs - 04 日期对象 、DOM节点操作

Web APIs - 04 文章目录 Web APIs - 04日期对象实例化方法时间戳 DOM 节点插入节点删除节点查找节点父子关系兄弟关系 进一步学习 DOM 相关知识&#xff0c;实现可交互的网页特效 能够插入、删除和替换元素节点能够依据元素节点关系查找节点 日期对象 掌握 Date 日期对象的使…