生活随笔
收集整理的這篇文章主要介紹了
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
= str(a
.numpy
().tolist
())[1:-1].replace
('.0','').replace
(',','').replace
(' ','')
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'+a
print(f"{len(a)}:{a}")crc
= torch
.Tensor
([int(i
) for i
in a
])return torch
.cat
([wm
,crc
],dim
=0)
def verify_crc(wm
):full_wm
= str(wm
.numpy
().tolist
())[1:-1].replace
('.0','').replace
(',','').replace
(' ','')wm
= full_wm
[:-32]crc
= full_wm
[-32:]a
= bytes(wm
, encoding
='utf-8')a
= binascii
.crc32
(a
)if a
== int(crc
,2):return Trueelse:return False
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 冗余码的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。