- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在测试来自 this repository 的 Reed Solomon 算法为了在外部更改某些内容时恢复信息。
假设:
m = bits per symbol
k = data
r = redundance
n = bits per block = r + k = 2^m - 1
t = error correction = (n - k) / 2
我可以使用以下参数编码和恢复信息:
m = 8
n = 255
r = 135
k = 120
t = 67
并且完美运行,我可以恢复 67 个错误。
我的假设是:
使用这些参数我得到错误:
Error - Failed to create sequential root generator!
这意味着库函数 make_sequential_root_generator_polynomial:
const std::size_t field_descriptor = 8; /* m = bit per symbol */
const std::size_t generator_polynomial_index = 120;
const std::size_t generator_polynomial_root_count = 170; /* root shall be equal to redundance */
const schifra::galois::field field(field_descriptor,
schifra::galois::primitive_polynomial_size06,
schifra::galois::primitive_polynomial06);
if (
!schifra::make_sequential_root_generator_polynomial(field,
generator_polynomial_index,
generator_polynomial_root_count,
generator_polynomial)
)
{
std::cout << "Error - Failed to create sequential root generator!" << std::endl;
return false;
}
我的问题是我不知道为什么算法会失败。我想我有一个概念问题,阅读该主题后出现错误 here和 here ,我不明白为什么不可能。
是否可以根据假设或理论说这是不可能的?
最佳答案
问题中的当前代码失败,因为它设置了
generator_polynomial_index = 120;
并且 120(索引)+170(根计数)> 255(字段大小),在
make_sequential_root_generator_polynomial()
generator_polynomial_index 通常设置为 0(第一个连续的根 = 1)或 1(第一个连续的根 = 场原语 = 2),除非目标是使用自倒数生成多项式。
即使在自倒数多边形的情况下,对于 170 个根,generator_polynomial_index = 128 - (170/2) = 43。将其设置为 120 异常高。
这可能会起作用,因为根是对 255 取模的连续幂,所以它们可以环绕,2^120, 2^121, ... , 2^253, 2^254, 2^255 =2^0, 2^256 = 2^1, ..., 因为这是为奇数根的自倒数多项式完成的 generator_polynomial_index = (255 - (number of roots/2)), 但也许其余的的代码有这个问题。
关于c++ - 使用 reed solomon 完全恢复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50523326/
我正在研究分布式文件系统架构和设计。我遇到的不少 DFS 通常具有以下架构: 名称节点或元数据服务器,用于管理数据 block / block 的位置以及文件系统的层次结构。 用于存储属于一个或多个逻
我一直在尝试实现 Reed Solomon 编码器,以生成系统形式的代码字,消息后跟校验符号。为了进行比较,我引用了这份白皮书:http://www.bbc.co.uk/rd/pubs/whp/whp
我正在从事一个我需要了解的对象存储项目 Reed Solomon纠错算法,我经历过这个 Doc作为入门和一些论文。 1. content.sakai.rutgers.edu 2. theseus.fi
Reed-Solomon 算法正在向输入中添加额外的数据,因此可以将此类损坏输入上的潜在错误(特定大小/数量)纠正回原始状态。正确的?这个算法是否也保护了这些不是输入的一部分但被算法使用的附加数据?如
我正在设置 Reed Solomon 库来纠正和检测传入的错误。为简单起见,让我们看一下 Reed Solomon 配置,其中 m(symbol size) : 8 [GF(256)] k(us
有人有任何详细介绍柯西-里德算法的引用资料吗?谷歌搜索 Cauchy-Reed Solomon 结果 cleversafe.org .尽管他们有一个基于 Cauchy Reed-Solomon 代码的
Reed-Solomon 纠错在存在丢失字节(或多个丢失字节)的情况下是否有效?例如,假设它是一个 (12,8) Reed Solomon 代码,那么理论上它应该能够纠正 2 个错误(如果位置已知,则
我正在测试来自 this repository 的 Reed Solomon 算法为了在外部更改某些内容时恢复信息。 假设: m = bits per symbol k = data r = redu
我正在寻找一种非常高效的内存效率(例如用于查找表等的最大 500 字节内存)的 Reed-Solomon 编码器实现,以便在嵌入式应用程序中使用? 我对具有 5 字节奇偶校验的 10 字节编码 blo
我正在尝试使用 Schifra Reed-Solomon error correcting code library在一个项目中。我对 Reed-Solomon 代码和 Galois 域的工作原理一无
在我的数据结构类(class)中,我想为我的最终项目创建一个二维码生成器。但是,我在理解其中的“格式化错误更正”部分时遇到了一些麻烦。我想使用 11 (L) 的纠错和 100 的掩码模式(每隔一行)。
我的任务是使用奇偶校验和方法和 Reed-Solomon Erasure Correction 对一些声音字节进行编码和解码。 .我已经完成了第一种方法(奇偶校验和)的编码,但需要帮助完成第二种方法,
对于一个小项目,我被要求用 Go 编写一个小型 QR 码编码器。成功完成分析和编码部分后,我现在正尝试使用以下包来解决纠错问题: https://github.com/klauspost/reedso
我目前正在与 reed-solomon 合作。据我所知,第一个纠错码总是与对数据字进行异或运算相同,因为范德蒙矩阵的第一行始终为 1 并且伽罗华域中的元素相加等同于异或运算。 现在我尝试使用 Reed
据我了解,DVB-T数据包经过两个FEC系统,分别是Viterbi,数据丢失率高达50%,RS,数据丢失率高达10%。这些被称为外部和内部编码。 我无法理解第二个 RS 编码的必要性(在这种情况下,1
我想通过嘈杂的 channel 传输二进制数据。 我读到一个很好的检测错误的 ECC 算法是 Reed-Solomon。问题是我不理解该算法的输入。 这是我对 zxing.net 的幼稚失败尝试: i
我想通过嘈杂的 channel 传输二进制数据。 我读到一个很好的检测错误的 ECC 算法是 Reed-Solomon。问题是我不理解该算法的输入。 这是我对 zxing.net 的幼稚失败尝试: i
有一个包 cPacket *pk 我怎样才能得到它的位表示?例如,以的形式 std::bitsetgetBitLength()> pk_bits; 我的最终目标是对数据包应用一种编码方案,即 Reed
我正在尝试在 Python 中实现一个 Reed-Solomon 编码器-解码器,支持对删除和错误的解码,这让我发疯了。 该实现目前仅支持解码错误或仅删除,但不能同时解码(即使它低于 2*errors
我是一名优秀的程序员,十分优秀!