通过GNSS记录器应用程序获取的官方GNSS原始测量值提供以下参数:
TimeNanos
LeapSecond
TimeUncertaintyNanos
FullBiasNanos
BiasNanos
BiasUncertaintyNanos
DriftNanosPerSecond
DriftUncertaintyNanosPerSecond HardwareClockDiscontinuityCount
Svid
TimeOffsetNanos
State
ReceivedSvTimeNanos
ReceivedSvTimeUncertaintyNanos
Cn0DbHz
PseudorangeRateMetersPerSecond
PseudorangeRateUncertaintyMetersPerSecond
我正在从以上数据中寻找原始的伪距测量PR
。有帮助吗?
答案 0 :(得分:0)
Pseudorange[m] = (AverageTravelTime[s] + delta_t[s]) * speedOfLight[m/s]
其中:m
-米,s
-秒。
尝试这种方式:
ReceivedSvTimeNanos
的最大值。delta_t
为ReceivedSvTimeNanos
减去当前ReceivedSvTimeNanos
delta_t = maxRst - curRst
)。 / li>
不要忘记将所有值转换为相同的单位。
有关详细信息,请参见this pdf和UserPositionVelocityWeightedLeastSquare
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;