python 实现 BCH 纠错码的方法

python 实现 BCH 纠错码的方法

BCH码是一类重要的纠错码,它把信源待发的信息序列按固定的κ位一组划分成消息组,再将每一消息组独立变换成长为n(n>κ)的二进制数字组,称为码字。如果消息组的数目为M(显然M>=2),由此所获得的M个码字的全体便称为码长为n、信息数目为M的分组码,记为n,M。把消息组变换成码字的过程称为编码,其逆过程称为译码。

  • 我这里考虑输入是 torch.Tensor的一个 只包含0 ,1 元素的张量
  • 对于输入是numpy或者0,1字符串的方法就更简单了,总之都先要将输入处理成为 0,1字符串,例如“1010”
  • 首先构造一个输入:
import randoma = [1 for i in range(16)]
b = [0 for i in range(16)]
a.extend(b)
random.shuffle(a)
a = np.array(a)
a = torch.Tensor(a)
  • 将 a 处理成为 0,1字符串:
a = str(a.numpy().tolist())[1:-1].replace('.0','').replace(',','').replace(' ','')
  • 构造添加BCH码的方法

  • 注意,这里我们使用的bch 生成多项式是bin(137),对于多项式,我们可以在这里查找对应的多项式
    在这里插入图片描述

  • 比如bch(255,155),即码字255bits,有效载荷155bits(就是你的有效信息),bch code长度为255+1-155=101

  • 但是对于bchlib是以字节为单位作为为输入的(长度为8的倍数)

  • 则bch code的长度为top(101/8)*8 = 104

import bchlibBCH_POLYNOMIAL = 137
BCH_BITS = 5def add_bch(wm):'''对于 str类型:a='1010' 或者 a='0b1010'bytearray(a, encoding='utf-8')= bytearray(b'0b1010')对于16进制表示的二进制 ecc''.join(format(x, '08b') for x in ecc)=str(1010)='1010''''full_wm_bytes = bytes(int(wm[i : i + 8], 2) for i in range(0, len(full_wm), 8)) #将bin转化为bytesa = bytearray(full_wm_bytes)print(f"{len(a)}:{a}")bch = bchlib.BCH(BCH_POLYNOMIAL, BCH_BITS)ecc = bch.encode(a)print(f"{len(ecc)}:{ecc}")ecc = ''.join(format(x, '08b') for x in ecc) #使用format函数,将bytearray中存储的十进制数转换为二进制print(f"{len(ecc)}:{ecc}")return torch.Tensor([int(i) for i in full_wm+ecc])
  • 构造BCH纠错的方法
# do error correct
def do_ec(wm):#56位BCH校验full_wm = str(wm.numpy().tolist())[1:-1].replace('.0','').replace(',','').replace(' ','')bch = bchlib.BCH(BCH_POLYNOMIAL, BCH_BITS)full_wm = bytes(int(full_wm[i : i + 8], 2) for i in range(0, len(full_wm), 8)) #将bin转化为bytesfull_wm= bytearray(full_wm)wm = full_wm[:-bch.ecc_bytes]#wm = bytearray(wm, encoding='utf-8')ecc = full_wm[-bch.ecc_bytes:]#ecc = bytes(int(ecc[i : i + 8], 2) for i in range(0, len(ecc), 8))bitflips = bch.decode_inplace(wm, ecc)if bitflips != -1:try:code = wm.decode("utf-8")print(code)except:passprint('Failed to decode')wm = ''.join(format(x, '08b') for x in wm)return torch.Tensor([int(i) for i in wm])
  • 测试 BCH 生成
  • 加入扰动和纠错
BCH_POLYNOMIAL = 137
BCH_BITS = 5bched = new_add_bch(a)
print(f"{len(bched)}:{bched}")bched[12:20] = 0. # add noise
wm = do_ec(bched)
print(f"{len(wm)}:{wm.detach.numpy()}")
  • 输出
32:01010000011001011011100110101011
32:bytearray(b'01010000011001011011100110101011')
5:bytearray(b'\xd7\x07\xe7|\x00')
40:1101011100000111111001110111110000000000
72:tensor([0., 1., 0., 1., 0., 0., 0., 0., 0., 1., 1., 0., 0., 1., 0., 1., 1., 0.,1., 1., 1., 0., 0., 1., 1., 0., 1., 0., 1., 0., 1., 1., 1., 1., 0., 1.,0., 1., 1., 1., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 0., 0., 1.,1., 1., 0., 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
32:01010000011000000000100110101011
  • 可以看到第一行和最后一行,分别对应着原始二进制串和添加扰动之后纠错的二进制串

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结构体引用_C/C++结构体完全攻略

结构体是一个由程序员定义的数据类型,可以容纳许多不同的数据值。在过去,面向对象编程的应用尚未普及之前,程序员通常使用这些从逻辑上连接在一起的数据组合到一个单元中。一旦结构体类型被声明并且其数据成员被标识,即可创建该类…

python 实现 CRC 冗余码的方法

python 实现 CRC 冗余码的方法 我这里考虑输入是 torch.Tensor的一个 只包含0 ,1 元素的张量对于输入是numpy或者0,1字符串的方法就更简单了,总之都先要将输入处理成为 0,1字符串,例如“1010”首先构造一个输入&#…

mysql root密码过期了_Mac下重置mysql的root密码

php中文网最新课程每日17点准时技术干货分享我的mysql版本 MYSQL V5.7.9,旧版本请使用:UPDATE mysql.user SET PasswordPASSWORD(新密码) WHERE Userroot;Mac OS X - 重置 MySQL Root密码密码太多记不住??你是否忘记了Mac OS 的My…

论文页眉奇偶页不同怎么设置_还在愁毕业论文的页眉页脚吗?

在文档中添加页眉和页脚能够很好的对相关信息进行展示或说明,在写论文的时候,设置页眉和页脚,能够让老师清楚的了解你的论文,但同时页眉和页脚的设置也是最让人头疼的,今天零壹学长就给大家详细的介绍页眉和页脚。了解…

Acquiring lock on /*/*/.vscode-server/bin/f80445acd5a3dadef24aa20916 vscode远程linux 服务器无法建立连接

1 删除 C:\Users\‘用户名’\.ssh\ 下的 know_hosts文件 2 使用其他的ssh工具(MobaXterm)远程连接目标服务器 首先使用指令:ps -aux |grep ‘自己的用户名’ 列出自己所有的运行的程序找到正在使用报错的文件/*/*/.vscode-server/bin/f8044…

账号管理工具_全新微信个人号管理工具能选择吗?为何这么说?

点击上方“蓝字”关注我们伴随着微信营销的重要性越来越高,很多企业的新媒体运营人员也开始把注意力都放到了微信账号的运营上,不仅是公众号的发展和运营,个人号在这个过程中也是非常重要的。相对于公众号和微信群,个人号的影响力…

护理等级分级标准及巡视时间_18项护理核心制度,都在这了

一、护理质量管理制度二、病房管理制度三、抢救工作制度四、分级护理制度五、护理交接班制度六、查对制度七、给药制度八、护理查房制度九、患者健康教育制度十、护理会诊制度十一、病房消毒隔离制度十二、护理安全管理制度十三、患者身份识别制度十四、患者差错、事故报告制度…

pytorch单机多卡的正确打开方式 以及可能会遇到的问题和相应的解决方法

pytorch 单机多卡的正确打开方式 pytorch 使用单机多卡,大体上有两种方式 简单方便的 torch.nn.DataParallel(很 low,但是真的很简单很友好)使用 torch.distributed 加速并行训练(推荐,但是不友好) 首先讲一下这两种方式分别的优缺点 nn.…

2接口详解_java集合【2】——— Collection接口详解

一、Collection接口简介二、Collection源码分析三、Collection的子类以及子类的实现3.1 List extend Collection3.2 Set extend Collection3.3 Queue extend Collection四、Collection和Map的辨析五、Collection和Collections的辨析六、总结一、Collection接口简介 collection在…

幅度响应怎么计算_四电平脉冲幅度调制(PAM4)信号的误码分析

- PAM4 是一种高效利用带宽传输串行数据的方法,所需的通道带宽仅为 NRZ 所需带宽的一半。用户需要具有即时数据访问能力的互联网络,这种不断增长的需求推动着以太网、64G光纤通道、CEI-56 G以及其他新一代数据中心网络链路向前发展。用户需要具有即时数据…

使用pytorch自定义DataSet,以加载图像数据集为例,实现一些骚操作

使用pytorch自定义DataSet,以加载图像数据集为例,实现一些骚操作 总共分为四步 构造一个my_dataset类,继承自torch.utils.data.Dataset重写__getitem__ 和__len__ 类函数建立两个函数find_classes、has_file_allowed_extension,…

python文件和数据的格式化_Python在文本文件中格式化特定数据

谢谢你们的帮助。作为一个新手,我最终得到的代码不是那么优雅,但它仍然起作用:)。在#open the file and create the CSV after filtering the input file.def openFile(filename, keyword): #defines the function to open the file. User to…

windows功能_这 12 个好用 Windows 软件,让你也能用上 macOS 的独占功能

在离开 macOS 这段时间,每天在家依赖 Windows To Go 为生,感到日常工作流程在四处冒烟。这才发现 macOS 的有些特性就如同空气一样,虽然毫无存在感,却不可缺失。关于「如何在 Windows 中实现 macOS 的 xxx」,随便上网一…

Batch Normalization、Layer Normalization、Group Normalization、Instance Normalization原理、适用场景和实际使用经验

Batch Normalization、Layer Normalization、Group Normalization、Instance Normalization原理、适用场景和使用经验 一、 简单介绍各种Normalization 先放一张来自Group Normalization原论文中的图,个人认为这个图很形象,以此图直观感受一下各种归一…

blockly自定义中文出问题_[BlocklyNukkit入门]#5自定义物品

自定义物品创建一个木棍item blockitem.buildItem(280, 0, 1);设置名字item.setCustomName("棍");设置信息,用分号隔开换行blockitem.setItemLore(item, "第一行;第二行;第三行;第四行");添加有序合成添加有序合成,设置G为橡木原木的键,G就代表原木.参数1…

收发一体超声波测距离传感器模块_芜湖低功耗超声波液位计物位计设备排名

KUS 超声波液位物位计 8种工作状态设置指导 1), 窗口常开模式(模拟量输出产品为正线性工作模式或者距离测量模式)2), 窗口常闭模式(模拟量输出产品为负线性工作模式或者液位测量模式)3), 单点常开模4), 单点常闭模式。5), 单点常开带大滞回区间模式6), 单点常闭带大滞回区间模式…

学术写作科研工具推荐

最近在写论文,然后过程中觉得一些工具可以提升效率,所以就简单总结一下,以后也会逐渐更新 Ccf deadlines:我该赶哪个ddl呢? 一些主要ccf A、B、C类会议的截稿日期都会被统计显示在此哦,看看你想投哪个会吧…

如何加声调口诀_声母韵母口诀顺口溜歌曲(怎么快速记住声母韵母)

家有一年级的小朋友,或者是孩子即将上小学的爸爸妈妈们,孩子的拼音学习进行得怎么样了?拼音是孩子进行语文学习的第一课,也是基础。但对很多小朋友来说真的是一道拦路虎。很多孩子由于一年级拼音基础不牢,到了四五年级…

pytorch model.train() 和model.eval() 对 BN 层的影响

model.train() BN做归一化时,使用的均值和方差是当前这个Batch的如果这时 track_running_statsTrue, 则会更新running_mean 和 running_var但是,running_mean 和 running_var不用在训练阶段 model.eval() BN 做归一化时,使用的…

联想用u盘重装系统步骤_详解联想如何使用u盘重装win10系统

联想是国内知名的品牌之一,很多朋友都购买了联想品牌的电脑,但是在使用的过程中难免会出现些磕磕碰碰的问题。所以今天小编就大家详细的介绍一下联想电脑使用u盘重装win10系统的方法。联系怎么使用u盘重装win10系统呢?最近有不少朋友在询问这…