当前位置:网站首页>When SBAS encounters rtklib
When SBAS encounters rtklib
2022-06-23 05:16:00 【Running Orange 】
List of articles
brief introduction
SBAS It's a satellite based enhancement system Satellite-Based Augmentation System Abbreviation . for example USA Of WAAS It's just one. SBAS System .
Satellite based augmentation system (SBAS) And foundation reinforcement system (CORS) Just a word , So how does the satellite based enhancement system work ?CORS A reference station is required to work . Allied SBAS need GEO satellite ( To avoid confusion , This is called SBAS satellite ) Only by cooperating with the ground station can it work , But these don't need our users' attention .SBAS Satellites can broadcast ephemeris errors to users 、 Satellite clock error 、 Ionospheric delay parameters and other correction information , So as to improve the positioning accuracy .
in addition , It is worth noting that SBAS A satellite is more than just a signal forwarding device , It is also a navigation satellite , You can also issue broadcast ephemeris , The receiver can also obtain SBAS Satellite carrier phase, pseudo range and other observation information . therefore ,SBAS A satellite can be used as an ordinary navigation satellite .
RTKLib Chinese vs SBAS Support for
rtklib It's supporting sbas Participating in the solution , And both of the above methods support .
SBAS Satellite as an ordinary navigation satellite
since SBAS Satellites should be used as ordinary navigation satellites , Then we need to know the position and observation value of the satellite , Of course, the satellite position is calculated through its own ephemeris . Here are SBAS Calculation method of satellite position , Follow GLONASS The calculation method is very similar to .
/* sbas ephemeris to satellite position and clock bias */
extern void seph2pos(gtime_t time, const seph_t *seph, double *rs,
double *dts,double *var)
{
double t;
int i;
trace(4,"seph2pos: time=%s sat=%2d\n",time_str(time,3),seph->sat);
t=timediff(time,seph->t0);
for (i=0;i<3;i++) {
rs[i]=seph->pos[i]+seph->vel[i]*t+seph->acc[i]*t*t/2.0;
}
*dts=seph->af0+seph->af1*t;
*var=var_uraeph(SYS_SBS,seph->sva);
}
Here are Rinex in ,SBAS Ephemeris format .
The following is a rtklib in SBAS Ephemeris Rinex analysis .
seph->af0=data[0];
seph->af1=data[1];
seph->pos[0]=data[3]*1E3; seph->pos[1]=data[7]*1E3; seph->pos[2]=data[11]*1E3;
seph->vel[0]=data[4]*1E3; seph->vel[1]=data[8]*1E3; seph->vel[2]=data[12]*1E3;
seph->acc[0]=data[5]*1E3; seph->acc[1]=data[9]*1E3; seph->acc[2]=data[13]*1E3;
seph->svh=(int)data[6];
seph->sva=uraindex(data[10]);
Again ,Rinex You can read in the observation file SBAS Observation information .
for example , The following example is an example Rinex Observation information , among S20 by SBAS satellite .
Now we have ephemeris and observations , You can solve the positioning problem , Click here to read rtklib Single point positioning explanation . Oh , And a little bit more , The observation values of different satellites should be given different weights .SBAS Satellites are no exception .
static double varerr(const prcopt_t *opt, double el, int sys)
{
double fact,varr;
fact=sys==SYS_GLO?EFACT_GLO:(sys==SYS_SBS?EFACT_SBS:EFACT_GPS);
if (el<MIN_EL) el=MIN_EL;
varr=SQR(opt->err[0])*(SQR(opt->err[1])+SQR(opt->err[2])/sin(el));
if (opt->ionoopt==IONOOPT_IFLC) varr*=SQR(3.0); /* iono-free */
return SQR(fact)*varr;
}
SBAS Satellite based enhancement
Of course ,SBAS As an ordinary navigation satellite, satellite is a sideline after all , Let's get down to business . Look at a watch first ,SBAS The satellite sent those messages ? You can also see from the table below Message Type=9 Namely SBAS Ephemeris news .
| Message Type | Messages Contents | Update Period (sec) |
|---|---|---|
| 0 | Don’t use this GEO for safety-of-life (it is only for testing) | 6 |
| 1 | PRN Mask assignments, set up to 51 of 210 bits | 120 |
| 2 | 5 Fast corrections (satellite clock error) | 6-60 |
| 6 | Integrity information (UDREI) | 6 |
| 7 | Fast correction degradation factors | 120 |
| 9 | GEO navigation message (X, Y, Z, time, etc.) | 120 |
| 10 | Degradation parameters | 120 |
| 12 | WAAS network time/UTC offset parameters | 300 |
| 17 | GEO satellite almanacs | 300 |
| 18 | Ionospheric grid point masks | 300 |
| 24 | Mixed fast/long term satellite error corrections | 6-60 |
| 25 | Long term satellite error corrections | 120 |
| 26 | Ionospheric delay corrections | 300 |
| 27 | WAAS service message | 300 |
| 28 | Clock/ephemeris covariance matrix | 120 |
| 63 | Null message | - |
The messages in the above table rtklib All supported , We take SBAS Ionospheric correction to see .
- First , Analytical ionospheric delay parameters , Ionospheric delay id Number is 26,5 Send it once every ten minutes
/* decode type 26: ionospheric deley corrections -----------------------------*/
static int decode_sbstype26(const sbsmsg_t *msg, sbsion_t *sbsion){
}
- So when we make the ionospheric correction of pseudo range , You can use SBAS The ionospheric correction parameters
extern int ionocorr(gtime_t time, const nav_t *nav, int sat, const double *pos,
const double *azel, int ionoopt, double *ion, double *var)
extern int sbsioncorr(gtime_t time, const nav_t *nav, const double *pos,
const double *azel, double *delay, double *var)
About IPP—— Ionospheric entry point
When calculating the ionospheric delay , We found the following function , This function is used to calculate the coordinates of the ionospheric entry point .
/* ipp (ionospheric pierce point) position */
fp=ionppp(pos,azel,re,hion,posp);
What is the ionospheric entry point ? First look at the picture below . To put it simply , We connect the user location point with the satellite in a straight line , The intersection of this line and the ionospheric height is the ionospheric entry point .
Below is the calculation method of ionospheric entry point , First of all, the calculation of latitude is relatively simple , as follows :
ϕ p p = s i n − 1 ( s i n ϕ u c o s ψ p p + c o s ϕ u s i n ψ p p c o s A ) \phi_{pp}=sin^{-1}(sin\phi_ucos\psi_{pp}+cos\phi_usin\psi_{pp}cosA) ϕpp=sin−1(sinϕucosψpp+cosϕusinψppcosA)
among , A A A Is the azimuth of the satellite , ϕ u \phi_u ϕu For the user , ψ p p \psi_{pp} ψpp For user location and IPP The corner of the earth's Center , The calculation method is as follows
ψ p p = π 2 − E − s i n − 1 ( R e R e + h I c o s E ) \psi_{pp}=\frac{\pi}{2}-E-sin^{-1}(\frac{R_e}{R_e+h_I}cosE) ψpp=2π−E−sin−1(Re+hIRecosE)
among E E E It's satellite elevation , R e R_e Re Is the radius of the earth , h I h_I hI Is the ionospheric height , take 350Km.
Look down , The longitude calculation method of the entry point ,
If the following conditions are true ,
( ϕ u > 7 0 ∘ \phi_u>70^{\circ} ϕu>70∘ && t a n ψ p p c o s A > t a n ( π 2 − ϕ u ) tan\psi_{pp}cosA>tan(\frac{\pi}{2}-\phi_u) tanψppcosA>tan(2π−ϕu)) ||( ϕ u < − 7 0 ∘ \phi_u<-70^{\circ} ϕu<−70∘ && t a n ψ p p c o s ( A + π ) > t a n ( π 2 + ϕ u ) tan\psi_{pp}cos(A+\pi)>tan(\frac{\pi}{2}+\phi_u) tanψppcos(A+π)>tan(2π+ϕu) )
be ,
λ p p = λ u + π − s i n − 1 s i n ψ p p s i n A c o s ϕ p p \lambda_{pp}=\lambda_u+\pi-sin^{-1}\frac{sin\psi_{pp}sinA}{cos\phi_{pp}} λpp=λu+π−sin−1cosϕppsinψppsinA
otherwise , Calculate the entry point coordinates according to the following formula ,
λ p p = λ u + s i n − 1 s i n ψ p p s i n A c o s ϕ p p \lambda_{pp}=\lambda_u+sin^{-1}\frac{sin\psi_{pp}sinA}{cos\phi_{pp}} λpp=λu+sin−1cosϕppsinψppsinA
Interpolation processing
SBAS Interpolation processing is needed for ionospheric correction , Click here for details .
边栏推荐
- 滑块视图的实现
- "Wechat applet - Basics" takes you to understand the routing system of the applet (2)
- MVC three-tier architecture
- SwiftUI 2.0 课程笔记 Chapter 5
- [OFDM communication] simulation of OFDM multi-user resource allocation based on MATLAB [including Matlab source code 1902]
- I have been engaged in software testing for 5 years and have changed jobs for 3 times. I have understood the field of software testing
- 985测试工程师被吊打,学历和经验到底谁更重要?
- UnityShader入门精要——Unity中的渲染优化技术(四)
- 入行软件测试5年,跳槽3次,我摸透了软件测试这一行
- MVVM has become history, and Google has fully turned to MVI
猜你喜欢

C'est dur de trouver un emploi? Ali des trois côtés, heureusement qu'il s'est bien préparé et qu'il a pris un produit.

微信小程序:星际旅行飞船乘坐票制作生成

GNSS速度解算的三种方法

微信小程序:微信也可以发闪照了闪照制作生成微信小程序源码下载,自定义闪照时间

Beyond chips and AI, why is hard technology capital becoming more and more "hard core"?

8 years' experience: monthly salary of 3000 to 30000, the change of Test Engineer

Three methods of GNSS velocity calculation

LeetCode 797:所有可能的路径

In unity, how to read and write a scriptableobject object in editor and runtime

OSPF shunt test
随机推荐
大环境不好难找工作?三面阿里,幸好做足了准备,已拿offer
OSPF分流实验
功能测试人员如何做到花一个月的时间进阶自动化软件测试工程师
Arduino flame sensor (with code)
Beyond chips and AI, why is hard technology capital becoming more and more "hard core"?
图片降噪DeNoise AI
Small problems in the spoole framework for TCP communication in PHP
Dolphin scheduler 2.0.5 spark task test summary (source code optimization)
Arduino temperature and humidity sensor DHT11 (including code)
UI automation positioning edge -xpath actual combat
UI自动化定位利器-xpath实战
【微服务|Nacos】Nacos版本相关问题一览
大環境不好難找工作?三面阿裏,幸好做足了准備,已拿offer
Arduino温湿度传感器DHT11(含代码)
李宏毅《机器学习》丨5. Tips for neural network design(神经网络设计技巧)
QT elidedtext only works for Chinese conformity, but not for English
(IntelliJ)插件一 Background Image Plus
Three methods of GNSS velocity calculation
bat中获取bat命令结果
The technological advance of new employees? Journey