如何根据通过Google GNSSLogger获取的参数计算伪距?

时间:2019-02-27 11:41:55

标签: java android gps android-gps android-gnss

通过GNSS记录器应用程序获取的官方GNSS原始测量值提供以下参数:

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

我正在从以上数据中寻找原始的伪距测量PR。有帮助吗?

参考文献1:https://github.com/google/gps-measurement-tools

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

2 个答案:

答案 0 :(得分:0)

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

其中:m-米,s-秒。

尝试这种方式:

  1. 从一个星座中选择卫星(首先尝试使用GPS)。
  2. 选择ReceivedSvTimeNanos的最大值。
  3. 为每个卫星计算delta_t
    最大ReceivedSvTimeNanos减去当前ReceivedSvTimeNanos
    delta_t = maxRst - curRst)。 / li>
  4. 平均行进时间为70毫秒,光速为299792458 m / s。用它来计算。

不要忘记将所有值转换为相同的单位。

有关详细信息,请参见this pdfUserPositionVelocityWeightedLeastSquare class

答案 1 :(得分:0)

不幸的是,Android并不直接从API提供伪距-您必须自己计算。

EU GSA在此处有一个出色的文档,该文档在2.4节中详细说明了如何使用GNSS原始测量: https://www.gsa.europa.eu/system/files/reports/gnss_raw_measurement_web_0.pdf

具体来说,第2.4.2节说明了如何根据Android API提供的数据计算伪距。它实际上是文本页面,所以这里我不会在线复制整个内容,但这是示例1,它们共享一个Matlab代码片段,以计算一周中的时间时Galileo,GPS和BeiDou信号的伪距编码:

% 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;