Pythonによる巡回冗長検査(CRC)の実装方法とサンプルコード
巡回冗長検査(CRC)とは
巡回冗長検査(CRC:Cyclic Redundancy Check)は、デジタルデータ内の誤りを検出するために広く利用されている手法で、伝送エラーの検出に特に有効な技術として知られています。この手法の計算の中核を担っているのは「2進数の除算(バイナリ除算)」です。
CRCでは、一連の冗長ビットからなる「CRCビット(検査用ビット)」を使用します。これらのビットはデータ単位(データワード)の末尾に付加され、付加後のデータ単位全体が、あらかじめ決められた特定の2進数(除数)でちょうど割り切れるように構成されます。
受信側での誤り判定の流れ
受信側では、受信したデータを送信側と同じ2進数で除算します。ここで剰余が0であれば、データは伝送中に破損しておらず正しいものと判断され、受け入れられます。
一方、剰余が0以外であった場合は、伝送中に何らかの異常が発生し、データ単位が破損していることを意味します。この場合、そのデータ単位は受け入れられずに破棄されます。
サンプルコード
以下は、送信側(Sender)、通信チャネル(Channel)、受信側(Receiver)という一連のデータ伝送の流れをシミュレートするPythonプログラムの例です。
from pycrc.crclib import *
def main():
#-------------------------------------------------------------
# 送信側(Sender Side)
div = str(input("Input divisor 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()
実行結果
上記プログラムを実行すると、送信側で生成された符号語(codeword)がチャネルを通じて受信側へ渡され、シンドローム(syndrome)の値をもとにデータの合否が判定される様子を確認できます。
Sender Input dataword in binary type 1010000 arg_dataword:1010000000 remainder: 011 codeword:1010000011 Receiver syndrome:1010000011 Discard or not? N rx_dataword:1010000011
-
DiskPartエラー「データ エラー(巡回冗長検査)」の原因と解決方法
パソコンでDiskPartを実行した際に、「DiskPartにエラーが発生しました: データ エラー(巡回冗長検査)」というメッセージが表示された場合は、この記事で紹介する方法をお試しください。このエラーが発生する原因はさまざまであり、本記事では考えられる原因と、それぞれに対応した解決策を順番に解説します。DiskPartとFSUTILは、ハードドライブに関するさまざまな操作を行えるWindows標準のコマンドラインツールです。DiskPartを使えば、エクスプローラーの標準機能では実現できない高度なディスク操作が可能になります。しかし、このユーティリティ自体がエラーを表示すると、ディスク関連
-
Windows 10で「データエラー(巡回冗長検査)」が発生したときの直し方
ファイルやフォルダーをディスクドライブや外付けドライブにコピーする際に、「データエラー(巡回冗長検査)」というメッセージが表示されて困っていませんか?巡回冗長検査(CRC)は、データの整合性を確認するために使われる誤り検出コードです。このエラーが表示される場合、ファイルまたはハードドライブのいずれかに何らかの問題が発生しています。また、Outlookでも同様のエラーが起こることがあり、メールをパソコンにダウンロードした後にこのエラーが原因で、ダウンロード済みのメッセージが閲覧できなくなるケースがあります。これは、個人用フォルダーファイル(PST)が破損していることが原因である可能性があります。