本原RS码编译

本文详细解析了RS码(Reed-Solomon)的编译编码过程,包括生成本原多项式、编码步骤、通过Berlekamp算法进行译码,以及计算错误估值函数。以RS(7,3)为例,展示了从信息位到纠正多个错误的完整流程。
摘要由CSDN通过智能技术生成

性质

n = q − 1 n − k = 2 t k = q − 1 − 2 t d m i n = 2 t + 1 n=q-1\\ n-k=2t\\ k=q-1-2t\\ d_{min}=2t+1 n=q1nk=2tk=q12tdmin=2t+1

编译码步骤

编码

  1. 令α是 G F ( 2 m ) GF(2^m) GF(2m)的一个本原元,查表找 m m m次本原多项式 P ( x ) P(x) P(x),长 n = 2 m − 1 n=2m-1 n=2m1,信息位为 k k k,纠正 t = ( n − k ) 2 t=\frac{(n-k)}{2} t=2(nk)个错误的本原RS码生成多项式为
    g ( x ) = ( x + α ) ( x + α 2 ) … ( x + α 2 t ) g(x)=(x+α)(x+α^2)…(x+α^{2t}) g(x)=(x+α)(x+α2)(x+α2t)
  2. 待编码信息多项式 u ( x ) u(x) u(x)
    u ( x ) = u 0 x k − 1 + u 1 k − 2 + … + u k − 1 u(x)=u_0x^{k-1}+u_1^{k-2}+…+u_{k-1} u(x)=u0xk1+u1k2++uk1
    将待编码信息多项式升 x n − k x^{n-k} xnk位后除以 g ( x ) g(x) g(x),获得余式 r ( x ) r(x) r(x)
    联合 r ( x ) r(x) r(x) x n − k u ( x ) x^{n-k}u(x) xnku(x),获得码多项式 x n − k u ( x ) + r ( x ) x^{n-k}u(x)+r(x) xnku(x)+r(x),即
    c ( x ) = x 2 t u ( x ) + x 2 t u ( x ) m o d   g ( x ) c(x)=x^{2t}u(x)+x^{2t}u(x)mod\ g(x) c(x)=x2tu(x)+x2tu(x)mod g(x)

译码

  1. 由接收多项式 r ( x ) r(x) r(x)计算校正子 S = ( S 1 , S 2 , … , S 2 t ) S=(S_1,S_2,…,S_{2t}) S=(S1,S2,,S2t)
  2. 由校正子分量 S 1 , S 2 , … , S 2 t S_1,S_2,…,S_{2t} S1,S2,,S2t确定错误位置多项式 σ ( x ) σ(x) σ(x)。(Berlekamp迭代算法,见本原BCH码)
  3. 通过求解 σ ( x ) σ(x) σ(x)的根,确定错误位置数 β 1 , β 2 , … , β v β_1,β_2,…,β_v β1,β2,,βv
  4. 求解错误数值,并纠正 r ( x ) r(x) r(x)中的错误。

求解错误估值函数

定义 Z 0 ( x ) Z_0(x) Z0(x)
Z 0 ( x ) ≜ ∑ l = 1 v δ l β l ∏ i = 1 , i ≠ l v ( 1 − β i x ) Z 0 ( x ) = S 1 + ( S 2 + σ 1 S 1 ) x + ( S 3 + σ 1 S 2 + σ 2 S 1 ) x 2 + … + ( S v + σ 1 S v − 1 + … + σ v − 1 S v ) x v − 1 Z_0(x)\triangleq \sum^v_{l=1}δ_lβ_l\prod_{i=1,i≠l}^{v}(1-β_ix)\\ Z_0(x)=S_1+(S_2+σ_1S_1)x+(S_3+σ_1S_2+σ_2S_1)x^2+…\\+(S_v+σ_1S_{v-1}+…+σ_{v-1}S_v)x^{v-1} Z0(x)l=1vδlβli=1,i=lv(1βix)Z0(x)=S1+(S2+σ1S1)x+(S3+σ1S2+σ2S1)x2++(Sv+σ1Sv1++σv1Sv)xv1
δ i δ_i δi——错误数值
β i β_i βi——错误位置

Z 0 ( x ) Z_0(x) Z0(x)的次数为 v − 1 v-1 v1次。
Z 0 ( β k − 1 ) = δ k β k ∏ i = 1 , i ≠ l v ( 1 − β i β k ) Z_0(β_k^{-1})=δ_kβ_k\prod_{i=1,i≠l}^{v}(1-β_iβ_k) Z0(βk1)=δkβki=1,i=lv(1βiβk)
σ ( x ) σ(x) σ(x)求导得
σ ′ ( x ) = − ∑ l = 1 v β l ∏ i = 1 , i ≠ l v ( 1 − β i x ) σ'(x)=-\sum^v_{l=1}β_l\prod_{i=1,i≠l}^{v}(1-β_ix) σ(x)=l=1vβli=1,i=lv(1βix)
σ ′ ( β k − 1 ) = − β k ∏ i = 1 , i ≠ l v ( 1 − β i β k − 1 ) σ'(β_k^{-1})=-β_k\prod_{i=1,i≠l}^{v}(1-β_iβ_k^{-1}) σ(βk1)=βki=1,i=lv(1βiβk1)
在位置 β k β_k βk上的错误数值 δ k δ_k δk可由下式给出
δ k = − Z 0 ( β k − 1 ) σ ′ ( β k − 1 ) δ_k=\frac{-Z_0(β_k^{-1})}{σ'(β_k^{-1})} δk=σ(βk1)Z0(βk1)

例.RS(7,3)编译

编码

  1. 码长 n = 2 3 − 1 = 7 n=2^3-1=7 n=231=7,信息位 k = 3 k=3 k=3 t = 2 t=2 t=2。本原多项式 P ( x ) = x 3 + x + 1 P(x)=x^3+x+1 P(x)=x3+x+1,产生扩域 G F ( 2 3 ) GF(2^3) GF(23)
    幂表示多项式表示3维向量表示最小多项式
    00 000 000 000 x x x
    11 001 001 001 x + 1 x+1 x+1
    α α α α α α 010 010 010 x 3 + x + 1 x^3+x+1 x3+x+1
    α 2 α^2 α2 α 2 α^2 α2 100 100 100 x 3 + x + 1 x^3+x+1 x3+x+1
    α 3 α^3 α3 1 + α 1+α 1+α 011 011 011 x 3 + x 2 + 1 x^3+x^2+1 x3+x2+1
    α 4 α^4 α4 α + α 2 α+α^2 α+α2 110 110 110 x 3 + x + 1 x^3+x+1 x3+x+1
    α 5 α^5 α5 1 + α + α 2 1+α+α^2 1+α+α2 111 111 111 x 3 + x 2 + 1 x^3+x^2+1 x3+x2+1
    α 6 α^6 α6 1 + α 2 1+α^2 1+α2 101 101 101 x 3 + x 2 + 1 x^3+x^2+1 x3+x2+1
  2. 生成多项式 g ( x ) g(x) g(x)
    g ( x ) = ( x + α ) ( x + α 2 ) ( x + α 3 ) ( x + α 4 ) = x 4 + α 3 x 3 + x 2 + α x + α 3 g(x)=(x+α)(x+α^2)(x+α^3)(x+α^4)=x^4+α^3x^3+x^2+αx+α^3 g(x)=(x+α)(x+α2)(x+α3)(x+α4)=x4+α3x3+x2+αx+α3
  3. 假设发送八进制码字 ( α 5 , α 3 , α ) (α^5,α^3,α) (α5,α3,α),则待编码信息多项式升 x n − k x^{n-k} xnk后为
    x n − k m ( x ) = x 7 − 3 ( α 5 x 2 + α 3 x + α ) = α 5 x 6 + α 3 x 5 + α x 4 x^{n-k}m(x)=x^{7-3}(α^5x^2+α^3x+α)=α^5x^6+α^3x^5+αx^4 xnkm(x)=x73(α5x2+α3x+α)=α5x6+α3x5+αx4
    g ( x ) g(x) g(x) x n − k m ( x ) x^{n-k}m(x) xnkm(x)得余式 r ( x ) = α 6 x 3 + α 4 x 2 + α 2 x + 1 r(x)=α^6x^3+α^4x^2+α^2x+1 r(x)=α6x3+α4x2+α2x+1
    联合 x n − k m ( x ) x^{n-k}m(x) xnkm(x) r ( x ) r(x) r(x)得码多项式 x n − k m ( x ) + r ( x ) = α 5 x 6 + α 3 x 5 + α x 4 + α 6 x 3 + α 4 x 2 + α 2 x + 1 x^{n-k}m(x)+r(x)=α^5x^6+α^3x^5+αx^4+α^6x^3+α^4x^2+α^2x+1 xnkm(x)+r(x)=α5x6+α3x5+αx4+α6x3+α4x2+α2x+1,码字为 ( α 5 , α 3 , α , α 6 , α 4 , α 2 , 1 ) (α^5,α^3,α,α^6,α^4,α^2,1) (α5,α3,α,α6,α4,α2,1),即 ( 111 , 011 , 010 , 101 , 110 , 100 , 001 ) (111,011,010,101,110,100,001) (111,011,010,101,110,100,001)

译码

计算校正子

假设发送码字 ( α 5 , α 3 , α , α 6 , α 4 , α 2 , 1 ) (α^5,α^3,α,α^6,α^4,α^2,1) (α5,α3,α,α6,α4,α2,1),接收码字为 r = ( 1 , α 3 , α , α 6 , α , α 2 , 1 ) r=(1,α^3,α,α^6,α,α^2,1) r=(1,α3,α,α6,α,α2,1),则有接收码字
r ( x ) = x 6 + α 3 x 5 + α x 4 + α 6 x 3 + α x 2 + α 2 x + 1 r(x)=x^6+α^3x^5+αx^4+α^6x^3+αx^2+α^2x+1 r(x)=x6+α3x5+αx4+α6x3+αx2+α2x+1
计算校正子得
S 1 = r ( α ) = α 6 + α 8 + α 5 + α 9 + α 3 + α 3 + 1 = α 2 + 1 = α 6 S 2 = r ( α 2 ) = 1 S 3 = r ( α 3 ) = 0 S 4 = r ( α 4 ) = α S = ( S 1 , S 2 , S 3 , S 4 ) = ( α 6 , 1 , 0 , α ) S_1=r(α)=α^6+α^8+α^5+α^9+α^3+α^3+1=α^2+1=α^6\\ S_2=r(α^2)=1\\ S_3=r(α^3)=0\\ S_4=r(α^4)=α\\ \mathbf S=(S_1,S_2,S_3,S_4)=(α^6,1,0,α) S1=r(α)=α6+α8+α5+α9+α3+α3+1=α2+1=α6S2=r(α2)=1S3=r(α3)=0S4=r(α4)=αS=(S1,S2,S3,S4)=(α6,1,0,α)

确定错误位置多项式

应用Berlekamp迭代算法,得错误位置多项式为
σ ( x ) = 1 + x + α x 2 σ(x)=1+x+αx^2 σ(x)=1+x+αx2
迭代过程如下表

μ μ μ σ μ ( x ) σ^{μ}(x) σμ(x) d μ d_μ dμ l μ l_μ lμ μ − l μ μ-l_μ μlμ ρ ρ ρ
− 1 -1 1 1 1 1 1 1 1 0 0 0 − 1 -1 1
0 0 0 1 1 1 α 6 α^6 α6
0 0 0 0 0 0 − 1 -1 1
1 1 1 1 + α 6 x 1+α^6x 1+α6x
α 4 α^4 α4 1 1 1 0 0 0 0 0 0
2 2 2 1 + α x 1+αx 1+αx α α α 1 1 1 1 1 1 0 0 0
3 3 3 1 + α x + α 2 x 2 1+αx+α^2x^2 1+αx+α2x2 α 4 α^4 α4 2 2 2 1 1 1 2 2 2
4 4 4 1 + x + α x 2 1+x+αx^2 1+x+αx2

纠错

求得错误位置多项式 σ ( x ) = 1 + x + α x 2 σ(x)=1+x+αx^2 σ(x)=1+x+αx2的根为 α , α 5 α,α^5 αα5,得错误位置为 x 6 , x 2 x^6,x^2 x6,x2
Z 0 ( x ) = S 1 + ( S 2 + σ 1 S 1 ) x + ( S 3 + σ 1 S 2 + σ 2 S 1 ) x 2 + … + ( S v + σ 1 S v − 1 + … + σ v − 1 S v ) x v − 1 = α 6 + ( 1 + α 6 ) x + ( 0 + 1 + α ⋅ α 6 ) x 2 = α 6 + α 2 x   Z 0 ( α − 6 ) = α 4 Z 0 ( α − 2 ) = α 2   σ ′ ( α − 6 ) = α 6 ( 1 + α 2 α − 6 ) = 1 σ ′ ( α − 2 ) = α 2 ( 1 + α 6 α − 2 ) = 1 Z_0(x)=S_1+(S_2+σ_1S_1)x+(S_3+σ_1S_2+σ_2S_1)x^2+…\\+(S_v+σ_1S_{v-1}+…+σ_{v-1}S_v)x^{v-1}\\ =α^6+(1+α^6)x+(0+1+α·α^6)x^2\\ =α^6+α^2x\\\ \\ Z_0(α^{-6})=α^4\\ Z_0(α^{-2})=α^2\\\ \\ σ'(α^{-6})=α^6(1+α^2α^{-6})=1\\ σ'(α^{-2})=α^2(1+α^6α^{-2})=1 Z0(x)=S1+(S2+σ1S1)x+(S3+σ1S2+σ2S1)x2++(Sv+σ1Sv1++σv1Sv)xv1=α6+(1+α6)x+(0+1+αα6)x2=α6+α2x Z0(α6)=α4Z0(α2)=α2 σ(α6)=α6(1+α2α6)=1σ(α2)=α2(1+α6α2)=1
得到位置 x 6 , x 2 x^6,x^2 x6,x2上的错误数值为
e 6 = − Z 0 ( a − 6 ) σ ′ ( α − 6 ) = α 4   e 2 = − Z 0 ( a − 2 ) σ ′ ( α − 2 ) = α 2 e_6=\frac{-Z_0(a^{-6})}{σ'(α^{-6})}=α^4\\\ \\ e_2=\frac{-Z_0(a^{-2})}{σ'(α^{-2})}=α^2 e6=σ(α6)Z0(a6)=α4 e2=σ(α2)Z0(a2)=α2
于是错误模式为
e ( x ) = α 4 x 6 + α 2 x 2 e(x)=α^4x^6+α^2x^2 e(x)=α4x6+α2x2
与接收码字 r ( x ) r(x) r(x)相加得解。

RS和卷积是两种常用的错误纠正。级联两种编码可以提高纠错能力。下面是使用MATLAB编写的RS和卷积级联的简单示例代: 1、首先定义RS编码和解函数。这里假设RS的参数为(n, k),n为字长度,k为信息位长度。 % RS编码函数 function codeword = rs_encode(msg, n, k) % 使用MATLAB内置的通信工具箱函数bchenc对信息位进行RS编码 codeword = bchenc(msg, n, k); end % RS函数 function decoded_msg = rs_decode(received, n, k) % 使用MATLAB内置的通信工具箱函数bchdec对接收到的字进行RS decoded_msg = bchdec(received, n, k); end 2、接下来定义卷积编码和解函数。假设卷积率为1/2。 % 卷积编码函数 function codeword = conv_encode(msg) % 定义卷积的生成多项式 trellis = poly2trellis(3, [7 5], 7); % 使用MATLAB内置的通信工具箱函数convenc对信息位进行卷积编码 codeword = convenc(msg, trellis); end % 卷积函数 function decoded_msg = conv_decode(received) % 定义卷积的生成多项式 trellis = poly2trellis(3, [7 5], 7); % 使用MATLAB内置的通信工具箱函数vitdec对接收到的字进行卷积 decoded_msg = vitdec(received, trellis, 12, 'cont', 'hard'); end 3、最后,在主函数中级联调用RS和卷积编码和解函数。 % 定义信息位 msg = [0 1 1 0 1 0 1]; % RS编码 rs_codeword = rs_encode(msg, 15, 7); % 卷积编码 conv_codeword = conv_encode(rs_codeword); % 假设接收到的字存在误差 received = conv_codeword; % 卷积 rs_decoded_codeword = conv_decode(received); % RS decoded_msg = rs_decode(rs_decoded_codeword, 15, 7); % 输出解结果 disp(decoded_msg); 这段代实现了RS和卷积级联的简单示例。可以根据实际需求对长、信息位长度和生成多项式进行调整,并根据需要加入更复杂的信道模型和误率等评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值