Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >戈莱码

戈莱码

作者头像
hotarugali
发布于 2022-08-31 07:51:44
发布于 2022-08-31 07:51:44
78500
代码可运行
举报
运行总次数:0
代码可运行

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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
快速入门numpy
Numpy(Numeric Python)是一个用python实现的科学计算的扩展程序库。包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。
小小詹同学
2019/11/12
9120
NumPy快速入门-- Less 基础/线性代数
即使0在索引列表中出现2次,第0个元素只会增加一次。这是因为Python要求“a + = 1”等同于“a = a + 1”
Michael阿明
2021/02/20
4970
NumPy快速入门-- Less 基础/线性代数
graph attention network(ICLR2018)官方代码详解(tensorflow)-稀疏矩阵版
之前非稀疏矩阵版的解读:https://www.cnblogs.com/xiximayou/p/13622283.html
西西嘛呦
2020/09/09
1.1K0
这100道练习题,带你玩转Numpy!
对于Numpy,我讲的不多,因为和Pandas相比,他距离日常的数据处理更“远”一些。
小F
2021/06/25
1.3K0
【Data Mining】机器学习三剑客之Numpy常用用法总结
玩数据分析、数据挖掘、AI的都知道这个python库用的是很多的,里面包含各种操作,在实际的dataset的处理当中是非常常用的,这里我做一个总结,方便自己看,也方便大家看,我准备做一个非常细致的分类,每个分类有对应的numpy常用用法,以后见到或者用到再一个个慢慢加进来,如果我还用csdn我就会移植update下去。
Crossin先生
2019/06/03
5600
Numpy
You cannot protect yourself from sadness without protecting yourself from happiness.
小闫同学啊
2019/07/18
1.1K0
Numpy
第12周Python学习周记
>>> b = a                                #没有创建新的对象
凌川江雪
2018/09/13
7800
第12周Python学习周记
【Data Mining】机器学习三剑客之Numpy常用用法总结
玩数据分析、数据挖掘、AI的都知道这个python库用的是很多的,里面包含各种操作,在实际的dataset的处理当中是非常常用的,这里我做一个总结,方便自己看,也方便大家看,我准备做一个非常细致的分类,每个分类有对应的numpy常用用法,以后见到或者用到再一个个慢慢加进来,如果我还用csdn我就会移植update下去。
接地气的陈老师
2019/12/09
6940
Numpy基础知识回顾
由于NumPy提供了一个简单易用的C API,因此很容易将数据传递给由低级语言编写的外部库,外部库也能以NumPy数组的形式将数据返回给Python。这个功能使Python成为一种包装C/C++/Fortran历史代码库的选择,并使被包装库拥有一个动态的、易用的接口。
timerring
2023/05/07
2.2K0
Numpy基础知识回顾
graph attention network(ICLR2018)官方代码详解(tensorflow)
邻接矩阵:(2708,2708),需要注意的是邻接矩阵是由nx.adjacency_matrix(nx.from_dict_of_lists(graph))获得,其中graph是引用关系组成的字典,比如:
西西嘛呦
2020/09/09
8280
线性码
线性码是一类非常重要的分组码,是讨论各种码的基础。线性码的编码方案和译码方案都非常简单。许多特殊的线性码都具有非常好的性质,绝大多数的已知好码都是线性码。
hotarugali
2022/08/30
2.3K0
线性码
NumPy Essentials 带注释源码 五、NumPy 中的线性代数
# 来源:NumPy Essentials ch5 矩阵 import numpy as np ndArray = np.arange(9).reshape(3,3) # matrix 可以从 ndarray 直接构建 x = np.matrix(ndArray) # identity 用于构建单位矩阵 y = np.mat(np.identity(3)) x ''' matrix([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
ApacheCN_飞龙
2019/02/15
8860
NumPy Essentials 带注释源码 五、NumPy 中的线性代数
numpy的相关使用
numpy是一个N维数组,类型是numpy.ndarray,ndarray中所有的元素类型必须一样,每个素组中都有一个shape(各维度大小的元组)和一个dtype(数组数据类型的对象)
用户8346838
2021/03/10
6690
Python图像处理常用代码,numpy教程
这里的代码是截取的我的代码片段,或许难以阅读,有不理解的地方欢迎交流 ---- 生成空列表及末尾添加 x=[] x.append(img_path[j]) 图像矩阵和一维数组转化 img_ndarray=numpy.asarray(img,dtype='float64')/256 #将图像转化为数组并将像素转化到0-1之间 data[d-1]=numpy.ndarray.flatten(img_ndarray) #将图像的矩阵形式转化为一维数组保存到data中 将矩阵中浮点数转化为int类型
李智
2018/08/03
9630
90个Numpy的有用的代码片段
21、创建一个自定义的dtype,将颜色描述为4个unisgned字节(RGBA)
deephub
2022/06/04
1.9K0
90个Numpy的有用的代码片段
NumPy之:NumPy简介教程
NumPy是一个开源的Python库,主要用在数据分析和科学计算,基本上可以把NumPy看做是Python数据计算的基础,因为很多非常优秀的数据分析和机器学习框架底层使用的都是NumPy。比如:Pandas, SciPy, Matplotlib, scikit-learn, scikit-image 等。
程序那些事
2021/05/11
1.4K0
【机器学习】--Python机器学习库之Numpy
NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。 NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。
LhWorld哥陪你聊算法
2018/09/13
9110
【机器学习】--Python机器学习库之Numpy
NumPy 1.26 中文官方指南(一)
NumPy 是 Python 中科学计算的基础包。 这是一个提供多维数组对象、各种派生对象(如掩码数组和矩阵)以及一系列用于数组快速操作的例程的 Python 库,包括数学、逻辑、形状操作、排序、选择、I/O、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等。
ApacheCN_飞龙
2024/04/26
1.4K0
NumPy 1.26 中文官方指南(一)
初探numpy
安装numpy 通过python pip安装numpy pip install numpy numpy ndarray对象 创建ndarray对象只需调用numpy的array函数即可 numpy.array(object , dtype = None , copy = True , order = None , subok = False , ndmin = 0) 参数 描述 object 数组或嵌套的数列 dtype 数组元素的数据类型 copy 对象是否需要复制 order 创建数组的样式,C为行方向
LRainner
2020/07/15
4750
Numpy基础操作学习笔记
NumPy:Numerical Python,即数值Python包,是Python进行科学计算的一个基础包,因此要更好理解和掌握Python科学计算包,尤其是pandas,需要先行掌握NumPy库的用法
python与大数据分析
2022/03/11
6780
相关推荐
快速入门numpy
更多 >
LV.1
这个人很懒,什么都没有留下~
作者相关精选
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验