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错误可被自动纠正。

扫描二维码关注公众号,回复: 14428703 查看本文章

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-1}M_ix^i=M_0x^0+M_1x^1+\cdots + M_{k-1}x^{k-1} M(x)=i=0k1Mixi=M0x0+M1x1++Mk1xk1

计算Reed-Solomon codeword的公式为:
s ( x ) = M ( x ) x m − [ ( M ( x ) x m ) m o d    g ( x ) ] s(x)=M(x)x^m-[(M(x)x^m)\mod g(x)] s(x)=M(x)xm[(M(x)xm)modg(x)]
其中 [ ( M ( x ) x m ) m o d    g ( x ) ] [(M(x)x^m)\mod g(x)] [(M(x)xm)modg(x)]多项式具有的degree小于等于 m − 1 m-1 m1,因此不会与 M ( x ) x m M(x)x^m M(x)xm项的结果相互影响。总的 s ( x ) s(x) s(x)的degree小于等于 n − 1 n-1 n1

s ( x ) s(x) s(x)展开为:
s ( x ) = ∑ i = 0 n − 1 s i x i = s 0 x 0 + s 1 x 1 + ⋯ s n − 1 x n − 1 s(x)=\sum_{i=0}^{n-1}s_ix^i=s_0x^0+s_1x^1+\cdots s_{n-1}x^{n-1} s(x)=i=0n1sixi=s0x0+s1x1+sn1xn1
最终发送的RS码为 n n n个值 ( s 0 , s 1 , s 2 , ⋯   , s n − 1 ) (s_0,s_1,s_2,\cdots,s_{n-1}) (s0,s1,s2,,sn1)

3.3 Reed-Solomon解码架构——Peterson-Gorenstein-Zierler解码器

Reed-Solomon解码架构为:
在这里插入图片描述
其中:

  • r(x):为received codeword
  • Si:为Syndromes
  • L(x):Error locator polynomial
  • Xi:Error locations
  • Yi:Error magnitudes
  • c(x):Recovered code word
  • v:number of errors

以上架构图中:

  • 1)Syndrome Caculation:
    与parity calculation的计算类似,仅取决于errors(而不取决于所传输的code word),Reed-Solomon中有 2 t 2t 2t个syndromes。syndromes可通过向r(x)提交 generator多项式g(x)的 2t 个根来计算。

  • 2)寻找Symbol Error Locations:
    寻找Symbol Error Locations的过程,包含了,对包含t个未知变量simultaneous多项式的求解。有多种快速算法可实现该求解。这些算法利用了Reed-Solomon码的特殊结构,可大幅减少所需的算力。
    求解算法中通常包含2步:

    • 2.1)找到一个error locator多项式:可使用Berlekamp-Massey算法或Euclid算法。实际Euclid算法使用更广,因其更易于实现。但是Berlekamp-Massey算法的效率会更高。
    • 2.2)找到该多项式的根:通过Chien search算法实现。
  • 3)寻找Symbol Error Values:仍然包含了,对包含t个未知变量simultaneous多项式的求解。广泛使用的快速算法为Forney算法。

接收到的codeword r(x)为所传输的原始codeword c(x) + errors:
r ( x ) = c ( x ) + e ( x ) r(x)=c(x)+e(x) r(x)=c(x)+e(x)

Reed-Solomon解码者试图识别并纠正最多 t t t个errors或 2 t 2t 2t个erasures。

4. Reed-Solomon编解码器实现

4.1 Reed-Solomon编解码器硬件实现

目前有一些商业硬件实现了Reed-Solomon编解码功能,很多采用了“off-the-shelf”集成电路来对Reed-Solomon码进行编解码。这些IC支持一定数量的可编程性(如 R S ( 255 , k ) RS(255,k) RS(255,k),其中 t = 1 t=1 t=1~16个symbols)。
当前的趋势是VHDL或Verilog设计(logic cores 或 intellectual property cores)。相比于标准IC,主要优势有:

  • 1)logic core可与其他VHDL或Verilog元素集成
  • 2)可与FPGA(Field Programmable Gate Array)或ASIC(Application Specific Integrated Circuit)合成

这种“System on Chip”设计,支持将多个模块合并在单一IC内。取决于生产规模,相比于标准IC,logic cores可大幅降低系统开销,设计者可避免潜在的“周期性购买”Reed-Solomon IC。

4.2 Reed-Solomon编解码器软件实现

编码的速度要快于解码,所需的算力也更少。

相关软件代码实现见:
Reed-Solomon error-correcting code decoder

参考资料

[1] Reed-Solomon Codes (An introduction to Reed-Solomon codes: principles, architecture and implementation)
[2] Error Correction Coding
[3] Reed-Solomon error-correcting code decoder

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/126102106