Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình Python để kiểm tra tính dự phòng theo chu kỳ

Để phát hiện lỗi trong dữ liệu kỹ thuật số, CRC được sử dụng, đây là một kỹ thuật tốt để phát hiện lỗi truyền. Trong kỹ thuật này, chủ yếu áp dụng phép chia nhị phân.

Trong kỹ thuật này, các bit kiểm tra dự phòng theo chu kỳ có mặt, là một chuỗi các bit dư thừa, các bit này được nối vào cuối đơn vị dữ liệu để đơn vị dữ liệu kết quả trở nên chính xác chia hết cho một giây là số nhị phân xác định trước.

Ở phía đích, dữ liệu đến được chia cho cùng một số, nếu không có phần dư thì giả định rằng dữ liệu đó là chính xác và dữ liệu đó đã sẵn sàng để chấp nhận.

Phần còn lại chỉ ra rằng có điều gì đó xảy ra trong quá trình chuyển đổi, đơn vị dữ liệu đã bị hỏng. Vì vậy, đơn vị dữ liệu này không được chấp nhận.

Chương trình Python để kiểm tra tính dự phòng theo chu kỳ

Mã mẫu

frompycrc.crclib import *
def main():
#-----------------------------------------------------------------------------
#Sender Side
div = str(input("Input divisor in binary type: "))
#user_dataword = str(raw_input("Input dataword in binary type: "))
userdataword = '1001'
print ("\nSender:")
sen = Sender(bin2dec(userdataword), div)
sen.send()
print ("arg_dataword:", sen.arg_dataword2)
print ("remainder:", sen.remainder2)
print ("codeword:", sen.codeword2)
#-----------------------------------------------------------------------------
#Channel
print ("\nChannel:")
ch = Channel(sen.codeword)
print ("Through to the channel get channel codeword:", dec2bin(ch.ch_codeword))
#-----------------------------------------------------------------------------
#Receiver Side
print ("\nReceiver:")
rcv = Receiver(ch.ch_codeword, div)
rcv.receive()
print ("syndrome:", rcv.syndrome2)
print ("Discard or not?", rcv.discard)
print ("rx_dataword:", rcv.rx_dataword2)
if __name__ == '__main__':
   main()

Đầu ra

Sender
Input dataword in binary type 1010000
arg_dataword:1010000000
remainder: 011
codeword:1010000011
Receiver
syndrome:1010000011
Discard or not? N
rx_dataword:1010000011