生活随笔
收集整理的這篇文章主要介紹了
                                
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 冗余码的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。