В разработке для Android (последняя версия SDK) я использую GpsStatus.NmeaListener
для анализа сообщений NMEA для синхронизации времени.
В обратном вызове onNmeaReceived(long timestamp, String nmea)
я анализирую строку nmea на наличие сообщений GPRMC. Затем я вычисляю смещение между системными часами и временем, полученным из сообщения GPRMC.
Теперь существует задержка между моментом получения сообщения NMEA в Android Frame и обработкой обратного вызова. Это приведет к изменению фактического смещения, которое я рассчитываю.
Я предполагаю, что timestamp
, которое отправляется вместе с сообщением NMEA, - это время системных часов в момент получения сообщения NMEA. Если это правда, я могу использовать эту временную метку, чтобы компенсировать задержку при обработке обратного вызова.
По моим измерениям, время timestamp
отличается от времени системных часов, зафиксированного в обратном вызове onNmeaReceived
, примерно на 10 ~ 30 мс.
Разница / смещение между временем timestamp
и временем, полученным из проанализированного сообщения GPRMC, составляет порядка 7200092 мс (разница в 2 часа между GPS и системным временем).
Поэтому я бы сказал, что timestamp
- это не время на основе GPS, а время системных часов, когда было получено сообщение.
Я довольно долго искал в Интернете, но не могу найти никакой информации относительно этой отметки времени. Есть ли у кого-нибудь ресурс, который рассказывает нам больше об этой временной метке? Что именно представляет собой эта отметка времени? В какой момент времени это записывается?
timestamp
отличается от времени системных часов, зафиксированного в обратном вызовеonNmeaReceived
, примерно на 10 ~ 30 мс. Поэтому я бы сказал, что это не время по GPS. Разница / смещение между временем междуtimestamp
и временем, полученным из проанализированного сообщения GPRMC, составляет порядка 7200092 мс (разница в 2 часа между временем GPS и системным временем). - person Kamminga   schedule 17.07.2015timestamp
, который вы упомянули, за время (отметку) из сообщения GPRMC. Однако проблема останется прежней: момент времени, когда сообщение получено за пределами приемника GPS, подвержен случайным задержкам и дрожанию даже на самом нижнем уровне программного стека. Приемники GPS для приложений хронометража имеют выделенную линию сигнала / прерывания, чтобы обеспечить синхронизацию со временем GPS, что вряд ли будет использовать устройство Android. Таким образом, я считаю, что нельзя полагаться на точность времени прибытия сообщений GPS, которая может быть ниже 100 мс. - person JimmyB   schedule 20.07.2015timestamp
. Похоже, его нужно снимать в момент прерывания от GPS-приемника, чтобы сделать информацию NMEA полезной. Однако я не могу найти никакой информации оtimestamp
. Измерение стандартного отклонения в 200 смещений междуtimestamp
и временем GPRMC для 10 устройств дает среднее стандартное отклонение 6,95 мс. Таким образом, джиттер не такой высокий ... Не могли бы вы представить, где найти более достоверную документацию поtimestamp
? - person Kamminga   schedule 20.07.2015gettimeofday()
. (nmea_cb
- это обратный вызов типаgps_nmea_callback
). - person JimmyB   schedule 20.07.2015