How to compute pseudorange from the parameters fetched via Google GNSSLogger?

房东的猫 提交于 2020-08-26 07:43:08

问题


The official GNSS raw measurements fetched via GNSS logger app provides the following parameters :

TimeNanos   
LeapSecond  
TimeUncertaintyNanos    
FullBiasNanos   
BiasNanos   
BiasUncertaintyNanos
DriftNanosPerSecond 
DriftUncertaintyNanosPerSecond  HardwareClockDiscontinuityCount 
Svid    
TimeOffsetNanos 
State   
ReceivedSvTimeNanos 
ReceivedSvTimeUncertaintyNanos  
Cn0DbHz 
PseudorangeRateMetersPerSecond  
PseudorangeRateUncertaintyMetersPerSecond

I'm looking for the raw pseudorange measurements PR from the above data. A little help?

Reference 1: https://github.com/google/gps-measurement-tools

Reference 2 : https://developer.android.com/guide/topics/sensors/gnss


回答1:


Pseudorange[m] = (AverageTravelTime[s] + delta_t[s]) * speedOfLight[m/s]

where: m - meters, s - seconds.

Try this way:

  1. Select satellites from one constellation (at first try with GPS).
  2. Chose max value of ReceivedSvTimeNanos.
  3. Calculate delta_t for each satellite as
    max ReceivedSvTimeNanos minus current ReceivedSvTimeNanos
    (delta_t = maxRst - curRst).
  4. Average travel time is 70 milliseconds, speed of light 299792458 m/s. use it for calculation.

Don't forget to convert all values to the same units.

For details refer to this pdf and UserPositionVelocityWeightedLeastSquare class




回答2:


Unfortunately Android doesn't provide pseudorange directly from the API - you have to calculate this yourself.

The EU GSA has a great document here that explains in detail how to use GNSS raw measurements in section 2.4: https://www.gsa.europa.eu/system/files/reports/gnss_raw_measurement_web_0.pdf

Specifically, section 2.4.2 explains how to calculate pseudorange from the data given by the Android APIs. It's literally pages of text, so I won't copy the whole thing in-line here, but here's the Example 1 they share for a Matlab code snippet to compute the pseudorange for Galileo, GPS and BeiDou signals when the time-of-week is encoded:

% Select GPS + GAL TOW decoded (state bit 3 enabled)
pos = find( (gnss.Const == 1 | gnss.Const == 6) & bitand(gnss.State,2^3);
% Generate the measured time in full GNSS time
tRx_GNSS = gnss.timeNano(pos) - (gnss.FullBiasNano(1) + gnss.BiasNano(1));
% Change the valid range from full GNSS to TOW
tRx = mod(tRx_GNSS(pos),WEEKSEC*1e9);
% Generate the satellite time
tTx = gnss.ReceivedSvTime(pos) + gnss.TimeOffsetNano(pos);
% Generate the pseudorange
prMilliSeconds = (tRx - tTx );
pr = prMilliSeconds *Constant.C*1e-9;


来源:https://stackoverflow.com/questions/54904681/how-to-compute-pseudorange-from-the-parameters-fetched-via-google-gnsslogger

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!