【问题标题】:Decoding Scrambed Binary Data from GPS with Python使用 Python 解码来自 GPS 的加扰二进制数据
【发布时间】:2016-03-25 00:53:05
【问题描述】:

我有一个原始二进制文件 (1 KB↓),它是 GPS 流的串行数据转储(以及一些相关的元数据)。我特别想从代表 GPS 时间的二进制文件中提取一个值;我知道它在文件中的偏移量和宽度(分别为 10 和 8 字节,总帧宽度为 28 字节),但它的编码方式非常奇怪,如下面的引用所述。

读取这些数据(到列表或数组中)的最 Pythonic 方式是什么?


GPS TIME - GPS 传感器时间(以秒为单位的一周时间,从 周六 2400 小时/周日 0000 小时)如果 GPS 时间有效消息 3500 设置为 1,否则报告自上电以来的 SDN500 系统时间。 数据字的顺序为 2、1(MSW)、4(LSW)、3。


SDN500–HV 接口上的消息字长为 16 位。然而, SDN500–HV 协议,它使用标准的通用异步 Receiver Transmitter (UART),以 8 位组(字节)传输数据。 这意味着需要两个字节才能组成一条消息 词。

一个字节的信息作为 11 位的序列传输:一个 起始位,8 位数据(最低有效位(LSB)在前),一个 奇偶校验位(奇数)和一个停止位。对于每个 16 位数据字, 首先发送最低有效字节,然后是最 有效字节。整数和浮点数据类型包括 一个以上的字从最低编号的字传输到 编号最高的单词。该规则的一个例外是时间 标记,在每个 HV 输出消息的字 6-9 中输出。四个 16 位数据字的顺序如下:2,1,4,3,其中 1 代表最重要的词和4个最不重要的词。 每个字都单独进行字节反转。

【问题讨论】:

  • 如果您更精通另一种语言(如 Matlab 或 C),我仍然希望看到可以读取此数据的示例 sn-p 代码。这将帮助我了解如何更好地在 Python 中阅读它。
  • 希望其他人能给你更好的信息,但是docs.python.org/2/library/struct.html 模块是你开始寻找二进制文件 i/o 的地方。我只用了一小会儿,所以帮不上什么忙了。
  • @JLPeyret 是的,我整天都在搞乱 struct.unpack 变体和十六进制编辑器,试图从中获得合理的值,但还没有找到读取 MSB/LSB 的正确方法结构体。虽然我能够以这种方式阅读其他一些领域。
  • 你用的是什么gps设备?
  • @JoranBeasley 这是一个SDN500

标签: python binary gps


【解决方案1】:

从打开文件开始

fin = open("20160128t184727_pps","rb")

然后读入帧

def read_frame(f_handle):
    frame = f_handle.read(28) # 28 byte frame size
    start_byte = 10
    end_byte = 18 # 4 words each word is 2 bytes
    timestamp_raw = frame[start_byte:end_byte]
    timestamp_words = struct.unpack(">HHHH",timestamp_raw)

我可能可以提供更多帮助,但我不明白时间戳 startbyte 和 endbyte 来自您的描述,因为它似乎与您引用的描述不匹配......我也不知道预期的输出值是什么......如果您提供这些详细信息,我可能会提供更多帮助

【讨论】:

  • 谢谢。几分钟前我编辑了这个问题,因为我的宽度错误。我会试试你的方法。
  • 哦,好吧,我明白了,现在听起来更真实了……将它们组合起来,我不确定您在期待什么?有点像20160322134566(YMDHMS)?或自纪元以来的秒时间戳?还是?
  • GPS 报告自一周开始以来的时间(从星期日开始)。我认为它在几秒钟内。
  • 这是一种报告时间戳的奇怪方式......你确定吗?没有办法应该占用 8 个字节...如果您想通过电子邮件将解释他们消息的 pdf 发送给我,我会为您查找...我的电子邮件只是我在 gmail.com 的名字和姓氏
  • 哦,我明白了...这真的很奇怪,我曾与一些 GPS 接收器合作,但他们总是以看起来像我的 YMDHMS 示例的时间戳结束...嗯,我再看看它...
猜你喜欢
  • 2012-11-04
  • 2014-08-09
  • 2017-07-15
  • 2014-11-12
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
相关资源
最近更新 更多