Python を使用して、パケットをシーケンス番号とタイム スタンプで保存する RF センサーからのデータ ファイルを解析しています。失われたパケットをカウントし、干渉によるパケットを無視する必要があります (パケットの順序が正しくありません)。
使い方:
- パケット シーケンスの範囲は 0 ~ 255 で、ロールオーバーします。
- センサーに送信される最初のパケットの番号は常に 0 です (データ ファイルの最初のパケットが常に 0 であるとは限りません)。
- 干渉パケットは順不同で、0 ~ 255 の範囲でランダムになる可能性があります。
- パケットは 5 ミリ秒ごとにセンサーに送信されます。(センサーは、6 ミリ秒のタイム デルタでパケットを記録する場合があります。)
データ ファイル内で順序が正しくないパケットは、干渉パケットである可能性がありますが、欠落したパケットが原因で存在する可能性もあります。これまでのところ、「前の」パケットの差が 1 より大きいかどうかのみを確認しています。失われたパケットと干渉パケットを区別する賢い方法は何ですか?
for fname in glob(path.join(fdir, 'RFsensor*.txt')):
with open(fname,'r') as fin:
dump = fin.readlines()
fin.close()
## Tracks line indices when RF channel changes
lastchan = dump[8][53:55]
channels = [int(lastchan,16)]
startindex = [0]
endindex = []
for i,line in enumerate(dump[8:]):
if line[53:55] != lastchan:
channels.append(int(line[53:55],16))
startindex.append(i)
endindex.append(i-1)
lastchan = line[53:55]
endindex.append(len(dump[8:])-1)
## Calculate data and write results according to line index values
count = 0
lost = 0
for i,line in enumerate(dump[8:]):
count+=1
PktSeq = int(line[42:44],16)
## Check i against startindex
if startindex and i == startindex[0]:
stamp = TestStamp(line)
stamp = '%s:%s:%s' % (stamp[11:13],stamp[14:16],stamp[17:19])
chan = int(line[53:55],16)
startindex.pop(0)
## Check for lost packets
else:
diff = PktSeq - prevSeq - 1
## Account for sequence roll over
if PktSeq < prevSeq:
diff = diff + 256
if diff != 0:
lost += diff
prevSeq = PktSeq