Reed-Solomon 编码的解码算法
Reed-Solomon 编码 R S ( D , k ) RS(D,k) RS(D,k) 定义为,对于消息 m 0 , ⋯ , m k − 1 m_0,\cdots, m_{k-1} m0,⋯,mk−1,构造由这些消息作为系数构成的度小于 k k k 的多项式
F ( X ) = ∑ i = 0 k − 1 m i ⋅ X i F(X) = \sum_{i=0}^{k-1} m_i \cdot X^i F(X)=i=0∑k−1mi⋅Xi
对每个 a 0 , ⋯ , a n − 1 ∈ D a_0, \cdots, a_{n-1} \in D a0,⋯,an−1∈D,计算 c i = F ( a i ) c_i = F(a_i) ci=F(ai)。 m 0 , ⋯ , m k − 1 m_0, \cdots, m_{k-1} m0,⋯,mk−1 的 Reed-Solomon 码字为 c 0 , ⋯ , c n − 1 c_0, \cdots, c_{n-1} c0,⋯,cn−1。
定义 R S [ F , D , k ] RS[\mathbb{F}, D, k] RS[F,D,k] 为所有可能的 R S ( D , k ) RS(D,k) RS(D,k) 码字的集合。
解码算法已知 D D D,并收到可能存在错误的 b 0 , ⋯ , b n − 1 b_0, \cdots, b_{n-1} b0,⋯,bn−1。希望解码出正确的度小于 k k k 的多项式 F ( X ) ∈ R S [ F , D , k ] F(X) \in RS[\mathbb{F}, D, k] F(X)∈RS[F,D,k]。
Berlekamp-Welch 算法 Unique decoding
该算法可以对存在至多 e = ⌊ n − k 2 ⌋ e = \lfloor \frac{n-k}{2}\rfloor e=⌊2n−k⌋ 个位置有错的 Reed-Solomon 编码纠错。
定义度小于等于 e e e 的多项式 E ( X ) E(X) E(X) 满足,对任意 i i i,若 b i ≠ F ( a i ) b_i \neq F(a_i) bi=F(ai),则 E ( a i ) = 0 E(a_i) = 0 E(ai)=0。额外定义 E ( X ) E(X) E(X) 的最高次项系数为 1。
由 E ( X ) E(X) E(X) 的定义,显然有
b i E ( a i ) = E ( a i ) F ( a i ) b_i E(a_i) = E(a_i) F(a_i) biE(ai)=E(ai)F(ai)
定义 Q ( X ) = E ( X ) ⋅ F ( X ) Q(X) = E(X) \cdot F(X) Q(X)=E(X)⋅F(X) 为度小于 k + e k + e k+e 的多项式,则有
b i E ( a i ) = Q ( a i ) b_i E(a_i) = Q(a_i) biE(ai)=Q(ai)
显然,如果 b 0 , ⋯ , b n − 1 b_0, \cdots, b_{n-1} b0,⋯,bn−1 中的错误位置不超过 e e e 个,则存在满足上述等式的度小于 e e e 的多项式 E ( X ) E(X) E(X) 和度小于 k + e k+e k+e 的多项式 Q ( X ) Q(X) Q(X), Q ( X ) / E ( X ) Q(X) / E(X) Q(X)/E(X) 即为目标的 F ( X ) F(X) F(X)。
可以证明,对任何度小于 e e e 的非零多项式 E 1 ( X ) , E 2 ( X ) E_1(X), E_2(X) E1(X),E2(X) 和度小于 k + e k + e k+e 的多项式 Q 1 ( X ) , Q 2 ( X ) Q_1(X), Q_2(X) Q1(X),Q2(X),若有
b i E 1 ( a i ) = Q 1 ( a i ) b i E 2 ( a i ) = Q 2 ( a i ) b_i E_1(a_i) = Q_1(a_i) \quad b_iE_2(a_i) = Q_2(a_i) biE1(ai)=Q1