解码器:通用极大似然解码器、线性码的校验子解码器、BCH码的PGZ解码器

极大似然解码器

对于任意(非线性、线性)编码 C ⊆ Σ n \mathscr C \subseteq \Sigma^n CΣn

  1. 输入接收到的字 y ∈ Σ n y \in \Sigma^n yΣn,任取码字 c ∈ C c \in \mathscr C cC,计算汉明距离 d ← d i s t ( c , y ) ) d \leftarrow dist(c,y)) ddist(c,y)),令 z ← c z \leftarrow c zc
  2. 对于 C \mathscr C C中所有的码字 c ′ ≠ c c' \neq c c=c
    1. 计算 d ′ ← d i s t ( c ′ , y ) d' \leftarrow dist(c',y) ddist(c,y)
    2. 如果 d ′ < d d'<d d<d,那么令 z ← c ′ z \leftarrow c' zc,且记录 d ← d ′ d \leftarrow d' dd
  3. 输出 z ∈ C z \in \mathscr C zC

线性码解码器

对于任意 ( n , k , d ) (n,k,d) (n,k,d)线性码 C ⊆ G F ( q ) n \mathscr C \subseteq GF(q)^n CGF(q)n,校验矩阵为 H H H,令 t = ⌊ ( d − 1 ) / 2 ⌋ t=\lfloor(d-1)/2\rfloor t=⌊(d1)/2

  1. 输入接收到的字 y ∈ G F ( q ) n y \in GF(q)^n yGF(q)n
  2. 对于 i = 0 , ⋯   , t i=0,\cdots,t i=0,,t,执行
    • 遍历错误位置 S ⊆ [ n ] , ∣ S ∣ = i S \subseteq [n],|S|=i S[n],S=i,执行
      • 遍历错误 e ∈ G F ( q ) n e \in GF(q)^n eGF(q)n,满足汉明重量 w t ( e S ) = i wt(e_S)=i wt(eS)=i
        • 如果 ( y − e ) ⋅ H T = 0 (y-e) \cdot H^T = 0 (ye)HT=0,那么输出 y − e ∈ C y-e \in \mathscr C yeC
  3. 输出 F a i l Fail Fail

这其实也是极大似然法,从 i = 0 , ⋯   , t i=0,\cdots,t i=0,,t依次测试,输出的是汉明距离最近的(其实也是半径 t t t的汉明球内唯一的)码字。由于 t = ⌊ ( d − 1 ) / 2 ⌋ t=\lfloor(d-1)/2\rfloor t=⌊(d1)/2,因此输出 F a i l Fail Fail时,字 y y y与多个码字的距离一样大。

对于汉明重量至多为 t t t的错误 e 1 ≠ e 2 e_1 \neq e_2 e1=e2,计算校验子 s 1 = e 1 H T s_1 = e_1H^T s1=e1HT s 2 = e 2 H T s_2 = e_2H^T s2=e2HT,假设 s 1 = s 2 s_1=s_2 s1=s2,那么 ( e 1 − e 2 ) H T = 0 (e_1-e_2)H^T=0 (e1e2)HT=0,从而 e 1 − e 2 ∈ C e_1-e_2 \in \mathscr C e1e2C,这与 d m i n ≥ 2 t + 1 d_{min} \ge 2t+1 dmin2t+1矛盾。因此,任意可纠正的错误图样 e e e,都一一对应于某个校验子的值。我们有第二种解码算法:

  1. 构造预计算表,里面的字典元素是键值对 { s = e H T : e } \{s=eH^T:e\} {s=eHT:e}
  2. 输入接收到的字 y ∈ G F ( q ) n y \in GF(q)^n yGF(q)n,计算 s ← y H T s \leftarrow yH^T syHT
  3. 查表,如果存在键值 s s s,对应的错误图样为 e e e,输出 y − e ∈ C y-e \in \mathscr C yeC;否则输出 F a i l Fail Fail

循环码解码器

对于任意 ( n , k , d ) (n,k,d) (n,k,d)循环码 C ⊆ G F ( q ) n \mathscr C \subseteq GF(q)^n CGF(q)n,生成多项式为 g ( x ) g(x) g(x),校验多项式为 h ( x ) h(x) h(x),令 t = ⌊ ( d − 1 ) / 2 ⌋ t=\lfloor(d-1)/2\rfloor t=⌊(d1)/2

  1. 输入接收到的字 y ∈ G F ( q ) n y \in GF(q)^n yGF(q)n,计算 Y = N T T ( y ) Y=NTT(y) Y=NTT(y) H = N T T ( h ) H=NTT(h) H=NTT(h)
  2. 对于 i = 0 , ⋯   , t i=0,\cdots,t i=0,,t,执行
    • 遍历错误位置 S ⊆ [ n ] , ∣ S ∣ = i S \subseteq [n],|S|=i S[n],S=i,执行
      • 遍历错误 e ∈ G F ( q ) n e \in GF(q)^n eGF(q)n,满足汉明重量 w t ( e S ) = i wt(e_S)=i wt(eS)=i
        • 如果 ( Y − N T T ( e ) ) ⋅ H = 0 n (Y-NTT(e)) \cdot H = 0^n (YNTT(e))H=0n,那么输出 y − e ∈ C y-e \in \mathscr C yeC
  3. 输出 F a i l Fail Fail

这就是线性码解码器的变体,只不过可以通过多项式卷积来判断它是否是个码字。

同样的,第二种解码算法:

  1. 构造预计算表,里面的字典元素是键值对 { s ( x ) = R g ( x ) [ e ( x ) ] : e ( x ) } \{s(x)=R_{g(x)}[e(x)]:e(x)\} {s(x)=Rg(x)[e(x)]:e(x)}
  2. 输入接收到的字 y ∈ G F ( q ) n y \in GF(q)^n yGF(q)n,计算 s ( x ) ← R g ( x ) [ y ( x ) ] s(x) \leftarrow R_{g(x)}[y(x)] s(x)Rg(x)[y(x)]
  3. 查表,如果存在键值 s ( x ) s(x) s(x),对应的错误图样为 e ( x ) e(x) e(x),输出 y − e ∈ C y-e \in \mathscr C yeC;否则输出 F a i l Fail Fail

BCH码的PGZ解码器

对于设计距离为 d = 2 t + 1 d=2t+1 d=2t+1的BCH码 C ⊆ G F ( q ) n \mathscr C \subseteq GF(q)^n CGF(q)n,选取 n n n次单位根 w w w

一个错误多项式可以写作: e ( x ) = ∑ i = 0 n − 1 e i x i e(x) = \sum_{i=0}^{n-1} e_i x^i e(x)=i=0n1eixi,其中有至多 t t t个系数非零。假设有 0 ≤ v ≤ t 0 \le v \le t 0vt个位置发生错误,将它们记做 i 1 , ⋯   , i v i_1,\cdots,i_v i1,,iv,那么
e ( x ) = e i 1 x i 1 + ⋯ + e i v x i v e(x) = e_{i_1}x^{i_1}+\cdots+e_{i_v}x^{i_v} e(x)=ei1xi1++eivxiv
其中 e i l ∈ G F ( q ) e_{i_l} \in GF(q) eilGF(q)是位置 i l i_l il处的错误大小。

不失一般性地,令 j 0 = 1 j_0=1 j0=1,那么BCH码的根为 w , w 2 , ⋯   , w 2 t w,w^2,\cdots,w^{2t} w,w2,,w2t,计算字 c ( x ) + e ( x ) c(x)+e(x) c(x)+e(x)频域校验子(frequency-domain syndromes),
S j = c ( w j ) + e ( w j ) = e ( w j ) S_j = c(w^j)+e(w^j) = e(w^j) Sj=c(wj)+e(wj)=e(wj)
那么
S j = e i 1 w j i 1 + ⋯ + e i v w j i v ,   j = 1 , ⋯   , 2 t S_j = e_{i_1}w^{ji_1}+\cdots+e_{i_v}w^{ji_v},\, j=1,\cdots,2t Sj=ei1wji1++eivwjiv,j=1,,2t
简记错误值 Y l = e i l Y_l = e_{i_l} Yl=eil(error-value),错误位置 X l = w i l X_l = w^{i_l} Xl=wil(error-location),就化为了关于 2 v 2v 2v个未知元的 2 t 2t 2t个非线性方程:
S 1 = Y 1 X 1 + Y 2 X 2 + ⋯ + Y v X v S 2 = Y 1 X 1 2 + Y 2 X 2 2 + ⋯ + Y v X v 2 ⋮ S 2 t = Y 1 X 1 2 t + Y 2 X 2 2 t + ⋯ + Y v X v 2 t \begin{aligned} S_1 &= Y_1X_1 + Y_2X_2 + \cdots + Y_vX_v\\ S_2 &= Y_1X_1^2 + Y_2X_2^2 + \cdots + Y_vX_v^2\\ &\vdots\\ S_{2t} &= Y_1X_1^{2t} + Y_2X_2^{2t} + \cdots + Y_vX_v^{2t}\\ \end{aligned} S1S2S2t=Y1X1+Y2X2++YvXv=Y1X12+Y2X22++YvXv2=Y1X12t+Y2X22t++YvXv2t
上述非线性方程组难以直接求解,我们首先计算错误定位器(error-locator),
Λ ( x ) = ( 1 − x X 1 ) ( 1 − x X 2 ) ⋯ ( 1 − x X v ) = 1 + ∑ i = 1 v Λ i x i \begin{aligned} \Lambda(x) &= (1-xX_1)(1-xX_2)\cdots(1-xX_v)\\ &= 1+ \sum_{i=1}^v \Lambda_i x^i \end{aligned} Λ(x)=(1xX1)(1xX2)(1xXv)=1+i=1vΛixi
一旦我们知道了它的系数 Λ i \Lambda_i Λi,我们就可以计算出它的零点 X l − 1 , l = 1 , ⋯   , v X_l^{-1},l=1,\cdots,v Xl1,l=1,,v,从而得到错误位置 X l X_l Xl的值!

对于 l = 1 , ⋯   , v l=1,\cdots,v l=1,,v,计算

Y l X l j + v ⋅ Λ ( X l − 1 ) = Y l ( X l j + v + Λ 1 X l j + v − 1 + ⋯ + Λ v X l j ) = 0 Y_lX_l^{j+v} \cdot \Lambda(X_l^{-1}) = Y_l(X_l^{j+v} + \Lambda_1 X_l^{j+v-1} + \cdots + \Lambda_v X_l^{j}) =0 YlXlj+vΛ(Xl1)=Yl(Xlj+v+Λ1Xlj+v1++ΛvXlj)=0

相加得到

0 = ∑ l = 1 v Y l X l j + v + Λ 1 ∑ l = 1 v Y l X l j + v − 1 + ⋯ + Λ v ∑ l = 1 v Y l X l j = S j + v + Λ 1 S j + v − 1 + ⋯ + Λ v S j \begin{aligned} 0 &= \sum_{l=1}^v Y_lX_l^{j+v} + \Lambda_1\sum_{l=1}^v Y_lX_l^{j+v-1} +\cdots+ \Lambda_v\sum_{l=1}^v Y_lX_l^{j}\\ &= S_{j+v} + \Lambda_1S_{j+v-1} + \cdots + \Lambda_vS_{j} \end{aligned} 0=l=1vYlXlj+v+Λ1l=1vYlXlj+v1++Λvl=1vYlXlj=Sj+v+Λ1Sj+v1++ΛvSj

由于频域校验子 S j , j = 1 , ⋯   , 2 t S_j,j=1,\cdots,2t Sj,j=1,,2t容易计算,我们就得到了非齐次线性方程组:

[ S 1 S 2 ⋯ S v S 2 S 3 ⋯ S v + 1 ⋮ S v S v + 1 ⋯ S 2 v − 1 ] ⋅ [ Λ v Λ v − 1 ⋮ Λ 1 ] = [ − S v + 1 − S v + 2 ⋮ − S 2 v ] \begin{bmatrix} S_1 & S_2 & \cdots & S_v\\ S_2 & S_3 & \cdots & S_{v+1}\\ \vdots\\ S_v & S_{v+1} & \cdots & S_{2v-1}\\ \end{bmatrix} \cdot \begin{bmatrix} \Lambda_v\\ \Lambda_{v-1}\\ \vdots\\ \Lambda_1\\ \end{bmatrix} = \begin{bmatrix} -S_{v+1}\\ -S_{v+2}\\ \vdots\\ -S_{2v}\\ \end{bmatrix} S1S2SvS2S3Sv+1SvSv+1S2v1 ΛvΛv1Λ1 = Sv+1Sv+2S2v

定理:假设 e ( x ) e(x) e(x)的汉明重量为 v v v,计算校验子方阵

M u = [ S 1 S 2 ⋯ S u S 2 S 3 ⋯ S u + 1 ⋮ S u S u + 1 ⋯ S 2 u − 1 ] M_u = \begin{bmatrix} S_1 & S_2 & \cdots & S_u\\ S_2 & S_3 & \cdots & S_{u+1}\\ \vdots\\ S_u & S_{u+1} & \cdots & S_{2u-1}\\ \end{bmatrix} Mu= S1S2SuS2S3Su+1SuSu+1S2u1

如果 u = v u=v u=v,那么它是非奇异的;如果 u > v u>v u>v,那么它是奇异的。

Peterson algorithm

  1. 输入字 c ( x ) + e ( x ) c(x)+e(x) c(x)+e(x),计算频域校验子 S j = e ( w j ) , j = 1 , ⋯   , 2 t S_j = e(w^j),j=1,\cdots,2t Sj=e(wj),j=1,,2t
  2. 对于 u = t , t − 1 , ⋯ u=t,t-1,\cdots u=t,t1,,依次计算 d e t ( M u ) det(M_u) det(Mu),直到 d e t ( u ) ≠ 0 det(u)\neq 0 det(u)=0,于是我们找到了错误的汉明重量 v = u v=u v=u
  3. 计算 M v M_v Mv的逆矩阵,求解线性方程组得到错误定位器 Λ ( x ) \Lambda(x) Λ(x)的系数 Λ 1 , ⋯   , Λ v \Lambda_1,\cdots,\Lambda_v Λ1,,Λv
  4. 计算 Λ ( x ) \Lambda(x) Λ(x)的零点 X l − 1 , l = 1 , ⋯   , v X_l^{-1},l=1,\cdots,v Xl1,l=1,,v,从而得到错误位置 X l = w w i l X_l=w^{w^{i_l}} Xl=wwil的值

于是,我们便把非线性方程组化为了关于 Y 1 , ⋯   , Y v Y_1,\cdots,Y_v Y1,,Yv的线性方程组:

[ X 1 X 2 ⋯ X v X 1 2 X 2 2 ⋯ X v 2 ⋮ X 1 2 t X 2 2 t ⋯ X v 2 t ] ⋅ [ Y 1 Y 2 ⋮ Y v ] = [ S 1 S 2 ⋮ S 2 t ] \begin{bmatrix} X_1 & X_2 & \cdots & X_v\\ X_1^2 & X_2^2 & \cdots & X_v^2\\ \vdots\\ X_1^{2t} & X_2^{2t} & \cdots & X_v^{2t}\\ \end{bmatrix} \cdot \begin{bmatrix} Y_1\\ Y_2\\ \vdots\\ Y_v\\ \end{bmatrix} = \begin{bmatrix} S_{1}\\ S_{2}\\ \vdots\\ S_{2t}\\ \end{bmatrix} X1X12X12tX2X22X22tXvXv2Xv2t Y1Y2Yv = S1S2S2t

且因为 X 1 , ⋯   , X v X_1,\cdots,X_v X1,,Xv是不同的非零值,所以范德蒙矩阵(Vandermonde matrix)的行列式非零,

d e t [ 1 1 ⋯ 1 X 1 X 2 ⋯ X v X 1 2 X 2 2 ⋯ X v 2 ⋮ X 1 v − 1 X 2 v − 1 ⋯ X v v − 1 ] ≠ 0 det \begin{bmatrix} 1 & 1 & \cdots & 1\\ X_1 & X_2 & \cdots & X_v\\ X_1^2 & X_2^2 & \cdots & X_v^2\\ \vdots\\ X_1^{v-1} & X_2^{v-1} & \cdots & X_v^{v-1}\\ \end{bmatrix} \neq 0 det 1X1X12X1v11X2X22X2v11XvXv2Xvv1 =0

于是只需前 v v v行,就可以计算出错误规模 Y 1 , ⋯   , Y v Y_1,\cdots,Y_v Y1,,Yv的唯一值。

Gorenstein–Zierler algorithm

  1. 输入字 c ( x ) + e ( x ) c(x)+e(x) c(x)+e(x),计算频域校验子 S j = e ( w j ) , j = 1 , ⋯   , 2 t S_j = e(w^j),j=1,\cdots,2t Sj=e(wj),j=1,,2t
  2. 根据 Peterson algorithm 计算得到的错误位置 X = [ X 1 , ⋯   , X v ] ∈ G F ( q ) v X=[X_1,\cdots,X_v] \in GF(q)^v X=[X1,,Xv]GF(q)v的值,由向量 X X X计算其他向量 X 2 , ⋯   , X v X^2,\cdots,X^v X2,,Xv,构建方阵 [ X , X 2 , ⋯   , X v ] T [X,X^2,\cdots,X^v]^T [X,X2,,Xv]T
  3. 计算上述方阵的逆矩阵,求解线性方程组得到错误值 Y 1 , ⋯   , Y v Y_1,\cdots,Y_v Y1,,Yv
  4. 根据 X i X_i Xi Y j Y_j Yj,恢复出 e ( x ) e(x) e(x),从而输出码字 c ( x ) ∈ C c(x) \in \mathscr C c(x)C

虽然在分析中选取了 j 0 = 1 j_0=1 j0=1,但上述算法对于任意的 j 0 j_0 j0都有效。

在Peterson algorithm中,可以先计算 r a n k ( M t ) rank(M_t) rank(Mt),由于 ∣ M v ∣ |M_v| Mv ∣ M t ∣ |M_t| Mt的余子式,因此 v ≤ r a n k ( M t ) v \le rank(M_t) vrank(Mt),对于 u > r a n k ( M t ) u>rank(M_t) u>rank(Mt) d e t ( M u ) det(M_u) det(Mu)不必挨个测试。对于 Λ ( x ) \Lambda(x) Λ(x)的零点,方法是遍历所有的 n n n个可能的 w j w^j wj,利用 Horner’s rule 依次计算 Λ ( w j ) = 0 \Lambda(w^j)=0 Λ(wj)=0是否成立,复杂度 O ( n v ) O(nv) O(nv)。也可以使用NTT变换,根据频域分量是否为 0 ∈ G F ( q m ) 0 \in GF(q^m) 0GF(qm)来确定零点。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值