2

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
4

0 に答える 0