前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >戈莱码

戈莱码

作者头像
hotarugali
发布2022-08-31 15:51:44
6190
发布2022-08-31 15:51:44
举报

1. 简介

194919491949 年,Marcel Golay 给出了四个线性码,分别记为

现在称这四个线性码为戈莱码。

为二元线性码,

​ 是三元线性码。无论从理论还是实用的角度看,戈莱码都是一类重要的线性码。

2. 二元戈莱码

2.1 定义

以 G 为生成矩阵的二元 [24,12] 线性码称为二元戈莱码

2.2 性质

  • 定理一:二元戈莱码

是自对偶的,即

  • 定理二

也是二元戈莱码

的生成矩阵,其中A 同定义中的矩阵。

  • 定理三:二元戈莱码

中每个码字的重量都能被 4 整除。

  • 定理四:二元戈莱码

​ 没有重量为 4 的码字。

  • 定理五:二元戈莱码

​ 是一个 [24,12,8] 线性码。

令 Ai表示二元戈莱码

中重量为 i 的码字的数目,0≤i≤24。通过编程可以计算得:

3. 二元戈莱码

3.1 定义

将二元戈莱码

的每个码字的最后一个分量去掉,得到一个新的二元码,称之为二元戈莱码

​。不难看出,

是一个二元 [23,12,7]线性码。

的所有码字排列成一个

阶矩阵,其中每一行是一个码字。可以证明,去掉这个矩阵中的任意一列所得到的二元 [23,12,7] 线性码是相互等价的。另外,二元戈莱码

也可以通过二元戈莱码

增加一个奇偶校验位得到。

3.2 性质

  • 定理六:二元戈莱码

是完备码。

表示二元戈莱码

中重量为 i的码字的数目,0≤i≤23通过编程可以计算得:

4. 三元戈莱码

4.1 定义

5. 三元戈莱码

5.1 定义

6. 实现

计算戈莱码的码字重量分布代码实现如下:

代码语言:javascript
复制
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]))

附录

  • 《编码理论基础》by 陈鲁生
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 简介
  • 2. 二元戈莱码
    • 2.1 定义
      • 2.2 性质
      • 3. 二元戈莱码
        • 3.1 定义
          • 3.2 性质
          • 4. 三元戈莱码
            • 4.1 定义
            • 5. 三元戈莱码
              • 5.1 定义
              • 6. 实现
              • 附录
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档