use*_*460 1 matlab signal-processing communication linear-algebra galois-field
我有一个二进制矩阵 A(仅1和0),以及D伽罗瓦域中的矢量(256).矢量C计算如下:
C = (A^^-1)*D
Run Code Online (Sandbox Code Playgroud)
其中A^^-1表示矩阵的逆矩阵A中GF(2),*是乘法运算.结果向量C必须在GF(256).我试着在Matlab中做到这一点.
A= [ 1 0 0 1 1 0 0 0 0 0 0 0 0 0;
1 1 0 0 0 1 0 0 0 0 0 0 0 0;
1 1 1 0 0 0 1 0 0 0 0 0 0 0;
0 1 1 1 0 0 0 1 0 0 0 0 0 0;
0 0 1 1 0 0 0 0 1 0 0 0 0 0;
1 1 0 1 1 0 0 1 0 1 0 0 0 0;
1 0 1 1 0 1 0 0 1 0 1 0 0 0;
1 1 1 0 0 0 1 1 1 0 0 1 0 0;
0 1 1 1 1 1 1 0 0 0 0 0 1 0;
0 0 0 0 1 1 1 1 1 0 0 0 0 1;
0 1 1 1 1 0 1 1 1 0 1 1 1 0;
0 0 0 1 0 0 0 1 0 0 0 0 0 0;
0 0 1 0 0 0 0 1 0 0 0 0 0 0;
1 1 1 1 0 0 0 0 0 0 0 0 0 0]
D=[0;0;0;0;0;0;0;0;0;0;103;198;105;115]
A=gf(A,1);
D=gf(D,8); %%2^8=256
C=inv(A)*D
%% The corrected result must be
%%C=[103;187;125;210;181;220;161;20;175;175;187;187;220;115]
Run Code Online (Sandbox Code Playgroud)
但是,对于上面的代码,我无法实现我的预期结果
C=[103;187;125;210;181;220;161;20;175;175;187;187;220;115]
Run Code Online (Sandbox Code Playgroud)
它会产生错误
Error using * (line 14)
Orders must match.
Run Code Online (Sandbox Code Playgroud)
你能帮我实现预期的结果吗?
错误
使用*时出错(第14行)
订单必须匹配.
出现是因为Matlab的不支持应用标准的数学运算(+,*,.*,.^,\,等),以不同的顺序的伽罗瓦域,GF(2)和GF(256).逆操作inv(A)是一个有效的操作,如果你自己执行它,如@ Ander Biguri 所示,它将成功并生成in 的倒数.当你试图乘以时,你的计算会失败,因为这些伽罗瓦域的次序不匹配.AGF(2)inv(A)D
在这个例子中,没有必要明确地定义A为2阶的伽罗瓦域,GF(2)因为乘法GF(256)发生在GF(2).那是1 + 1 = 0.
如果我们这样修改,对于创建伽罗华域代码A来
A = gf(A, 8);
Run Code Online (Sandbox Code Playgroud)
然后我们可以表演
C = inv(A)*D
Run Code Online (Sandbox Code Playgroud)
哪个产生
C = GF(2^8) array. Primitive polynomial = D^8+D^4+D^3+D^2+1 (285 decimal)
Array elements =
103
187
125
210
181
220
161
20
175
175
187
187
220
115
Run Code Online (Sandbox Code Playgroud)
C因此,GF(256)并产生预期的结果.