簡體   English   中英

使用Python從GPS解碼加擾的二進制數據

[英]Decoding Scrambed Binary Data from GPS with Python

我有一個原始的二進制文件( 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位。 但是,使用標准通用異步接收器發送器 (UART)的SDN500–HV協議以8位組(字節)發送數據。 這意味着需要兩個字節才能組成一個消息字。

信息字節按11位的順序傳輸:一個開始位,8個數據位(最低有效位(LSB)首先),一個奇偶校驗位(奇數)和一個停止位。 對於每個16位數據字,最低有效字節先被發送,然后是最高有效字節。 包含一個以上單詞的整數和浮點數據類型從最低編號的單詞傳輸到最高編號的單詞。 該規則的一個例外是時間標記,它以每條HV輸出消息的字6-9輸出。 四個16位數據字的順序如下:2、1、4、3,其中1表示最高有效字,4表示最低有效字。 每個字分別按字節反轉。

首先打開文件

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)

我可能可以提供更多幫助,但我不知道時間戳記起始字節和結束字節在您的描述中的位置,因為它似乎與您引用的描述不匹配...我也不知道預期的輸出值是...如果您提供這些細節我可能會幫助更多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM