# 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 的最大值为
在已解码的伽罗瓦数组中,每一行都表示对 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 - 码字长度正整数
码字长度,指定为
若 n 不等于
提示
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 - 校正误差个数
向量
数据类型: 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.