# block_decode
分组解码器
函数库: TyCommunication
# 语法
msg, = block_decode(code, n, k, "hamming/fmt", prim_poly)
msg, = block_decode(code, n, k, "linear/fmt", genmat, trt)
msg, = block_decode(code, n, k, "cyclic/fmt", genpoly, trt)
msg, = block_decode(code, n, k)
msg, err, = block_decode(...)
msg, err, ccode, = block_decode(...)
msg, err, ccode, cerr = block_decode(...)
# 可选输入
| 输入 | 默认值 |
|---|---|
| fmt | binary |
| prim_poly | gfprimdf(m) 其中 |
| genpoly | cyclpoly(n,k) |
| trt | 使用 syndtable 创建与方法的奇偶校验矩阵相关联的校正子解码表 |
# 描述
# 对于所有用法
解码功能旨在恢复使用纠错编码技术编码的消息。该技术和定义参数必须与用于编码原始信号的参数相匹配。
encode 函数解释了 n 和 k 的含义、fmt 的可能值以及代码和消息的可能格式。在阅读本节的其余部分之前,您应该熟悉这里描述。将解码函数与未由编码函数创建的输入参数代码一起使用可能会导致错误。
# 对于特定用法
msg, = block_decode(code, n, k, "hamming/fmt", prim_poly) 使用 hamming 方法解码代码。对于这种语法,对于大于或等于 3 的整数 m,n 必须具有
msg, = block_decode(code, n, k, "linear/fmt", genmat, trt) 解码代码,这是由
msg, = block_decode(code, n, k, "cyclic/fmt", genpoly, trt) 解码循环代码并尝试使用解码表trt纠正错误,其中 trt 是 2^(n-k)*n 矩阵。genpoly 是一个多项式字符向量或行向量,以升序给出代码的二进制生成多项式的系数。genpoly 的默认值为 cycleply(n, k) 。根据定义,[n, k] 循环码的生成多项式必须具有阶数 n-k,并且必须除
msg, = block_decode(code, n, k) 与 msg = block_decode(code, n, k, "hamming/binary") 相同。
msg, err = block_decode(...) 返回一个列向量 err,它提供了有关纠错的信息。如果代码是卷积码,则 err 包含解码决策过程中使用的度量计算。对于其他类型的代码,错误第 n 行中的非负整数表示在第 n 个消息字中纠正的错误数;负整数表示第 r 个字中的错误多于可以纠正的错误。
msg, err, ccode, = block_decode(...) 返回 ccode 中的正确代码。
msg, err, ccode, cerr = block_decode(...) 返回列向量 cerr,其含义取决于代码的格式:
如果代码是二进制向量,cerr 的第 n 行中的非负整数表示第 n 个码字中纠正的错误数;负整数指示在第 r 个码字中存在比可以校正的更多的错误。
如果代码不是二进制向量,cerr = err。
# 示例
使用汉明码进行编码和解码
设置码字长度和消息长度的值。
using TyCommunication
using TyMath
rng = MT19937ar(1234)
n = 15
k = 11
创建长度等于消息长度的随机二进制消息。
data = rand(rng, 0:1, k, 1)
对消息进行编码。
encData, = block_encode(data, n, k, "hamming/binary")
通过在第四位中引入错误来损坏编码的消息序列。
encData[4] = Int(Bool(encData[4]))
解码损坏的序列。观察解码器是否已正确恢复消息。
decData, = block_decode(encData, n, k, "hamming/binary")
numerr, = biterr(data, decData)
println(numerr)
ans = 0
使用线性分组码进行编码和解码
设置码字长度和消息长度的值。
using TyCommunication
using TyMath
rng = MT19937ar(1234)
n = 7
k = 3
创建长度等于消息长度的随机二进制消息。
data = rand(rng, 0:1, k, 1)
对消息进行编码。
pol = cyclpoly(n, k)
parma, t = cyclgen(n, pol)
genmat = gen2par(parma)
encData, = block_encode(data, n, k, "linear/binary", genmat)
通过在第三位中引入错误来损坏编码的消息序列。
encData[3] = Int(!Bool(encData[3]))
解码损坏的序列。观察解码器是否已正确恢复消息。
decData, = block_decode(encData, n, k, "linear/binary", genmat)
numerr, = biterr(data, decData)
println(numerr)
ans = 0
使用卷积码进行编码和解码
设置码字长度和消息长度的值。
using TyCommunication
using TyMath
rng = MT19937ar(1234)
n = 15
k = 5
创建长度等于消息长度的随机二进制消息。
data = rand(rng, 0:1, k, 1)
对消息进行编码。
gpol = cyclpoly(n, k)
parmat, = cyclgen(n, gpol)
trt = syndtable(parmat)
encData, = block_encode(data, n, k, "cyclic/binary", gpol)
分别通过在第四位和第七位中引入错误来损坏编码的消息序列。
encData[4] = Int(!Bool(encData[4]))
encData[7] = Int(!(Bool(encData[7])))
解码损坏的序列。观察解码器是否已正确恢复消息。
decData, = block_decode(encData, n, k, "cyclic/binary", gpol, trt)
numerr, = biterr(data, decData)
println(numerr)
ans = 0
# 输入参数
code - 输入编码 二进制向量 | n 列二进制矩阵 | [0, 2^n–1] 范围内的整数向量
以下列选项中的形式输入编码:
- 二进制列或行向量
- n 列二进制矩阵
范围内的整数列或行向量
n - 码字长度正整数
码字长度,以正整数形式输入。该函数将此值计算为
数据类型: Int
k - 消息长度正整数
消息长度,以正整数形式输入。该函数将此值计算为n-m,其中 m 必须大于或等于2。
数据类型: Int
codingMethod - 错误编码方法和格式字符串
错误编码方法和格式, 可输入选项如下所示:
"hamming/binary"
"hamming/decimal"
"linear/binary"
"linear/decimal"
"cyclic/binary"
"cyclic/decimal"
数据类型: String
prim_poly - 本原多项式gfprimdf(n-k)(默认)| 字符串 | 二进制向量
本原多项式,指定为:
字符串:通过列出系数来表示该多项式;
二进制向量:该向量按升序给出 prim_poly 的系数。
数据类型: String | Int
示例: "D^4+D+1" 表示本源多项式
示例: [1,1,0,0,1] 以升序表示本源多项式
依赖项: 使用此参数需要将 codingMethod 设置为 "hamming/binray" 或 "hamming/decimal" 时,此参数适用。
genmat - 生成矩阵k * n 数值矩阵
生成矩阵,以 k 乘 n 的数值矩阵形式输入。
数据类型: Int
依赖项: 使用此参数需要将 codingMethod 设置为 "linear/binray" 或 "linear/decimal" 时,此参数适用。
genpoly - 生成多项式cyclpoly(n,k)(n,k) | 二进制向量 | 字符串
生成多项式,以多项式字符串或向量形式输入,按二进制生成器多项式的升序给出系数。[n, k]循环码的 genpoly 值必须具有 n–k 阶,并除以
数据类型: String | Int
依赖项: 使用此参数需要将 codingMethod 设置为 "cyclic/binray" 或 "cyclic/decimal" 时,此参数适用。
trt - 解码表二进制矩阵
解码表,指定为
数据类型: Int
依赖项: 使用此参数需要将 codingMethod 设置为 "cyclic/binray", "cyclic/decimal", "linear/binray" 或 "linear/decimal" 时,此参数适用。
# 输出类型
msg - 解码消息二进制向量 | k 列二进制矩阵 | [0, 2^k–1] 范围内的整数向量
解码表,指定为
| 码字 | 输入消息格式 | 消息 |
|---|---|---|
| 二进制向量 | binary | 二进制向量 |
| n 列二进制矩阵 | binary | k 列二进制矩阵 |
| [0, 2^n–1] 范围内的整数向量 | decimal | [0, 2^k–1] 范围内的整数向量 |
数据类型: Int
err - 消息错误和纠正信息列向量
消息纠错信息,以整数列向量形式返回。向量的长度等于消息字的长度。向量元素有以下取值:
- 0:函数在相应的消息字中未检测到错误;
- 1:该函数检测并纠正了相应消息字中的错误;
- –1:解码算法在相应的消息字中检测到的错误多于可以纠正的错误。
数据类型: Int
ccode - 已纠正的码二进制向量 | n 列二进制矩阵 | [0, 2^n–1] 范围内的整数向量
已纠正的码,以如下形式返回:
- 二进制向量
- n 列二进制矩阵
- [0, 2^n–1] 范围内的整数向量
数据类型: Int
cerr - 码字纠错信息列向量
码字纠错信息,以整数列向量形式返回。向量的长度等于消息字的长度。此输出的含义取决于代码的格式。如果代码不是二进制向量,cerr 等于 err。如果代码是二进制向量,则此输出包含码字的错误检测信息。信息的提供方式与 err 中的相同。
数据类型: Int
# 算法
元素 dm(a,b) 等于 alph^((a-1)*(b-1))。
# 限制
此函数工作的 Galois 域必须具有 256 个或更少的元素。换句话说,alph 必须是 Galois 域