Reed-Solomon 编码的解码算法

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,,mk1,构造由这些消息作为系数构成的度小于 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=0k1miXi
对每个 a 0 , ⋯   , a n − 1 ∈ D a_0, \cdots, a_{n-1} \in D a0,,an1D,计算 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,,mk1 的 Reed-Solomon 码字为 c 0 , ⋯   , c n − 1 c_0, \cdots, c_{n-1} c0,,cn1

定义 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,,bn1。希望解码出正确的度小于 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=2nk 个位置有错的 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,,bn1 中的错误位置不超过 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(ai)biE2(ai)=Q2(ai)

均成立,则一定有

Q 1 ( X ) E 1 ( X ) = Q 2 ( X ) E 2 ( X ) \frac{Q_1(X)}{E_1(X)} = \frac{Q_2(X)}{E_2(X)} E1(X)Q1(X)=E2(X)Q2(X)

要证明上述结论,只需证 Q 1 ( x ) E 2 ( x ) = Q 2 ( x ) E 1 ( x ) Q_1(x)E_2(x) = Q_2(x)E_1(x) Q1(x)E2(x)=Q2(x)E1(x) 对任意 x ∈ D x \in D xD 成立。由于
b i E 1 ( a i ) Q 2 ( a i ) = b i E 2 ( a i ) Q 1 ( a i ) b_i E_1(a_i) Q_2(a_i) = b_i E_2(a_i) Q_1(a_i) biE1(ai)Q2(ai)=biE2(ai)Q1(ai)

对任意 i i i,若 b i = 0 b_i = 0 bi=0,则 Q 1 ( a i ) = Q 2 ( a i ) = 0 Q_1(a_i) = Q_2(a_i) = 0 Q1(ai)=Q2(ai)=0;若 b i ≠ 0 b_i \neq 0 bi=0,则有 E 1 ( a i ) Q 2 ( a i ) = E 2 ( a i ) Q 1 ( a i ) E_1(a_i) Q_2(a_i) = E_2(a_i) Q_1(a_i) E1(ai)Q2(ai)=E2(ai)Q1(ai)

因此,只需求一组多项式 E ( X ) , Q ( X ) E(X), Q(X) E(X),Q(X) 满足
b i E ( a i ) = Q ( a i ) b_i E(a_i) = Q(a_i) biE(ai)=Q(ai)

由于多项式 E ( X ) E(X) E(X) 的最高此项为 1,可以构造关于 e 0 , ⋯   , e e − 1 , q 0 , ⋯   , q k + e − 1 e_0,\cdots, e_{e-1}, q_0,\cdots, q_{k+e-1} e0,,ee1,q0,,qk+e1 n n n ( k + 2 e ) (k + 2e) (k+2e) 元线性方程组
b i ( e 0 + e 1 a i + e 2 a i 2 + ⋯ + e e − 1 a i e − 1 + a i e ) = q 0 + q 1 a i + q 2 a i 2 + ⋯ + q k + e − 1 a i k + e − 1 b_i(e_0 + e_1 a_i + e_2 a_i^2 + \cdots + e_{e-1} a_i^{e-1} + a_i^e) = q_0 + q_1 a_i + q_2a_i^2+ \cdots + q_{k + e - 1}a_i^{k + e - 1} bi(e0+e1ai+e2ai2++ee1aie1+aie)=q0+q1ai+q2ai2++qk+e1aik+e1

解方程组即可得到 E ( X ) E(X) E(X) Q ( X ) Q(X) Q(X)

Berlekamp-Welch 算法 List decoding

该算法可以对至少 t = 2 n k + O ( 1 ) t = 2 \sqrt{nk} + O(1) t=2nk +O(1) 个位置正确的 Reed-Solomon 码进行纠错。

算法流程

首先找到一个非零多项式 Q ( X , Y ) Q(X, Y) Q(X,Y),满足 deg ⁡ X ( Q ) ≤ ℓ \deg_X(Q) \le \ell degX(Q) deg ⁡ Y ( Q ) ≤ n ℓ \deg_Y(Q) \le \frac{n}{\ell} degY(Q)n。且对任意 i ∈ [ n ] i \in [n] i[n],有 Q ( a i , b i ) = 0 Q(a_i, b_i) = 0 Q(ai,bi)=0

输出所有正确位置至少为 t t t 个的多项式 P ( X ) P(X) P(X) 满足 Y − P ( X ) Y-P(X) YP(X) 能整除 Q ( X , Y ) Q(X, Y) Q(X,Y)

选取的 ℓ \ell 应满足 t > ℓ + n k ℓ t > \ell + \frac{nk}{\ell} t>+nk。最优的 ℓ \ell 应当为 n k \sqrt{nk} nk 。此时 t > 2 n k t > 2\sqrt{nk} t>2nk

算法分析

第一步中,由于变量数为 ( ℓ + 1 ) ( n / ℓ + 1 ) (\ell + 1)(n/\ell+1) (+1)(n/+1),大于约束的数量 n n n。因此可以保证一定有非零解。

第二步中,需要证明如果度小于 k k k 的多项式 P ( X ) P(X) P(X) b ⃗ \vec{b} b 有至少 t t t 个点相等,则 Y − P ( X ) Y-P(X) YP(X) 整除 Q ( X , Y ) Q(X, Y) Q(X,Y)

对每个满足要求的 P ( X ) P(X) P(X),定义 R ( X ) = Q ( X , P ( X ) ) R(X) = Q(X, P(X)) R(X)=Q(X,P(X))。我们只需证明 R ( X ) ≡ 0 R(X) \equiv 0 R(X)0

首先分析, deg ⁡ ( R ) ≤ deg ⁡ X ( Q ) + deg ⁡ ( P ) ⋅ deg ⁡ Y ( Q ) ≤ ℓ + n k ℓ < t \deg(R) \le \deg_X(Q) + \deg(P) \cdot \deg_Y(Q) \le \ell + \frac{nk}{\ell} < t deg(R)degX(Q)+deg(P)degY(Q)+nk<t

P ( a i ) = b i P(a_i) = b_i P(ai)=bi,则 R ( a i ) = Q ( a i , b i ) = 0 R(a_i) = Q(a_i, b_i) = 0 R(ai)=Q(ai,bi)=0。由于 deg ⁡ ( R ) \deg(R) deg(R) 已经在至少 t t t 个位置等于 0 0 0,因此有 R ( X ) ≡ 0 R(X) \equiv 0 R(X)0

Sudan 算法

Sudan 算法能对至少有 t = 2 n k + O ( 1 ) t = \sqrt{2nk} + O(1) t=2nk +O(1) 个位置相同的 Reed-Solomon 码进行纠错。

带权度

定义单项式 X i Y j X^iY^j XiYj ( 1 , k ) (1,k) (1,k)-权度为 i + k j i + kj i+kj。定义多项式 Q ( X , Y ) Q(X, Y) Q(X,Y) ( 1 , k ) (1, k) (1,k)-权度为是其所有单项式的 ( 1 , k ) (1,k) (1,k)-权度最高的那个。

ℓ = ⌊ D k ⌋ \ell = \lfloor \frac{D}{k} \rfloor =kD ( 1 , k ) (1,k) (1,k)-权度不超过 D D D 的多项式 Q ( X , Y ) Q(X, Y) Q(X,Y) 可以写做
Q ( X , Y ) = ∑ j = 0 ℓ ∑ i = 0 D − k j q i , j X i Y j Q(X, Y) = \sum_{j=0}^{\ell} \sum_{i=0}^{D-kj} q_{i,j}X^iY^j Q(X,Y)=j=0i=0Dkjqi,jXiYj

算法流程

首先找到一个非零多项式 Q ( X , Y ) Q(X, Y) Q(X,Y),满足 ( 1 − k ) (1-k) (1k)-权度不超过 D = ⌈ 2 k n ⌉ D = \lceil \sqrt{2kn} \rceil D=2kn 。且对任意 i ∈ [ n ] i \in [n] i[n],有 Q ( a i , b i ) = 0 Q(a_i, b_i) = 0 Q(ai,bi)=0

输出所有相同位置至少为 t t t 的多项式 P ( X ) P(X) P(X),满足 Y − P ( X ) Y-P(X) YP(X) 能整除 Q ( X , Y ) Q(X, Y) Q(X,Y)

算法分析

在第一步,需要保证 Q ( X , Y ) Q(X, Y) Q(X,Y) 的系数个数大于 n n n,才能保证一定有非零解。

Q ( X , Y ) Q(X, Y) Q(X,Y) 的系数个数为

∑ j = 0 ℓ ∑ i = 0 D − k j 1 = ∑ j = 0 ℓ ( D − k j + 1 ) = ∑ j = 0 ℓ ( D + 1 ) − k ∑ j = 0 ℓ j = ( D + 1 ) ( ℓ + 1 ) − k ℓ ( ℓ + 1 ) 2 = ℓ + 1 2 ( 2 D + 2 − k ℓ ) ≥ ( ℓ + 1 2 ) ( D + 2 ) ≥ D ( D + 2 ) 2 k > D 2 2 k ≥ 2 k n 2 k = n \begin{align*} & \sum_{j=0}^{\ell} \sum_{i=0}^{D-kj} 1 \\ = & \sum_{j=0}^{\ell}(D - kj + 1) \\ = & \sum_{j=0}^{\ell}(D+1) - k \sum_{j=0}^{\ell}j \\ = & (D + 1)(\ell + 1) - \frac{k \ell(\ell + 1)}{2} \\ = & \frac{\ell+1}{2}(2D + 2 - k \ell) \\ \ge & \left(\frac{\ell+1}{2} \right)(D + 2) \\ \ge & \frac{D(D+2)}{2k} \\ \gt & \frac{D^2}{2k} \ge \frac{2kn}{2k} = n \end{align*} ====>j=0i=0Dkj1j=0(Dkj+1)j=0(D+1)kj=0j(D+1)(+1)2k(+1)2+1(2D+2k)(2+1)(D+2)2kD(D+2)2kD22k2kn=n

由于 Q ( X , P ( X ) ) Q(X, P(X)) Q(X,P(X)) 的度不超过 D D D,因此当 t > D t > D t>D 时,一定有 Y − P ( X ) Y-P(X) YP(X) 整除 Q ( X , Y ) Q(X, Y) Q(X,Y)

Guruswami-Sudan 算法

Guruswami-Sudan 算法能对至少 n k + O ( 1 ) \sqrt{nk} + O(1) nk +O(1) 个位置正确的 Reed-Solomon 码进行纠错。

二元多项式的多重根

定义 ( 0 , 0 ) (0,0) (0,0) Q ( X , Y ) Q(X, Y) Q(X,Y) r r r 重零点,当且仅当 Q ( X , Y ) Q(X, Y) Q(X,Y) 不存在度小于 r r r 的单项式。

定义 ( α , β ) (\alpha, \beta) (α,β) Q ( X , Y ) Q(X, Y) Q(X,Y) r r r 重零点,当且仅当 Q α , β ( X , Y ) = Q ( X + α , Y + β ) Q_{\alpha, \beta}(X, Y) = Q(X + \alpha, Y + \beta) Qα,β(X,Y)=Q(X+α,Y+β) ( 0 , 0 ) (0, 0) (0,0) r r r 个根。

如果 ( α , β ) (\alpha, \beta) (α,β) Q ( X , Y ) Q(X, Y) Q(X,Y) r r r 重零点,则任意 P ( X ) P(X) P(X) 满足 P ( α ) = β P(\alpha) = \beta P(α)=β,有 ( X − α ) r (X - \alpha)^r (Xα)r 整除 Q ( X , P ( X ) ) Q(X, P(X)) Q(X,P(X))

算法流程

r = 2 k n r = 2kn r=2kn。计算非零多项式 Q ( X , Y ) Q(X, Y) Q(X,Y),满足 ( 1 , k ) (1, k) (1,k)-权度不超过 D = ⌈ k n r ( r − 1 ) ⌉ D = \lceil \sqrt{knr(r-1)} \rceil D=knr(r1) ,且对任意 i ∈ [ n ] i \in [n] i[n] ( a i , b i ) (a_i, b_i) (ai,bi) Q ( X , Y ) Q(X, Y) Q(X,Y) r r r 重零点。

求所有正确位置至少为 t t t 的多项式 P ( X ) P(X) P(X),满足 Y − P ( X ) Y-P(X) YP(X) 能整除 Q ( X , Y ) Q(X, Y) Q(X,Y)

算法分析

Q ( X , Y ) Q(X, Y) Q(X,Y) ( a i , b i ) (a_i, b_i) (ai,bi) r r r 重根,表示对任意 i + j < r i+j<r i+j<r ( X − a i ) i ( Y − b i ) j (X-a_i)^i(Y-b_i)^j (Xai)i(Ybi)j 的系数为 0 0 0,因此共有 ( r + 1 2 ) \tbinom{r+1}{2} (2r+1) 条约束。变量数大于 D ( D + 2 ) 2 k > D 2 2 k ≥ k n r ( r − 1 ) 2 k = n ( r + 1 2 ) \frac{D(D+2)}{2k} > \frac{D^2}{2k} \ge \frac{knr(r-1)}{2k} = n \tbinom{r+1}{2} 2kD(D+2)>2kD22kknr(r1)=n(2r+1),因此保证一定存在非零解。

由于 R ( X ) = Q ( X , P ( X ) ) R(X) = Q(X, P(X)) R(X)=Q(X,P(X)) 的度不超过 D D D。由于有 t t t r r r 重零点能推出 R ( X ) ≡ 0 R(X) \equiv 0 R(X)0,因此要求 t r > D tr > D tr>D t t t ⌈ k n ( 1 − 1 r ) ⌉ \left \lceil \sqrt{kn(1-\frac{1}{r})} \right \rceil kn(1r1) 时满足要求。

r = 2 k n r = 2kn r=2kn 时, t = ⌈ k n − 1 2 ⌉ = ⌈ k n ⌉ t = \left \lceil \sqrt{kn - \frac{1}{2}} \right \rceil = \left \lceil \sqrt{kn} \right \rceil t=kn21 =kn

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Reed-Solomon编码是一种常用于纠错的块编码方法,经常在数据传输和存储领域使用。Verilog是一种硬件描述语言,常用于电子系统的设计和验证。 Reed-Solomon编码是基于有限域的编码,主要用于纠正数据传输中的错误。它使用了多项式的乘法和除法来实现编码解码过程。编码过程中,输入的数据被分成若干个固定大小的块,每个块通过与一个生成多项式相乘来生成冗余数据。解码过程中,接收到的数据块经过与一个校验多项式相乘并得到一个余数,该余数可以用于检测和修复错误。可以通过检测到的错误位置和格雷码来修复数据。 在Verilog中实现Reed-Solomon编码可以使用硬件逻辑实现相关算法。首先,需要包括多项式的乘法、除法和加法。可以使用Verilog的乘法模块来实现多项式乘法,使用除法模块来实现多项式除法。此外,还需要实现用于生成生成多项式和校验多项式的模块,以及错误检测和纠正的模块。 编码过程中,需要将输入数据分成块,并且为每个块添加纠错码。解码过程中,需要将接收到的数据块进行纠正,并恢复原始数据。可以使用状态机来控制编码解码过程,并根据需要进行数据的移位、异或和乘法等操作。 在Verilog中实现Reed-Solomon编码可能需要相当的硬件资源和复杂的逻辑。因此,在实际应用中,通常使用已经实现和验证过的第三方IP核来完成Reed-Solomon编码的设计。这些IP核可以提供高性能和稳定的编码解码功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值