我正在使用 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