首页
CtrlK

Reed-Solomon概述

Reed-Solomon概述

Reed-Solomon概述

视频 参考视频

【Reed-Solomon 擦除码 Python 实现 一 (上):多项式编码的原理】 https://www.bilibili.com/video/BV1CC4y1S7CL/?share_source=copy_web&vd_source=04259c9260832797bf08914e26e438d5

基本原理

引言 纠错编码

Reed-Solomon码是一种强大的纠错编码技术,广泛应用于数据存储和传输系统中。其核心思想是通过引入冗余数据来实现对原始信息的保护和恢复。

纠错系统

Reed-Solomon码工作流程是:将k个数据位编码为n个编码位(n>k),在传输过程中即使丢失部分数据(只要剩余数据量≥k),接收端仍能完整恢复原始信息。

6bits传输

例如,将6位数据编码为8位,允许传输过程中丢失任意2位数据,接收方仍能准确还原原始6位数据。

数学基础

多项式插值

Reed-Solomon码基于多项式插值原理:

  • 任意k+1个点可以唯一确定一个k次多项式

几何视角
  • 两点确定一条直线(一次多项式)

  • 三点确定一条抛物线(二次多项式)

  • 四点确定三次曲线等

用于纠错

这一特性使得:如果已知某多项式上的多个点,只需其中足够数量的点即可重构整个多项式。

还原抛物线

如果已知某条抛物线上的5个点,那么用其中任意 3 个点就能还原整条曲线。

两种视角

原始视角
  1. **原始视角(Original View)**

    • 主要用作擦除码(Erasure Code)

    • 编码:使用范德蒙矩阵进行矩阵-向量乘法

    • 解码:通过矩阵求逆和基本行/列操作

BCH视角
  1. **BCH视角**

    • 作为纠错码(Error Correction Code)使用

    • 编码:采用多项式除法和余数计算

    • 硬件实现:使用线性反馈移位寄存器

    • 应用场景:QR码、广播通信等

纠错能力

三个概念
  • Error Detection Code 检错码:仅能发现数据错误,但无法修复。

  • Erasure Code 纠删码/擦除码:能恢复丢失的数据,但前提知道丢失的位置(如丢包、磁盘损坏)。

  • Error Correction Code 纠错码:能自动检测并纠正错误,无需知道错误位置。

难度比较

检错码难度最小,其次纠删码,最后纠错码。

从数学角度上讲:

  • **检错**:校验方程 $HrT=0$(非零即错)。

  • **纠删**:解方程 $H$ 已知$eT=s$(已知擦除位置)。

  • **纠错**:解非线性方程 $HeT=s$(需搜索错误模式 $e$)。

房间异味
  • **检错**:发现房间里有异味(无需知道来源)。

  • **纠删**:知道垃圾桶的位置,直接清理。

  • **纠错**:在未知位置中寻找异味来源并清除。

纠错能力

对于Reed-Solomon码来说,若原始数据为 $k$ 位,编码后为 $n$位,则允许 $(nk)$ 位丢失或 $(nk)/2$ 位出错。

香农生日

以传输香农生日 19ab-cd-ef 的6位数据为例:

  • 使用9位表示:可容忍丢失任意3位(擦除码)

  • 使用10位表示:可纠正任意2位错误(纠错码)

具体实现时,将数据作为多项式系数构造多项式,然后计算多个点值进行传输。接收方通过收到的足够数量的点值求解方程组,即可恢复原始数据。

Reed-Solomon概述
Mleon的头像
创建于:05-01
随记
讨论
媒体