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 n−k个,每个parity symbol对应有 s s s bits。
- Reed-Solomon 解码器可纠正codeword中最多 t t t个symbol错误,其中 2 t = n − k 2t=n-k 2t=n−k。
对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=2s−1。如对于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
10−9,即所接收到的
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−α2t−1)
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,⋯,α∣F∣−2]为不同的非零值,即generator α \\alpha α的幂乘生成了field F内的所有非零元素。 ∣ F ∣ |F| ∣F∣为field size,即不同元素的总数。
- 待编码的数据长度 k k k满足 1 ≤ k < ∣ F ∣ 1\\leq k< |F| 1≤k<∣F∣。
- 在数据之后附加的纠错码长度 m = 2 t m=2t m=2t满足 1 ≤ m < ∣ F ∣ − k 1\\leq m<|F|-k 1≤m<∣F∣−k。
- 编码后的长度 n = k + m n=k+m n=k+m满足 2 ≤ n < ∣ F ∣ 2\\leq n<|F| 2≤n<∣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=0∏m−1(x−αi)=(x−α0)(x−α1)⋯(x−αm−1)
原始消息为一系列
k
k
k个值
(
M
0
,
M
1
,
⋯
,
M
k
−
1
)
(M_0, M_1,\\cdots,M_k-1)
(M0,M1,⋯,Mk−1),简单地以这些原始消息值为系数构建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=0∑k−1Mixi=M0x0+M1x1+什么是纠删码
FingerPrint Fuzzy Vault Matlab实践
纠错输出编码(Error-Correcting Output Codes: ECOC)