RTKlib/постпроцессинг

я даже сейчас не могу использовать EGNOS :expressionless:
вот лог EGNOS PRN136
RTKLIB не может проглотить ionosphere correction от EGNOS :smiley:

собственно меня интересует применение SBAS применительно к ГЛОНАСС
где есть cIFB

которое даже в приемниках с закосом на крутость выглядит типично вот так

но, как видим, в СДКМ cIFB таинственным образом побеждают :smiley:
u-blox победить СДКМ + ГЛОНАСС не смог :stuck_out_tongue:

SBAS L1 maximum Doppler value [Hz], see SDCM ICD section 5.2.7
http://www.sdcm.ru/smglo/ICD_SDCM_1dot0_Eng.pdf

#define SBAS_L1_DOPPLER_MAX_HZ (+210.f)

(удалил, из пустого в порожнее)

Удивительно. Честно говоря, даже не вериться. Но если всё так, то очень круто.

На сайте sbas.ru используется обычный RTKLIB. Единственное файл sbas.c приведён в соответствие с ИКД СДКМ/DO-229, а сглаживание кодовых измерений фазовыми и автокалибровка ICB/cIFB реализована согласно статье - http://russianspacesystems.ru/wp-content/uploads/2019/10/1_p3_0603.pdf. Никакой магии :slight_smile:

https://sbas.ru/контроль-ионосфера/?uid=2

Буду очень Вам благодарен если Вы сбросите этот файл с модификацией под СДКМ мне на e-mail :slight_smile:
Именно sbas.c с той же целью я сейчас ковыряю.

К сожалению, выслать ничего не могу. Могу объяснить, по мере возможности, что и где в RTKLIB дописать/подправить для соответствия ИКД СДКМ/DO-229.

Спасибо, извиняюсь за задержку с ответом :slight_smile:
Пытался сам выяснить что к чему и где основные глюки.
Самый главный глюк в RTKLIB это использование sbs->lcorr.iode в satpos_sbas,
для GPS это правильно.
Однако IODE от SDCM для GLONASS всегда бывает или 0 (типа не получили) или 252 :
1 satpos_sbas : time=2020/07/29 08:01:09.725 sat=35 iode= 0
1 satpos_sbas : time=2020/07/29 08:01:09.728 sat=36 iode= 0
1 satpos_sbas : time=2020/07/29 08:01:09.721 sat=37 iode=252
1 satpos_sbas : time=2020/07/29 08:01:09.727 sat=41 iode=252
1 satpos_sbas : time=2020/07/29 08:01:09.732 sat=42 iode=252
1 satpos_sbas : time=2020/07/29 08:01:09.726 sat=43 iode=252
1 satpos_sbas : time=2020/07/29 08:01:09.730 sat=51 iode=252
1 satpos_sbas : time=2020/07/29 08:01:09.735 sat=52 iode=252
1 satpos_sbas : time=2020/07/29 08:01:09.722 sat=53 iode=252
1 satpos_sbas : time=2020/07/29 08:01:09.925 sat=35 iode=252
1 satpos_sbas : time=2020/07/29 08:01:09.928 sat=36 iode=252

естественно от 0 или 252
if (!ephpos(time,teph,sat,nav,sbs->lcorr.iode,rs,dts,var,svh)) return 0;
всегда заканчивает return 0 т.е. режим SBAS для GLONASS не реализован.

Что необходимо использовать вместо 252, -1 или ?

Посмотрите страницу 41 в ИКД СДКМ, там приведён алгоритм. 252 это два под-поля (время действия и время запаздывания). Также для работы с поправками SBAS вам необходимо хранить текущие и предыдущие эфемериды для каждого НКА. При передачи спутниками новых эфемерид, системы SBAS продолжают использовать старые эфемериды для определения долгосрочных и быстрых поправок от 2 до 4 мин.

да смотрел я её много раз, алгоритма не увидел :roll_eyes:
Со спутников все время идет неизменно 252, т.е. два под-поля,
“время действия” ВСЕГДА максимально 960c и “время запаздывания” ВСЕГДА 0.
Специально посмотрел логи длиной более 3-х часов.

Как использовать константу 252 непонятно, вернее понятно что если отлична от нуля то идут данные и больше ничего :confused:


static int useglosbas(const int sat, const int iode, const sbssat_t *sbs, const geph_t* eph) {
   const sbssatp_t *p=NULL;
   for (p=sbs->sat; p<sbs->sat+sbs->nsat; p++) {
      if (p->sat!=sat || p->lcorr.t0.time==0) 
         continue;
      const int L=30*(iode&0x7);
      const int V=60*(iode>>3);
      return (p->lcorr.t0.time-L-V<=eph->tof.time && eph->tof.time<=p->lcorr.t0.time-L);
   } 
   return 0;
}

static geph_t *selgeph(gtime_t time, int sat, int iode, const nav_t *nav) {
...
   if (iode>=0 && !useglosbas(sat, iode, &nav->sbssat, &nav->geph[i])) 
       continue;
...
}

к сожалению поскольку iode всегда 252 то будет вечное continue

за useglosbas спасибо, возможно пригодится :slight_smile:

похоже есть еще большой глюк в sbsfastcorr …

Ошибаетесь, вечного continue не будет :). continue будет если iode больше нуля (т.е. для данного спутника есть поправки к эфемеридам) и useglosbas вернёт 0 (т.е. не найдены эфемериды, к которым можно применить поправки).

поскольку
1 selgeph : time=2020/07/29 09:00:33.195 sat=43 iode=-1 useglosbas= 0 i=10 iode_i=49 sat_i=43
1 selgeph : time=2020/07/29 09:00:33.195 sat=43 iode=-1 useglosbas= 0 i=37 iode_i=47 sat_i=43
1 selgeph : time=2020/07/29 09:00:33.195 sat=43 iode=252 useglosbas= 0 i=10 iode_i=49 sat_i=43
1 selgeph : time=2020/07/29 09:00:33.195 sat=43 iode=252 useglosbas= 1 i=37 iode_i=47 sat_i=43
1 selgeph : time=2020/07/29 09:00:33.195 sat=44 iode=-1 useglosbas= 0 i=11 iode_i=49 sat_i=44
1 selgeph : time=2020/07/29 09:00:33.195 sat=44 iode=-1 useglosbas= 0 i=38 iode_i=47 sat_i=44
1 selgeph : time=2020/07/29 09:00:33.195 sat=44 iode=252 useglosbas= 0 i=11 iode_i=49 sat_i=44
1 selgeph : time=2020/07/29 09:00:33.195 sat=44 iode=252 useglosbas= 1 i=38 iode_i=47 sat_i=44
1 selgeph : time=2020/07/29 09:00:33.195 sat=51 iode=-1 useglosbas= 0 i=18 iode_i=49 sat_i=51
1 selgeph : time=2020/07/29 09:00:33.195 sat=51 iode=-1 useglosbas= 0 i=45 iode_i=47 sat_i=51
1 selgeph : time=2020/07/29 09:00:33.195 sat=51 iode=252 useglosbas= 0 i=18 iode_i=49 sat_i=51
1 selgeph : time=2020/07/29 09:00:33.195 sat=51 iode=252 useglosbas= 1 i=45 iode_i=47 sat_i=51
1 selgeph : time=2020/07/29 09:00:33.195 sat=52 iode=-1 useglosbas= 0 i=19 iode_i=49 sat_i=52
1 selgeph : time=2020/07/29 09:00:33.195 sat=52 iode=-1 useglosbas= 0 i=46 iode_i=47 sat_i=52
1 selgeph : time=2020/07/29 09:00:33.195 sat=52 iode=252 useglosbas= 0 i=19 iode_i=49 sat_i=52
1 selgeph : time=2020/07/29 09:00:33.195 sat=52 iode=252 useglosbas= 1 i=46 iode_i=47 sat_i=52
1 selgeph : time=2020/07/29 09:00:33.195 sat=53 iode=-1 useglosbas= 0 i=20 iode_i=49 sat_i=53
1 selgeph : time=2020/07/29 09:00:33.195 sat=53 iode=-1 useglosbas= 0 i=47 iode_i=47 sat_i=53
1 selgeph : time=2020/07/29 09:00:33.195 sat=53 iode=252 useglosbas= 0 i=20 iode_i=49 sat_i=53
1 selgeph : time=2020/07/29 09:00:33.195 sat=53 iode=252 useglosbas= 1 i=47 iode_i=47 sat_i=53

а в тексте имеется

if (iode>=0 && nav->geph[i].iode != iode) continue;

то вечное continue гарантировано :slight_smile:

если убрать в общем то лишённую смысла эту строчку (непонятно зачем её вообще вставили)
то вечного continue нет и useglosbas работает :smiley:
За что отдельное спасибо ! :slight_smile:

Отлично :slight_smile: Если будет возможность, покажите, пожалуйста, какая в итоге у вас будет точность местоопределения.

diff в итоге какой?

самому интересно какая в итоге будет точность :smiley:
пока ничего особо интересного, по GLONASS поиски очередных глюков RTKLIB,
ибо SDCM c GLONASS у меня фактически не работает :frowning:
вернее работает если закомментировать (убрать) в sbas.c

		*var=varfcorr(p->fcorr.udre)+degfcorr(p->fcorr.ai)*t*t/2.0;

но это же неправильно :slight_smile:

SDCM c GPS работает без проблем, спутники от 5 градусов:
GPS без SDCM

GPS с тропо и ионо от SDCM

GPS с полной коррекцией от SDCM

до этого еще надо дойти :smiley:

Взял ваш лог PRN125+PRN140+GPS+GLONASS и посчитал в своей версии RTKLIB. Вот результаты:
GPS+СДКМ

ГЛОНАСС+СДКМ

Ну и на выходе значения ICB/cIFB по литере:
-1 0.42
0 2.32
1 0.57
2 1.89
4 2.66
6 3.98

на https://github.com/ более 160 версий RTKLIB :slight_smile: этой, насколько понимаю, там нет :frowning:

красивая картинка после сглаживания :smiley:
мне больше нравится без сглаживания, эталоном служит картинка того что умеет этот приемник от моего GPS симулятора

нормальная картинка, правда сдвинута на юг на 0.5 … 0.7 метра

Это самое чудесное в этой версии :slight_smile:
Без этого про ГЛОНАСС можно забыть.
но даже с этим и сдвигом 0.5 … 0.7 м тоже можно забыть :expressionless:

Сейчас планово увеличил скорость солнечный ветер и ГЛОНАСС
унесло за 2 часа наблюдений на ~ 20 метров

Увы :frowning:

Да, кодовые измерения были сглажены фазовыми (т.е. уменьшен шум кодовых измерений и эффект многопутности). В результате мы видим более-менее реальную точность СДКМ. А так из-за кодовых шумов был бы круг с радиусом 1-1.5м.

В идеальных условиях выглядит красиво :), но на практике шумы в несколько раз выше.

Тут надо разбираться. В том файле, что вы предоставили, некоторые измерения псевдодальностей ГЛОНАСС явно были аномальными. Есть предположение, что этот приёмник некорректно работает с ГЛОНАСС + непонятно, что там с фазовым центром антенны. Во всяком случае, это смещение никак не связано с поправками СДКМ. На тех приёмниках, что есть в моём распоряжении, точность ГЛОНАСС+СДКМ ничем не хуже точности GPS+СДКМ.

Скорее всего это просто некорректная работа вашего приёмника и солнечный ветер тут не причём.