欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

python 实现 CRC 冗余码的方法

发布时间:2024/8/23 113 豆豆
生活随笔 收集整理的这篇文章主要介绍了 python 实现 CRC 冗余码的方法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

python 实现 CRC 冗余码的方法

  • 我这里考虑输入是 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(' ','')
  • 构造添加CRC码的方法
def add_crc(wm):a = bytes(wm, encoding='utf-8')print(f"{len(a)}:{a}")a = binascii.crc32(a)a = bin(a)a = str(a)[2:]padding = 32-len(a)for i in range(padding):a = '0'+aprint(f"{len(a)}:{a}")crc = torch.Tensor([int(i) for i in a])return torch.cat([wm,crc],dim=0)
  • 构造CRC校验的方法
def verify_crc(wm):#32位CRC校验full_wm = str(wm.numpy().tolist())[1:-1].replace('.0','').replace(',','').replace(' ','')wm = full_wm[:-32]crc = full_wm[-32:]# a = int(wm,2) #转换为一个数字# a = bin(a)a = bytes(wm, encoding='utf-8')a = binascii.crc32(a)if a == int(crc,2):return Trueelse:return False
  • 测试 CRC 生成
  • 测试 CRC 校验
a = add_crc(a) print(a) results = verify_crc(a) print(results)
  • 输出
32:b'00110110101100011011110000001011' 32:10011010000011110000000001101111 tensor([0., 0., 1., 1., 0., 1., 1., 0., 1., 0., 1., 1., 0., 0., 0., 1., 1., 0.,1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 0., 1., 1., 1., 0., 0., 1.,1., 0., 1., 0., 0., 0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0.,0., 0., 0., 1., 1., 0., 1., 1., 1., 1.]) True
  • 可以看到最后一行,校验成功

  • 加入扰动测试 CRC 校验

a = add_crc(a) print(a) a[12:15] = 0. # 加入扰动 results = verify_crc(a) print(results)
  • 输出
32:b'00000010100101011011011110010111' 32:01000000100001101101001011110100 tensor([0., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 1., 0., 1., 0., 1., 1., 0.,1., 1., 0., 1., 1., 1., 1., 0., 0., 1., 0., 1., 1., 1., 0., 1., 0., 0.,0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 1., 0., 1., 1., 0., 1., 0., 0.,1., 0., 1., 1., 1., 1., 0., 1., 0., 0.]) False
  • 可以看到最后一行,校验失败

总结

以上是生活随笔为你收集整理的python 实现 CRC 冗余码的方法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。