【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),接收端仍能完整恢复原始信息。
例如,将6位数据编码为8位,允许传输过程中丢失任意2位数据,接收方仍能准确还原原始6位数据。
Reed-Solomon码基于多项式插值原理:
任意k+1个点可以唯一确定一个k次多项式
两点确定一条直线(一次多项式)
三点确定一条抛物线(二次多项式)
四点确定三次曲线等
这一特性使得:如果已知某多项式上的多个点,只需其中足够数量的点即可重构整个多项式。
如果已知某条抛物线上的5个点,那么用其中任意 3 个点就能还原整条曲线。
**原始视角(Original View)**:
主要用作擦除码(Erasure Code)
编码:使用范德蒙矩阵进行矩阵-向量乘法
解码:通过矩阵求逆和基本行/列操作
**BCH视角**:
作为纠错码(Error Correction Code)使用
编码:采用多项式除法和余数计算
硬件实现:使用线性反馈移位寄存器
应用场景:QR码、广播通信等
Error Detection Code 检错码:仅能发现数据错误,但无法修复。
Erasure Code 纠删码/擦除码:能恢复丢失的数据,但前提知道丢失的位置(如丢包、磁盘损坏)。
Error Correction Code 纠错码:能自动检测并纠正错误,无需知道错误位置。
检错码难度最小,其次纠删码,最后纠错码。
从数学角度上讲:
**检错**:校验方程 $H⋅rT=0$(非零即错)。
**纠删**:解方程 $H$ 已知$⋅eT=s$(已知擦除位置)。
**纠错**:解非线性方程 $H⋅eT=s$(需搜索错误模式 $e$)。
**检错**:发现房间里有异味(无需知道来源)。
**纠删**:知道垃圾桶的位置,直接清理。
**纠错**:在未知位置中寻找异味来源并清除。
对于Reed-Solomon码来说,若原始数据为 $k$ 位,编码后为 $n$位,则允许 $(n−k)$ 位丢失或 $(n−k)/2$ 位出错。
以传输香农生日 19ab-cd-ef 的6位数据为例:
使用9位表示:可容忍丢失任意3位(擦除码)
使用10位表示:可纠正任意2位错误(纠错码)
具体实现时,将数据作为多项式系数构造多项式,然后计算多个点值进行传输。接收方通过收到的足够数量的点值求解方程组,即可恢复原始数据。