# rsdec


Reed-Solomon 解码器

函数库: TyCommunication

# 语法

decoded, = rsdec(code, n, k)
decoded, = rsdec(code,n,k,genpoly)
decoded, = rsdec(___,paritypos)
decoded, cnumerr = rsdec(...)
decoded, cnumerr, ccode = rsdec(...)

# 说明

decoded, = rsdec(code, n, k) 尝试用 [n, k] 里德-所罗门解码配合狭义发生器多项式解码 code 中的接收信号。code 是一个伽罗瓦符号数组,每个符号有 m 位。每一行 n 个元素的 code 表示一个损坏的系统码字,其中奇偶校验符号位于末尾,最左边的符号是最高有效符号。n 的最大值为 。如果 n 不是 , rsdec 假定 code 是缩短码字的损坏版本。

在已解码的伽罗瓦数组中,每一行都表示对 code 中相应行的解码尝试。如果 rsdec 在一行 code 中检测到超过 (n-k)/2 个错误,就会发生解码失败。在这种情况下,rsdec 通过从 code 每行末尾删除 n-k 个符号来形成相应的解码行。


decoded, = rsdec(code,n,k,genpoly) 与上述语法相同,但 genpoly 指定了码字的生成多项式。在这种情况下,genpoly 是一个伽罗瓦列向量,按照幂次递减的顺序列出生成多项式的系数。生成多项式必须有 n-k 阶。


decoded, = rsdec(___,paritypos) 指定了编码中的校验符号是加到消息之前或之后。paritypos 可以指定为 "beginning" 或 "end", 默认为 "end"。如果 paritypos 为 "beginning",解码失败会导致 rsdec 从该行的开始而不是结束处删除 n-k 个符号。


decoded, cnumerr = rsdec(...) 返回向量 cnumerr,其中每个元素都是相应码字行中被纠正错误的数量。cnumerr 中值为 -1 表示码字中该行解码失败。


decoded, cnumerr, ccode = rsdec(...) 返回 code 的修正版本 ccode。Galois 数组 ccode 的格式与 code 相同。如果某一行码字发生解码失败,则 ccode 中相应的行会修正。

# 示例

Reed-Solomon 解码

设置 RS 码参数。

using TyCommunication
m = 3
n = 2^m - 1
k = 3

生成三个由 3 位符号组成的码字。用 (7,3) RS 码编码消息。

msg = GF{m}.([2 7 3; 4 0 6; 5 1 1])
code = rsenc(msg, n, k)

在第一个码字上引入一个错误,在第二个码字上引入两个错误,在第三个码字上引入三个错误。

errors = GF{m}.([2 0 0 0 0 0 0; 3 4 0 0 0 0 0; 5 6 7 0 0 0 0])
noisycode = code + errors

解码损坏的码字。

rxcode, cnumerr = rsdec(noisycode, n, k)

纠正的错误数量与前两行引入的错误数量相匹配。在第三行中,纠正错误的数量是 -1,因为 (7,3) RS 码不能纠正两个以上的错误。

cnumerr
cnumerr = 3-element Vector{Int64}:
  1
  2
 -1

# 输入参数

code - 已编码的消息
GF{m} 上的 Galois 符号数组

接收到损坏的里德-所罗门编码消息,指定为所有值都大于或等于零的矩阵。已编码消息是一个伽罗瓦符号数组,每个符号有 m 个比特。每一行为包含 n 元素的出错的系统码字,其中奇偶校验符号位于末尾,最左侧的符号是最重要的符号。

数据类型: GF

n - 码字长度
正整数

码字长度,指定为 形式的整数,其中 m 是 3 到 16 之间的整数。n 的取值范围为 [7,65536]。

若 n 不等于 ,rsdec 假设码字是出错的截短 RS 码。

提示

n 与 k 的差必须是偶数。

数据类型: Int

示例: m = 4 对应 n = 15。

k - 消息长度
正整数

消息长度,指定为正整数。

数据类型: Int

genpoly - 生成多项式
GF{m} 上的 Galois 符号向量

生成多项式系数按降序排列,以伽罗瓦域(GF)向量形式输入。genpoly表示狭义生成多项式的系数,按降序排列。要使用默认的狭义生成器多项式,请不要输入该参数。

数据类型: GF

示例: GF3[1, 3, 1, 2, 3]

paritypos - 奇偶校验位置
"end" (默认) | "beginning"

奇偶校验位置,指定为 "end" 或 "beginning"。奇偶校验符号位于输出 Galois 数组中每个字的末尾或开头。

数据类型: String

# 输出参数

decoded - 已解码的消息
GF{m} 上的 Galois 符号数组

解码后的消息作为 GF{m} 上符号的 Galois 字段数组返回,每一行表示对码字中相应行进行解码的尝试。如果 rsdec 在一行码字中检测到超过 (n-k)/2 个错误,则发生译码失败,这种情况下,rsdec 仅通过从码字行末尾删除 n-k 个符号来形成相应的解码行。如果将 parityos 参数设置为 "beginning",解码失败会导致 rsdec 从行的开头而不是末尾删除 n-k 个符号。

数据类型: GF

cnumerr - 校正误差个数
向量
以向量的形式返回相应码字行中已更正的错误数。cnumerr 中的值 –1 表示该行码字解码失败。

数据类型: Int

ccode - 码字的更正版本
GF{m} 上的 Galois 符号数组

更正的码字版本,作为 Galois 符号数组返回。ccode 具有与输入码字相同的格式,如果某一行码字解码失败,则 ccode 中的包含该行码字的相应行不改变。

数据类型: GF

# 限制

n 和 k 的差值必须是偶数。n 必须在 3 ~ 65535 之间。

# 算法

rsdec 使用 Berlekamp-Massey 解码算法。有关该算法的信息,请参阅下面参考资料中列出的文献。

# 参考文献

[1] Wicker, S. B., Error Control Systems for Digital Communication and Storage, Upper Saddle River, NJ, Prentice Hall, 1995.

[2] Berlekamp, E. R., Algebraic Coding Theory, New York, McGraw-Hill, 1968.

# 另请参阅

rsenc | gf