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

Большое спасибо. Извините, я новичок в этом форуме, просто не могу найти его в своем почтовом ящике. Не могли бы вы повторно отправить его на «mfkiwl@gmail.com»?

Many thanks. Sorry, I just can’t find it in my mailbox. Could you re-send it to “mfkiwl@gmail.com”?

отправил :slight_smile:

Я это получил . Большое спасибо

Still nothing, please try again to: “carrzleon@gmail.com
Thanks

отправил

Можно и мне 301_rom_m8n_eFuse.cmd???

а зачем оно вам ? :smiley:
вы же используете Polaris Alpha RTK или Ublox F9P

есть славный PPP Manual using RTKLIB
однако RTKLIB это freeware, естественно в нем может быть всё что угодно включая умышленные закладки :laughing: для возможности улучшения клиенту за бабки :wink: например, одна из многих чудесных закладок


	if (opt_.mode!=PMODE_SINGLE) { /* for precise positioning */
#if 0
		opt_.sateph =EPHOPT_BRDC;
#endif
//!!!		opt_.ionoopt=IONOOPT_BRDC;
//!!!		opt_.tropopt=TROPOPT_SAAS;
	}

//!!! показывает как её патчить, не нарушая красоту for precise positioning :slight_smile:

даже великий блогер-патчеватель rtklibexplorer тож юзает с этой закладкой :stuck_out_tongue:

И в чём же она заключается?
Что в коде не перезаписывают выбранные пользователем опции?
Или что? Может раскроете свою мысль полнее?

в том например, что в PPP Manual using RTKLIB указано** Iono-Free LC**

которому соответствует IONOOPT_IFLC а не IONOOPT_BRDC (броадкаст) и как итог
реально будет вычисляться поправка не IONOOPT_IFLC и не IONOOPT_BRDC :smiley: а нечто слегка отфонарное :laughing:

и т.д. и т.п. :wink:

-1

Ничего не понял. Зачем в коде прописывать какую-то конкретную опцию, если она должна выбираться пользователем библиотеки в настройках?
Потому эти строчки и закомментированны, что это какая-то временная отладка была, которую не вычистили пока.

:smiley:
закомментировал я :stuck_out_tongue: читайте внимательно
в оригинале они выглядят так


	if (opt_.mode!=PMODE_SINGLE) { /* for precise positioning */
#if 0
		opt_.sateph =EPHOPT_BRDC;
#endif
		opt_.ionoopt=IONOOPT_BRDC;
		opt_.tropopt=TROPOPT_SAAS;
	}

появились эти строки 10 лет назад, начиная с версии 2.4.0 :sunglasses:

на то она и закладка :wink:
юзверь думает что выбрал настройки, ат нет, выбирать можно но выполнять их никто не обещает :laughing:

Смешно :). Это файл pntpos.c, функция pntpos(…). Опция PMODE_SINGLE указывает, что пользователь хочет получить автономное решение. В данном режиме можно использовать и высокоточные орбиты, и часы и поправки SBAS и иосноферно-свободную комбинацию (IONOOPT_IFLC) и все настройки которые выбрал пользователь будут применены. Но, когда пользователь выбирает решение PPP или RTK (т.е. opt_.mode!=PMODE_SINGLE), то функция pntpos используется только для контроля целостности (RAIM) и предварительной оценки смещения часов приёмника (всё остальное будет оценено на следующем этапе в фильтре Калмана). А тут всё равно какие опции тропосферы и ионосферы использовать, видно разработчики RTKLIB решили, что так будет наиболее оптимально.

ржачно :smiley:
ибо с pntpos(…) в конце концов даже с выключенной RAIM **идет вызов prange ** (psendorange with code bias correction)


/* psendorange with code bias correction -------------------------------------*/
static double prange(const obsd_t *obs, const nav_t *nav, const double *azel,
					 int iter, const prcopt_t *opt, double *var)
{
	const double *lam=nav->lam[obs->sat-1];
	double PC,P1,P2,P1_P2,P1_C1,P2_C2,gamma;
	int i=0,j=1,sys;

	*var=0.0;

	if (!(sys=satsys(obs->sat,NULL))) return 0.0;

	/* L1-L2 for GPS/GLO/QZS, L1-L5 for GAL/SBS */
	if (NFREQ>=3&&(sys&(SYS_GAL|SYS_SBS))) j=2;

	if (NFREQ<2||lam[i]==0.0||lam[j]==0.0) return 0.0;

	/* test snr mask */
	if (iter>0) {
		if (testsnr(0,i,azel[1],obs->SNR[i]*0.25,&opt->snrmask)) {
			trace(4,"snr mask: %s sat=%2d el=%.1f snr=%.1f\n",
				  time_str(obs->time,0),obs->sat,azel[1]*R2D,obs->SNR[i]*0.25);
			return 0.0;
		}
		if (opt->ionoopt==IONOOPT_IFLC) {
			if (testsnr(0,j,azel[1],obs->SNR[j]*0.25,&opt->snrmask)) return 0.0;
		}
	}
	gamma=SQR(lam[j])/SQR(lam[i]); /* f1^2/f2^2 */
	P1=obs->P[i];
	P2=obs->P[j];
	P1_P2=nav->cbias[obs->sat-1][0];
	P1_C1=nav->cbias[obs->sat-1][1];
	P2_C2=nav->cbias[obs->sat-1][2];

	/* if no P1-P2 DCB, use TGD instead */
	if (P1_P2==0.0&&(sys&(SYS_GPS|SYS_GAL|SYS_QZS))) {
		P1_P2=(1.0-gamma)*gettgd(obs->sat,nav);
	}
	if (opt->ionoopt==IONOOPT_IFLC) { /* dual-frequency */

		if (P1==0.0||P2==0.0) return 0.0;
		if (obs->code[i]==CODE_L1C) P1+=P1_C1; /* C1->P1 */
		if (obs->code[j]==CODE_L2C) P2+=P2_C2; /* C2->P2 */

		/* iono-free combination */
		PC=(gamma*P1-P2)/(gamma-1.0);
	}
	else { /* single-frequency */

		if (P1==0.0) return 0.0;
		if (obs->code[i]==CODE_L1C) P1+=P1_C1; /* C1->P1 */
		PC=P1-P1_P2/(1.0-gamma);
	}
	if (opt->sateph==EPHOPT_SBAS) PC-=P1_C1; /* sbas clock based C1 */
	*var=SQR(ERR_CBIAS);

	return PC;
}


в которой стоит проверка


if (opt->ionoopt==IONOOPT_IFLC) { /* dual-frequency */

а поскольку у нас закладка, т.е. всегда


opt_.ionoopt=IONOOPT_BRDC;

то prange всегда будет сваливать на

else { /* single-frequency */

и никогда на dual-frequency :stuck_out_tongue: а я как раз играюсь с обсервациями PPP dual-frequency, потому и заметил.

Да, абсолютно, верно. И на точности PPP решения это никак не скажется. Так как скорректированные псевдодальности из pntpos в ppp решении не участвуют, я писал об этом выше. В файле ppp.c используется своя функция для вычисления ионосферо-свободной комбинации.

Ну если вы во всём этом разобрались - может найдёте тогда почему single frequency PPP, работающий в 2.4.2, в 2.4.3 поломался, в то время как dual frequency работает на обоих версиях.

а на чем сказывается ? :smiley:
ибо если сделаем


/* psendorange with code bias correction -------------------------------------*/
static double prange(const obsd_t *obs, const nav_t *nav, const double *azel,
					 int iter, const prcopt_t *opt, double *var)
...
...
...
	*var=SQR(ERR_CBIAS);
	PC = 0;
	return PC;


то PPP решение вообще отсутствует :laughing:

как раз этим и занимаюсь :smiley:
надо сказать что в 2.4.2 работает весьма коряво :confused:
разница между single frequency PPP и Single почти незаметна

dual frequency в 2.4.3 как и в 2.4.2 как уже показал работает через жжжж :open_mouth: