2

我正在使用 Python 解析来自 RF 传感器的数据文件,这些数据文件保存带有序列号和时间戳的数据包。我需要计算丢失的数据包并忽略来自干扰的数据包(数据包乱序)。

这个怎么运作:

  • 数据包序列范围为 0-255 并翻转。
  • 发送到传感器的第一个数据包始终编号为 0。(并不意味着数据文件中的第一个数据包始终为 0。)
  • 干扰数据包是乱序的,可以是随机的,也可以是 0-255。
  • 每 5 ms 将数据包发送到传感器。(传感器有时会记录一个具有 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