问题标签 [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.

0 投票
0 回答
191 浏览

qr-code - 如何在纠错解码过程之前获取 zxing 二维码解码器生成的比特流(二进制字符串)?

我想计算两个不同二维码的 BER(误码率)。在 ZXING 提供的解码器中找不到变量,该变量在纠错解码过程之前存储了来自解码器的比特流。

0 投票
1 回答
49 浏览

arrays - 在 numpy python 2.7 中制作图像数组

我想要一组图像。例如,我将有一个 4x1 数组(下面称为 imslice),其中每个元素都是一个 nxnx3 图像。

我想这样做是为了对我的 imslice 矩阵进行矩阵运算,就像它是一个普通矩阵一样。例如,将它乘以一个常规的 2x2 矩阵(称为 V)。当我现在尝试执行此操作时,我得到一个 5 维数组,当我尝试将它乘以我的 V 矩阵时,我得到的错误是尺寸不一致(即使在数学上很好,因为内部尺寸一致。)

代码:

------------------------------------------------------- ValueError Traceback(最近一次调用最后一次)

在 ()

6 V形

7

----> 8 np.dot(np.transpose(V), imslice)

9

ValueError:形状(6,4)和(4,178,178,3)未对齐:4(dim 1)!= 178(dim 2)

0 投票
0 回答
184 浏览

reed-solomon - 伽罗瓦域上的里德所罗门编码

我正在通过在 Galois 字段 16 (2^16) 上运行的 Reed Solomon 编码器传递一个密钥(长度为 16 个 ASCII 字符 = 128 位)。

我的问题是:这个密钥应该被视为 128 位还是 256 位?

我在这里迷路了,因为我知道 ASCII 字符 = 8 位,所以 16 个 ASCII 字符 = 128 位。

我读过一篇文章,它说一旦你通过 GF(16) 传递密钥,那么它将是 256,而不是 128,我应该只传递一个带有 8 个 ASCII 字符的密钥。这个对吗?请参阅下面我使用的函数,其中我使用了 Matlab 通信工具箱函数 code = errorCorrectingCode(data, LENGTH) % ERRORCORRECTINGCODE 获取输入数据并通过 Reed-Solomon Code 运行它 % 请参见以下链接: % http://www. mathworks.com/help/comm/ref/encode.html % >>> 示例:rsdec(rsenc(gf([1 2 3 ; 4 5 6],3),7,3),7,3);

结尾

0 投票
0 回答
76 浏览

tcp - 使用端口敲击在浏览器和本地运行的服务之间可靠地传递信息

目标

允许浏览器与本地运行的服务交换信息。允许服务找出运行浏览器的用户(Windows 中的登录会话)。如果可能,请避免在机器上存储 TLS 证书和私钥。奖励任务:为卡巴斯基或 Sophos 等防病毒软件代理所有 TCP 连接的设置提供解决方案。

故事

底层操作系统是 Windows,但可以是任何现代操作系统。系统中有一个守护进程正在运行。对于 Windows,这是一项 Windows 服务。Internet 浏览器从远程服务器加载了一个 JavaScript,它将数据发送到守护进程。守护程序没有 HTTP/HTTP 服务器。相反,守护进程打开 N 个端口并侦听传入连接。N 是低两位数。

JS 向 N 范围内的一组选定端口 K 发起 TCP 连接。在当前实现中,JS 尝试从 127.0.0.1:port-number 加载 JS 脚本。守护进程接受连接并立即关闭它(有点敲门)。守护进程从 JS “敲门”的端口中恢复数据。

在当前实现中,后端选择一个唯一的端口元组,例如 3 个端口组合。元组是标识浏览器会话的键。该服务收集“敲门”——特定操作系统进程访问的端口。该服务使用收集的端口查询后端。

该解决方案的目标之一是避免在服务中实施 HTTP/HTTPS 服务器并节省 SSL 证书的维护。

问题

  • JS 连接端口的顺序没有定义。具体来说,两个浏览器可以同时运行敲击会话。
  • 该服务可能无法打开范围 N 中的某些端口,因为这些端口很忙。

顺序并不重要,因为服务器从范围 N 中选择了一个唯一的组合。我需要系统容忍丢失的端口。我正在考虑选择多个元组并使用多个范围 N。

问题

我怎样才能采用FEC来解决这个问题?设计有意义吗?

0 投票
1 回答
242 浏览

hdfs - Hadoop 3.0 纠删码 - 确定可接受的节点故障数?

在 hadoop 2.0 中,默认的复制因子是 3。可接受的节点故障数是 3-1=2。
因此,在 100 个节点的集群上,如果一个文件被分成 10 个部分(块),复制因子为 3,则所需的总存储块为 30。如果包含块 X 及其副本的任何 3 个节点失败,则文件为不可恢复。即使集群有 1000 个节点或文件被分成 20 个部分,集群上 3 个节点的故障仍然可能对文件造成灾难性影响。

现在步入hadoop 3.0。
使用纠删码,正如 Hadoop 所说,它提供了相同的持久性和 50% 的存储效率。并且基于 Reed-Solomon 方法的工作原理(即对于 k 个数据块和 n 个奇偶校验块,至少应可访问 (k+n) 个块中的 k 个,以使文件可恢复/可读)
所以对于上面的同一个文件——有10个数据块,为了将数据效率保持在50%,可以添加5个奇偶校验块。因此,从 10+5 个块中,至少有 10 个块应该可供文件访问。而在 100 个节点的集群上,如果 15 个块中的每一个都存储在一个单独的节点上,那么如您所见,总共 5 个节点故障是可以接受的。现在在 1000 个节点的集群上存储相同的文件(即 15 个块)不会对可接受的节点故障的数量产生任何影响 - 它仍然是 5。
但这里有趣的部分是 - 如果相同的文件(或另一个文件)被分割分成 20 个块,然后添加 10 个奇偶校验块,然后在 100 个节点的集群上总共保存 30 个块,可接受的节点故障数为 10。

我想在这里说明的一点是 -
在 hadoop 2 中,可接受的节点故障数是 ReplicationFactor-1,并且显然基于复制因子。这是一个集群范围的属性。

但是在 hadoop 3 中,假设存储效率固定为 50%,那么对于不同的文件来说,可接受的节点故障数似乎是不同的,具体取决于它被分成的块数。

那么,如果上述推论正确,任何人都可以发表评论吗?以及如何确定任何集群可接受的节点故障?

(而且我不想让它在上面变得复杂,所以没有讨论只有一个块的文件的边缘情况。但我猜该算法将足够聪明,可以按原样复制它或使用奇偶校验数据复制它,以便数据持久性设置得到保证。)

编辑: 这个问题是我对 EC 提出的一系列问题的一部分 - 其他问题如下 -
Hadoop 3.0 擦除编码:对 MR 作业性能的影响?

0 投票
2 回答
462 浏览

java - pdf417 条码创建,Reed Solomon 纠错码字在 python 和 JAVA 之间的差异

我使用 Python 库 pdf417gen 创建了一个 pdf417 条形码。

条形码是字符串“M1LONG”的图形表示。条码有两个数据列,Reed Solomon 纠错安全级别设置为“1”。这表明在输入八个数据码字的情况下,纠错码字的数量应该是四个。

Python 输出将 D07 到 D00 的数据代码字显示为{8, 389, 902, 11, 900, 344, 396, 900}. python 将 C03 到 C00 的纠错码字列为{718, 801, 313, 877}. 这是用于生成所有代码字的 Python:

纠错码字是使用多项式、伽罗瓦域算术和模数 929 的补码生成的,这是 pdf417 系统可能的码字数。计算使用许多因素来简化过程。对于安全级别 1,建议的因子数为 4。因素是522,568,723,809

http://grandzebu.net/informatique/codbar/pdf417coef.txt

问题是这样的。我尝试使用从http://grandzebu.net/informatique/codbar-en/pdf417.htm获得的 JAVA 伪代码重新创建错误代码字

我编写了一个 JAVA 程序来尝试生成与上述 Python 软件相同的代码字,但它不会生成相同的错误代码字。

JAVA程序编译并运行,数学在我未经训练的眼中看起来不错,但产生的错误代码不一样。这是我的 JAVA,JAVA 变量被称为与 Python 相同,以便于比较两个程序。

我将不胜感激知道 JAVA 代码的问题是什么,它阻止它生成与库 pdf417gen 中包含的 python 程序相同的错误代码字。

0 投票
1 回答
257 浏览

c++ - 使用 reed solomon 完全恢复数据

我正在测试此存储库中的 Reed Solomon 算法,以便在外部更改某些内容时恢复信息。

假设:

我可以使用以下参数编码和恢复信息:

并且完美运行,我可以恢复 67 个错误。

我的假设是:

  • 只有数据会损坏,没有冗余。
  • 获得完全恢复 n = 3 * k --> r = 2 * k。
  • 那么 n = 255 所以在这种情况下 r 应该是 170。
  • 所以我必须有 GF(2^m) 和 RS [n, k, n - k + 1] 使用的是 GF(2^8) 和 RS [255, 85, 171]

使用这些参数我得到错误:

这意味着库函数 make_sequential_root_generator_polynomial:

我的问题是我不知道为什么算法会失败。我想我有一个概念问题,在阅读了这里这里的主题后出现了错误,我不明白为什么不可能。

是否可以根据假设或理论说这是不可能的?

0 投票
0 回答
58 浏览

error-handling - FEC 和修复丢弃/插入位

据我了解,大多数 FEC 算法,例如 Reed-Solomon 编码,旨在专门修复数据流中的位翻转。此外,如果您知道发生擦除或插入的位置,RS 也可以修复这些流。我的问题是 - 人们实际上如何修复可能发生位/字节下降的非常嘈杂的数据流?是否有可以使用的特定算法,例如修改后的 RS 代码?

我们在一个很长(数千英尺)的多点 rs-485 网络上有一个打包的数据流。我们向一个节点发送一个请求,它以一个多千字节的响应进行响应。由于阻抗不匹配、长电缆和节点收发器的三态效应,我们在线路上看到了物理电容效应,数据可能会被随机丢弃或插入。我们应该在整个电缆长度上放置强大的上拉/下拉电阻,这是一个疏忽。Rs-485 网络的长度可能非常复杂。我们想知道我们是否可以使用某种纠错算法在软件中以某种方式修复这种影响,而不必重新启动硬件(这将非常昂贵并且影响调度)。

0 投票
1 回答
125 浏览

python - Reedsolomon 多项式系数解码返回空字节数组

我正在尝试一种密码学算法。这个过程应该很简单:

msg = b'Sample' 它通过传递 IPI 点来保护消息,比方说:ipi = np.array([1,2,3,4,5])

通过 RSCodec 对消息进行编码,生成多项式系数。通过多项式传递 IPI 点,它会在过程结束时生成一个保险库。

这是成功的。它生成一个 vault (N,2) 形的 np.int64 矩阵,表示一组 x 和 y 坐标。

但是,在解码消息时会出现问题。因此,为了恢复消息,我所要做的就是。

  1. 对应的 y - 坐标查找每个和 x 坐标。这将返回一组 (x,y) 表示为 np.64 矩阵。

  2. 通过使用步骤 1 中生成的点,我尝试通过计算拉格朗日插值多项式系数对其进行解码来恢复多项式系数。

  3. 最后,既然我得到了多项式系数,我再次通过 RScodec 对其进行解码,希望能够取回已解码的消息。但是,我反而变得空虚了。一个简单的rs.decode()

所以我的片段的一个缩短片段将是:

解码

对于编码它非常简单:

这是我测试的一些日志。

我只是为了学习而编码。我究竟做错了什么?

到目前为止我尝试了什么:

  1. 切换到 unireedsolomon。
  2. 直接使用 reedsolo 库(不使用 RSCodec) -import reedsolo as rs
  3. 校准erase_pos
0 投票
0 回答
203 浏览

javascript - 如何使用 Ronomon Reed-Solomon 库将文件分割成块

我正在尝试使用Ronomon/Reed-Solomon JavaScript Library,我想根据数据分片和奇偶校验分片的数量来分块文件。任何演示使用 ReedSolomon.encode 的示例都会对我有所帮助。我的代码如下:

编码.js

客户端.js

我是 JavaScript 的新手,因此无法拆分文件,请帮忙。