Reed-Solomon Codes——RS纠错码

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Reed-Solomon Codes——RS纠错码相关的知识,希望对你有一定的参考价值。

1. 引言

前序博客有:

Reed-Solomon Codes为基于block的纠错码,在数字通信和存储中有大量应用,在如下系统中用于纠错:

  • 存储设备(包括磁带、光盘、DVD、条形码等)
  • 无线或移动通信(包括手机、微波连接等)
  • 卫星通信
  • 数字电视/DVB
  • 高速调制解调器,如ADSL、xDSL等

典型的系统如下图所示:

Reed-Solomon encoder(编码器) 接收一块数字数据并添加额外的“冗余”位。数据在传输或存储过程中出现错误的原因有多种(如噪声或干扰,CD上的划痕等等)。
Reed-Solomon decoder(解码器) 会处理每个块,并试图纠正错误,恢复原始数据。

能纠正的错误类型和错误数量具体取决于Reed-Solomon码的特性。

2. Reed-Solomon码的特性

Reed-Solomon码为BCH码的子集,属于linear block码。

Reed-Solomon码定义为:
R S ( n , k ) RS(n,k) RS(n,k) with s s s-bit symbols。

也就意味着:

  • Reed-Solomon 编码器接收 k k k个data symbols,每个symbol对应有 s s s bits,然后添加parity symbols,最终获得长度为 n n n的symbol codeword。parity symbol的个数为 n − k n-k nk个,每个parity symbol对应有 s s s bits。
  • Reed-Solomon 解码器可纠正codeword中最多 t t t个symbol错误,其中 2 t = n − k 2t=n-k 2t=nk

对Reed-Solomon进行编解码所需的算力,与每个codeword内的parity symbols数量相关。更大的 t t t值以为这可纠正更多的错误,但是相比于 小 t t t 需要更多的算力。

已知symbol size为 s s s,则Reed-Solomon码的最大codeword length n n n n = 2 s − 1 n=2^s-1 n=2s1。如对于8-bit symbol( s = 8 s=8 s=8),其code最大长度为 255 255 255 bytes。

以下为典型的Reed-Solomon codeword(又名Systematic码,因为数据部分保持不变,仅附加了parity symbols):

比如,流行的Reed-Solomon码 R S ( 255 , 223 ) RS(255,223) RS(255,223) with 8-bit symbols,每个codeword包含了255 code word bytes,其中223 bytes为数据,32 bytes为parity,有:
n = 255 , k = 223 , s = 8 n=255,k=223,s=8 n=255,k=223,s=8
25 = 32 , t = 16 25=32, t=16 25=32,t=16

解码器可纠正code word中的任意16个symbol error,即codeword中的任意位置的最多16 bytes错误可被自动纠正。

2.1 缩短Reed-Solomon码

理论上Reed-Solomon码长度是可缩短的,通过在编码时将一定数量的data symbols设置为0,不传输这些为0的data symbols,然后在解码时重新插入为0的data symbols。
仍然以上面的 ( 255 , 223 ) (255,223) (255,223)码为例,可将其缩短为 ( 200 , 168 ) (200,168) (200,168)码,编码时的block内有168 data bytes,然后理论上增加55 zero bytes,创建出一个 ( 255 , 223 ) (255, 223) (255,223) codeword,但是实际仅需传输168 data bytes和32 parity bytes。

2.2 Symbol Errors

若单个symbol内有一个bit出错或者所有bit都错了时,则均为一个symbol error。

仍然以 R S ( 255 , 223 ) RS(255, 223) RS(255,223)为例,其可纠正 16 16 16个symbol errors,最差的情况是,有16 bit errors,每个bit错误发生在不同的symbol(byte),解码器纠正16 bit errors。最好的情况是,16个symbol内的所有bit都错了,此时解码器可纠正 16 × 8 16\\times 8 16×8 bit errors。

Reed-Solomon码特别适于纠正burst errors(即所接收到的codeword内有a series of bits出错)。

2.3 解码

Reed-Solomon代数解码的过程中,可:

  • 纠错
  • 擦除:当已知错误symbol的位置时,可进行擦除。

解码器可最多纠正 t t t个symbol错误,或最多擦除 2 t 2t 2t个错误symbol。在数字通信系统中,擦除信息通常由解调器提供,即解调器会对其收到的symbols中可能 包含错误的symbol 进行“标记”。

当对codeword解码时,有以下3种可能:

  • 1)若 2 s + r < 2 t 2s+r<2t 2s+r<2t,即 s s s个error, t t t个擦除,则总是可恢复出所传输的原始code word。
  • 2)解码器发现其无法恢复原始code word,并说明了该情况。
  • 3)解码器,在无任何说明的情况下,进行了错误解码并恢复了错误的code word。

以上3种情况发生的概率取决于具体的Reed-Solomon码、error数量 以及 error分布情况。

2.4 coding gain编码增益

使用Reed-Solomon码的优势在于,解码后数据内包含错误的概率,通常远低于,未使用Reed-Solomon码的错误发生概率。通常将其称为coding gain。

如:
数字通信系统中,设计的Bit Error Ration(BER)为 1 0 − 9 10^-9 109,即所接收到的 1 0 9 10^9 109个bits,最多仅能有 1 1 1个bit出错。
可通过增加发射器的功率 或 添加Reed-Solomon码(或另一种 前向纠错码) 来实现。Reed-Solomon码可使得系统发射器以较低的输出功率实现目标BER。由于使用Reed-Solomon所节约的power,即称为coding gain。

3. Reed-Solomon码的编解码架构

Reed-Solomon编解码可在软件或特定用途硬件内实现。

3.1 关键概念

  • 1)Finite(Galois) Field Arithmetic:
    Reed-Solomon码基于数学上名为Galois fields或Finite fields的特殊域。finite field内具有的属性为:field elements 经(加减乘除等)运算后的结果 仍在field域内。
    Reed-Solomon编码器或解码器需要执行这些运算操作,这些运算需要特殊的硬件或实现相应的软件函数。

  • 2)Generator多项式:
    Reed-Solomon codeword采用特殊的多项式生成,所有有效的codewords都可整除该generator polynomial。
    generator多项式的通用形式为:
    g ( x ) = ( x − α 0 ) ( x − α 1 ) ⋯ ( x − α 2 t − 1 ) g(x)=(x-\\alpha^0)(x-\\alpha^1)\\cdots(x-\\alpha^2t-1) g(x)=(xα0)(xα1)(xα2t1)
    codeword的构建方式为:
    c ( x ) = g ( x ) ⋅ i ( x ) c(x)=g(x)\\cdot i(x) c(x)=g(x)i(x)
    其中 g ( x ) g(x) g(x)为generator多项式, i ( x ) i(x) i(x)为information block(即上面提到的data symbol), c ( x ) c(x) c(x)为一个有效codeword, α \\alpha α为field F域内的一个primitive element(generator)。

所谓generator,是指 [ α 0 , α 1 , α 2 , ⋯   , α ∣ F ∣ − 2 ] [\\alpha^0, \\alpha^1,\\alpha^2,\\cdots,\\alpha^|F|-2] [α0,α1,α2,,αF2]为不同的非零值,即generator α \\alpha α的幂乘生成了field F内的所有非零元素。 ∣ F ∣ |F| F为field size,即不同元素的总数。

  • 待编码的数据长度 k k k满足 1 ≤ k < ∣ F ∣ 1\\leq k< |F| 1k<F
  • 在数据之后附加的纠错码长度 m = 2 t m=2t m=2t满足 1 ≤ m < ∣ F ∣ − k 1\\leq m<|F|-k 1m<Fk
  • 编码后的长度 n = k + m n=k+m n=k+m满足 2 ≤ n < ∣ F ∣ 2\\leq n<|F| 2n<F

3.2 Reed-Solomon编码架构——Systematic编码器

基于 m m m α \\alpha α的generator多项式定义为:
g ( x ) = ∏ i = 0 m − 1 ( x − α i ) = ( x − α 0 ) ( x − α 1 ) ⋯ ( x − α m − 1 ) g(x)=\\prod_i=0^m-1(x-\\alpha^i)=(x-\\alpha^0)(x-\\alpha^1)\\cdots (x-\\alpha^m-1) g(x)=i=0m1(xαi)=(xα0)(xα1)(xαm1)

原始消息为一系列 k k k个值 ( M 0 , M 1 , ⋯   , M k − 1 ) (M_0, M_1,\\cdots,M_k-1) (M0,M1,,Mk1),简单地以这些原始消息值为系数构建message多项式:
M ( x ) = ∑ i = 0 k − 1 M i x i = M 0 x 0 + M 1 x 1 + ⋯ + M k − 1 x k − 1 M(x)=\\sum_i=0^k-1M_ix^i=M_0x^0+M_1x^1+\\cdots + M_k-1x^k-1 M(x)=i=0k1Mixi=M0x0+M1x1+什么是纠删码

FingerPrint Fuzzy Vault Matlab实践

RS码的突发纠错能力

纠错输出编码(Error-Correcting Output Codes: ECOC)

纠错输出编码(Error-Correcting Output Codes: ECOC)

RS编码