194919491949 年,Marcel Golay 给出了四个线性码,分别记为
现在称这四个线性码为戈莱码。
为二元线性码,
是三元线性码。无论从理论还是实用的角度看,戈莱码都是一类重要的线性码。
以 G 为生成矩阵的二元 [24,12] 线性码称为二元戈莱码
是自对偶的,即
也是二元戈莱码
的生成矩阵,其中A 同定义中的矩阵。
中每个码字的重量都能被 4 整除。
没有重量为 4 的码字。
是一个 [24,12,8] 线性码。
令 Ai表示二元戈莱码
中重量为 i 的码字的数目,0≤i≤24。通过编程可以计算得:
将二元戈莱码
的每个码字的最后一个分量去掉,得到一个新的二元码,称之为二元戈莱码
。不难看出,
是一个二元 [23,12,7]线性码。
将
的所有码字排列成一个
阶矩阵,其中每一行是一个码字。可以证明,去掉这个矩阵中的任意一列所得到的二元 [23,12,7] 线性码是相互等价的。另外,二元戈莱码
也可以通过二元戈莱码
增加一个奇偶校验位得到。
是完备码。
令
表示二元戈莱码
中重量为 i的码字的数目,0≤i≤23通过编程可以计算得:
计算戈莱码的码字重量分布代码实现如下:
import os
import numpy as np
from itertools import combinations, product
G11 = np.array(
[[1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
[0, 1, 0, 0, 0, 0, 1, 0, 1, 2, 2],
[0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 2],
[0, 0, 0, 1, 0, 0, 1, 2, 1, 0, 1],
[0, 0, 0, 0, 1, 0, 1, 2, 2, 1, 0],
[0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1]], dtype=np.int64
)
G12 = np.array(
[[1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1],
[0, 1, 0, 0, 0, 0, 1, 0, 1, 2, 2, 1],
[0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 2, 2],
[0, 0, 0, 1, 0, 0, 1, 2, 1, 0, 1, 2],
[0, 0, 0, 0, 1, 0, 1, 2, 2, 1, 0, 1],
[0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 1, 0]], dtype=np.int64
)
G23 = np.array(
[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0]], dtype=np.int64
)
G24 = np.array(
[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1]], dtype=np.int64
)
q = 2
G = G23
cnt = np.zeros(G.shape[1]+1, dtype=np.int64)
coefs = range(q)
idxs = range(G.shape[0])
for coef in product(coefs, repeat=G.shape[0]):
val = np.zeros(G.shape[1], dtype=np.int64)
for i in range(len(coef)):
val = (val + (coef[i]*G[i])) % q
print(val)
cnt[np.count_nonzero(val)] += 1
for i in range(G.shape[1]+1):
print("A{} = {}".format(i, cnt[i]))
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有