问题标签 [reed-solomon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
error-correction - 我在哪里可以获得样本 Reed-Solomon 编码数据?
我想编写一个 Reed-Solomon 解码器并尝试改进性能。我在哪里可以找到附加了 Reed-Solomon 奇偶校验字节的示例数据?
我知道 Reed-Solomon 用于各种 1D 和 2D 条码,但我希望原始数据(字节数组)清楚地分离有效载荷和奇偶校验字节。
任何帮助表示赞赏。
reed-solomon - REED-SOLOMON 码的最大纠错能力是多少?
我发现 (255,223,32) RS 代码在哪里
每个符号为 8 位宽,是应用最广泛的一种,最多可纠正 16(255-223/2)个符号错误;如果一个符号的 8 位中至少有一位被破坏,就会发生符号错误,在最坏的情况下,甚至所有 8 位都可能被破坏。我有以下疑惑
1) 上述 RS 代码是否能够纠正所有 16 个错误符号,其中每个错误符号中的所有 8 位都已损坏?
2)(255,223,32)RS码的纠错能力为6.27%(16/255 *100)。如果我的代码是 (255,16,239) 我可以认为它具有 46.86% 的纠错能力吗?
我请求你帮助我解决这些疑问。
javascript - 小数据纠错
我正在阅读一些嘈杂的图像,并从中获取一些位(21 位)。
我只需要使用其中的 15 个,留给我21 - 15 = 6
一些工作。
我打算做的是将它用于校验和和纠错,但是,我开始挖掘网络,发现这Reed-Solomon
是最常用的(或不是?)。
我的问题是:由于我正在处理少量数据,是否有一个好的算法可以使用,这样它的处理成本就不会(那么)昂贵,并且可以用作校验和和纠错?(它将与 Node.js 一起运行)
谢谢,
伊万
error-correction - 我应该为 GF(32) 使用哪种纠错
我搜索了 Reed-Solomon、Turbo 和 LDPC 码之间的比较,但它们似乎都专注于效率。我对可用库、easyness 和 GF(32) 的商业许可更感兴趣,即只有 32 个符号的代码(可用的 Reed-Solomon 实现适用于 GF(256) 及更高版本)。
效率(速度)无关紧要。消息由 24 个符号组成。
对于这种与速度无关的情况,您能否对最著名的 Reed-Solomon、Turbo 和 LDPC 码进行快速比较?
谢谢。
c# - CCSDS Reed Solomon 编码
我正在做一个项目,我需要将 896 字节的数据编码为 128 字节的代码字。我的项目的所有规范均由 CCSDS 在本文中定义,位于 pdf 的第 15 页。 http://public.ccsds.org/publications/archive/101x0b3s.pdf 该文档中未明确指定的一些内容是 J=8、E=16 (255/223) 和 I=4。
我已经多次阅读了这篇文章(以及许多其他文章),但我似乎并没有完全理解发生了什么。我什至尝试过在 http://zxingnet.codeplex.com/SourceControl/latest#trunk/Source/lib/common/reedsolomon/GenericGF.cs找到的代码
它也不适合我。有没有人用这个工作过?我需要一些方向,因为我在磨了这么久之后感到迷茫。
对我来说最好的解决方案是如果我只是将信息错误地输入到 zxing 代码中。
python - 勘误表(擦除+错误)用于 Reed-Solomon 解码的 Berlekamp-Massey
我正在尝试在 Python 中实现一个 Reed-Solomon 编码器-解码器,支持对擦除和错误的解码,这让我发疯。
该实现目前支持仅解码错误或仅擦除,但不能同时解码两者(即使它低于 2*errors+erasures <= (nk) 的理论界限)。
从 Blahut 的论文(这里和这里)看来,我们只需要用擦除定位多项式初始化错误定位多项式,就可以隐式计算 Berlekamp-Massey 内的勘误定位多项式。
这种方法部分适用于我:当我有 2*errors+erasures < (nk)/2 时它可以工作,但实际上在调试之后它才有效,因为 BM 计算了一个错误定位器多项式,它得到与擦除定位器多项式完全相同的值(因为我们低于仅错误校正的限制),因此它通过 galois 域被截断,我们最终得到了擦除定位多项式的正确值(至少我是这样理解的,我可能是错的)。
但是,当我们超过 (nk)/2 时,例如如果 n = 20 且 k = 11,则我们可以纠正 (nk)=9 个擦除符号,如果我们输入 5 个擦除,那么 BM 就会出错。如果我们输入 4 个擦除 + 1 个错误(我们仍然远低于界限,因为我们有 2*errors+erasures = 2+4 = 6 < 9),BM 仍然会出错。
我实现的 Berlekamp-Massey 的确切算法可以在这个演示文稿中找到(第 15-17 页),但是可以在此处和此处找到非常相似的描述,在这里我附上数学描述的副本:
现在,我将这个数学算法几乎完全复制到了 Python 代码中。我想要扩展它以支持擦除,我尝试使用擦除定位器初始化错误定位器 sigma:
多项式和 GF256int 分别是 2^8 上的多项式和伽罗瓦域的通用实现。这些类是单元测试的,并且它们通常是错误证明的。Reed-Solomon 的其他编码/解码方法也是如此,例如 Forney 和 Chien 搜索。我在这里谈论的问题的快速测试用例的完整代码可以在这里找到:http ://codepad.org/l2Qi0y8o
这是一个示例输出:
在这里,擦除解码总是正确的,因为它根本不使用 BM 来计算擦除定位器。通常,其他两个测试用例应该输出相同的 sigma,但它们根本不会。
当您比较前两个测试用例时,问题来自 BM 的事实在这里是公然的:校正子和擦除定位器是相同的,但得到的 sigma 完全不同(在第二个测试中,使用了 BM,而在不调用仅擦除 BM 的第一个测试用例)。
非常感谢您对我如何调试它的任何帮助或任何想法。请注意,您的答案可以是数学或代码,但请解释我的方法出了什么问题。
/EDIT:仍然没有找到如何正确实现勘误表BM解码器(请参阅下面的答案)。赏金提供给任何可以解决问题(或至少引导我找到解决方案)的人。
/ EDIT2:愚蠢的我,对不起,我刚刚重新阅读了架构,发现我错过了作业中的更改L = r - L - erasures_count
......我已经更新了代码来解决这个问题并重新接受了我的答案。
dvb - 为什么在 DVB-T 中同时使用 Viterbi 和 Reed-Solomon?
据我了解,DVB-T数据包通过两个FEC系统,分别是Viterbi,数据丢失高达50%,RS,数据丢失高达10%。这些被称为外部和内部编码。
我无法理解第二个 RS 编码的必要性(在这种情况下,188 字节长的 MPEG-TS 数据包会额外增加 20 个字节)。
更具体地说,损坏的数据包会发生什么,例如 55%?50% 的错误是否由 Viterbi 解码器修复,剩余的 5% 由 RS 修复?
对不起我的愚蠢。
c++ - 如何使用ezpwd reed-solomon纠错库
我想生成 QR 码,为此我需要 Reed-Solomon 纠错编码和解码(以供将来阅读 QR 码)。我找到了这个商业图书馆:https ://github.com/pjkundert/ezpwd-reed-solomon ,我想试试。据说这个库适用于 C++ 和 javascript,我想在 C++ QT 下使用它。我从 github 下载了源代码,将 ezpwd 文件夹放在我的项目中,并尝试使用此示例代码:
但是会出现这个错误:
这是我第一次看到这样的东西,通常应该有一些头文件 .h 和源文件 .cpp 文件)。我正在搜索这个 rslib.h 但我从 github 下载的目录中没有这样的文件。我想我不知道每个人都知道的步骤,比如先构建这个库。请解释我应该怎么做才能使用这个库。
decoding - 如何检测 Reed-Solomon 码的错误?
我正在使用 (7,5) Reed-Solomon 纠错码。
我想我可以解码“纠正 1 个错误”或“找到 2 个错误位置”。
但是,有一个问题。我的代码找不到 2 个错误位置。
例如,消息为 1 3 5 2 1,RS 奇偶校验为 0 5。所以 RS 代码为 0513521。
之后,奇偶校验部分有两个错误。所以代码改为1113521。
我想找到这两个错误,但是我的解码器说答案是1113621。
我应该怎么办?
chunks - 分块文件的纠删码
是否有一个纠删码,可以通过(以某种方式)添加冗余块来应用于多个块(可能是 100 或 200,每个几百 kB)?
我听说过 Reed-Solomon,但它看起来不能用于大型数据集和多个块,我错了吗?
谢谢!