问题标签 [galois-field]
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.
matlab - GF(2) 上的 Gauss-Jordan 消元
我需要将奇偶校验矩阵H
(仅由 1 和 0 组成)从非标准形式转换为标准形式,即,将其表示为:
H
并Hsys
共享相同的维度:(n-k,n)
. I
上面对应于维度的单位矩阵(n-k)
。
Gauss-Jordan 消元法可以很好地解决这个问题。Matlab 有一个特定的命令 ,rref
用于此目的,但是在我们的例子中处理 GF(2) 时它不再有效。浏览互联网,我在 Github 中发现了一个潜在的合适的解决方案来克服这个缺点。然而,它并不总是奏效。
我也试过做HH = mod(rref(H),2)
,这根本不起作用,因为许多输出元素不是二进制的。
您可以在下面找到三个可以应用 Gauss-Jordan 消元(超过 GF(2))的非标准奇偶校验矩阵样本。由于应该始终有一种方法可以将任何矩阵安排为系统化,因此我需要一种适用于任何维度矩阵的方法。
这些第一个样本取自sid 在 Stackoverflow 中的帖子,尚未回复:
最后一个是维度矩阵,(50x100)
可以在我的 Dropbox 的这个链接中找到。
编辑于 21/06/2017
@Jonas 提出的解决方案在某些情况下有效,但在大多数情况下都无效,因为 H 矩阵似乎是奇异的。还有其他类似的方法吗?
预先感谢您,并致以最诚挚的问候。
java - 将 MATLAB 的 Reed Solomon 函数移植到 Java
我在 MATLAB 中使用 RS(160,80) 实现了一个简单的 RS 纠错方案。基本流程如下:
我生成一条长度为 80 且每个符号 8 位的消息,并生成长度为 160 的 RS 代码。
生成 RS 代码后,我添加/异或另一个代码长度为 160 的 Galois 字段。(该字段仅包含 00000000 和 00000001)。这是为了模拟在方案中添加错误。这会生成我的嘈杂代码。
现在,我采用另一个 GF 字段(与上面 [00000000 00000001] 的类型相似),它有 < 40 个符号,与我用来创建噪声的符号不同。我在上一步中将其添加/异或到生成的嘈杂代码中。
最后,我通过 RS 解码器运行它,该解码器检索我的原始消息。
我的 MATLAB 函数:
现在我一直在寻找将其移植到 Java 的方法。我查找了库,但我不确定如何准确移植我的特定用例。
Zxing - 仅将 QR 和 Aztec 代码作为输入
Backblaze - JavaReedSolomon - 修复代码擦除,这不是我产生的那种错误,输入是文件的形式(严重混淆这里发生的事情)
简单的 RS 纠错示例- 感觉更清晰,但只接受字符串作为输入。我觉得我可以修改它以适合我的用例,但我不确定如何添加噪音。我不确定如何通过此实现生成 RS(160, 80) 代码,也无法告诉如何生成自定义 GF 字段以添加噪声。
任何帮助将不胜感激(特别是如果您可以向我指出适合我的用例的实现,或者帮助修改上述可行的资源之一)
谢谢!
python - 使用 Python 3 在 gf(2^8) 中计算乘法逆的纯 Python 方法
我将如何在 Python 3 的 GF2^8 中实现乘法逆?我当前的功能如下所示:
python - 有限域:计算矩阵的逆
我正在使用 Python 中的有限域。我有一个包含多项式的矩阵,每个多项式都表示为一个整数。例如,多项式x^3 + x + 1
表示为 11,因为:
给定一个矩阵,例如:
如何在 Python 中计算矩阵的逆?我已经实现了以下函数(对于多项式,而不是多项式矩阵):add()
, sub()
, mul()
, div()
,inv()
haskell - Haskell中有限域的数据类型?
我试图通过编写一小组用于计算有限(伽罗瓦)域的函数来学习一点 Haskell。几年前,我为计算机代数系统 GNU Maxima(参见此处)编写了一个类似库的第一个版本,我想我会尝试用 Haskell 做同样的事情。
但是,我对数据类型感到困惑。对于有限域,您需要一个基素数 q(该域的特征)和一个不可约模 q 的多项式 p(x)。如果 p(x) 的次数为 n,则该域的阶数为 q^n,并且其元素都是次数为 n-1 或更小的多项式(模 q)。
我们可以将多项式表示为其系数的列表,因此该字段的元素只是 Z_q 和长度为 n 的元素的列表(或向量,如果您愿意)。加法是按分量模 q 完成的,乘法是模 p(x) 完成的。
我想如果我能得到数据类型和加法,剩下的就很简单了。我的第一次尝试是这样的:
幂元素是不必要的 - 毕竟它只是比不可约多项式的长度小一 - 但拥有它而不是必须计算它很方便。
然后我有我的附加功能:
这行得通,但不优雅,我敢肯定非常“非哈斯克尔式”。部分问题是我不知道如何将 Galois 字段的定义(或类型)与其元素分离。
我需要做的是为一个字段提供一个通用类型,并在此之上定义它的元素。毕竟,我可能想要对一个独立于其元素的字段做一些事情,例如生成标准基、查找原始元素、为原始元素生成对数表、生成随机元素等。
所以我想我的问题是:如何定义伽罗瓦域的泛型类型,使其元素的操作尽可能自然?
我已经阅读了许多关于定义数据类型、类等的页面,毫无疑问,其中之一包含了我的问题的解决方案。但我读得越多,我就越困惑。我想要的只是有人轻轻但坚定地指出我正确的方向。谢谢!
python - 在有限域上插值多项式
我想在有限域的点上使用 python 插值多项式,并得到一个具有该域系数的多项式。目前我正在尝试使用 SymPy 并专门插值(从sympy.polys.polyfuncs
),但我不知道如何强制插值发生在特定的 gf 中。如果没有,这可以用另一个模块来完成吗?
编辑:我对 Python 实现/库感兴趣。
matlab - 在matlab中求解一个伽罗瓦场矩阵方程
我有一个方程AX * C = AXB
,其中所有变量都是大小为 n 的方形 gf 矩阵,值为 0 或 1。AXB 和 AX 是已知的,而 C 应该被求解为 B 或它的等价物(应该有多个解)。因为 X 很可能不是规则的(等级 < n),所以不能计算 C 中的所有变量,我必须在求解后猜测其余的变量。
问题是:Matlab 可以解决这个方程(尽可能),并且比“手动”将方程分成 n^2 个方程更好吗?
我已经尝试告诉 matlab C 是一个符号,比如说 [8,8] 和 to solve AX*C==AXB
,但 solve 似乎不适用于 galois 领域。
任何有关如何执行此操作的提示将不胜感激。
matlab - 如何在 MATLAB 中计算 GF(2) 上的矩阵的左零空间?
假设我有一个超过 GF(2) 的矩阵,即一个二进制矩阵。现在如何在 2 的有限域上计算给定矩阵的左零空间?
MATLAB 是否为此提供了内置函数?
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);
结尾
javascript - galois 字段 galois_mul2 转换为 javascript?
我很难将 galois_mul2 函数转换为 javascript。
我在 c 中有以下功能
Javascript代码
如果我在 c 代码中给出输入 222 它的返回 167,而在我的代码中它的返回 423。
什么问题?