Аааа.... Так речь про SiRF II - это его фича, ничего сделать нельзя. Я давно как-то писал об этом. На сегодня, суммируя SiRF Star II - есть фаза, измерения не синхронизированы с GPS Time SiRF Star III - нет фазы, измерения синхронизированы с GPS Time SiRF Star IV - есть фаза, измерения синхронизированы с GPS Time т.е. самый продвинутый вариант - SirfStarIV
Откройте спойлер и посмотрите кусок RINEX для SirfStarIV - "хвост" тоже остается, просто он много меньше, чем у SirfStarII Сейчас включу GlobalSat BT-338 (SirfStarIII) и повторю запись для него.
Вот это будет обидно... Я про SiRF Star IV... Сейчас прицепил к своей программе - не соединяется. Придется вернуться к программированию :)
Если у Lottarend получается вот так: то я что-то напутал, но 2-й день ищу не вижу. Семь девяток после запятой вполне хватит. Поэтому просьба к Lottarend показать свой кусок кода, если нетрудно, то с краткими комментариями. Вот что выдает BT-338 (SirfStar-III): Код: 13 02 28 14 42 31.0001754 0 11G7G5G26G28G3G13G19G6G21G8G10 20460856.496 -1843520.896 3295.914 0 22020053.365 -1861052.458 90.883 2 22472398.997 -1861052.458 -3448.023 0 23151023.180 -1861052.458 -3448.023 0 22894723.224 -1861052.458 -3448.023 0 23339929.591 -1861052.458 -3448.023 0 23668985.833 -1861052.458 -3448.023 0 23953232.354 -1861052.458 -3448.023 0 25801647.001 -1861052.458 -3448.023 0 20614022.241 -1861052.458 -1163.156 2 22939190.018 -1861052.458 3295.313 0
Да все так же, как у вас, там ничего сложного нет. У меня все замечательно работает, единственное что иногда Sirf3 время не синхронизирует, если его долго до этого не включали, помогает только перезапуск приемника. Код: //b - массив байтов, методы Get читают заданное количество и возвращают uint int fullGPSWeek = (int)b.Get2(); double trueTOW = b.Get4() / 100.0; uint svs = b.Get(); int clockDrift = (int)b.Get4(); int clockBias = (int)b.Get4(); // а вот и оно int EstimatedGPSTime = (int)b.Get4(); double biasInSec = clockBias / 1000000000.0; //перевожу в секунды ... if (mode == ProcessingMode.CreateCorrection && writeCorrectionFile) { ... for (int i = 0; i < sattelites.Count; i++) { //класс данных о спутниках, содержит данные из уже прошедшего MID28 Sattelite sat = sattelites; sat.measuredPr -= C * biasInSec; //правим псевдодальность sat.gpsTime -= biasInSec; //[gpsTime из mid28] - biasInSec //теперь скорректированное gpsTime можно использовать ... }
А вы точно с эпохами не напутали? Сначала идет MID28, в самом конце MID7, MID7 нужно применять к уже прошедшему MID28. У вас так все?
Конечно напутал. ClockBias из предыдущей эпохи шел поправкой в текущую эпоху. Исправил и теперь программа падает после приема 2-й эпохи. До введения поправок все шло гладко-линейно во времени: получил пакет, обработал, записал - и к следующему пакету. А теперь надо сохранять массив MID-28 и обработать его можно только в следующей эпохе Но вижу, что после введения поправки TOW имеет вид 466554.000910621 - 0.000910747 = 466553.999999874 т.е. остается 0.000000126 сек недо-исправленных. С этим конечно можно мириться, но как говорят евреи "некошерно".
Во "взрослых" приемниках то же самое. Спутник за это время переместится всего на 0.5мм - такова цена рассинхронизации между базой и ровером. В обработке даже это компенсируется через интерполяцию, ведь SiRF Star II рассинхронизирован на доли секунд - и всё считается нормально... Ну и не забываем что частота дискретизации всего 16MHz - т.е. показания с каналов снимаются в целочисленные отрезки времени, а рассчеты проводятся с плавающей запятой.
А для чего можно использовать Carrier-Frequency (MID28.C1 = MID28.C1 - RcvClBias * LIGHTSPEED / 1575420000;) ?
Исправил приведение времени для SirfStar протокола. Пока проверил только на GlobalSat BU-353S4. Но приведенное время все-таки "качается" между x1.9999999 и x2.0000003 сек. Исправил уровни сигналов в RINEX-OBS файле (с Гармин формулы на RINEX формулу - так краше). Надеюсь на тестирование программы коллегой umots (Геноссе umots, пока не довел программу до ума, файл xxxx_Parsing.txt рано списывать.) То что сказал chnav о приведении времени в SirfStar-II и SirfStar-III совсем не радует. Я ведь затеял приведение времени к целой секунде только из-за намерения проверить возможность псевдо-RTK без использования RINEX-файлов и программ пост-обработки, то есть только с помощью автономных файлов координат на БАЗЕ и на РОВЕРЕ. Такм образом, пока, единственный кандидат на эту миссию приемник GlobalSat BU-353S4 (SirfStar-IV). На скриншоте окошки программы и фрагменты файлов xxxx_Parsing.txt и xxxx_Observer.obs
Я тут решил провести еще один тест... Разместить базу и ровер далеко друг от друга (ну, не так уж и далеко, где-то километр, или половина от этого). И мне нужно как-то оценить точность результатов. Точных координат своей базы (использую для этого еще один приемник) я не знаю, поэтому задаю их на основании усредненных от приемника за 10-минутный интервал с наименьшим hdop. Когда я буду передавать поправки с базы на ровер, как мне оценить точность отклонения от истинной позиции ровера? Усреднять скорректированные координаты ровера? Но так я получу неизвестную ошибку с неизвестной величиной... Отошлите меня куда-нибудь, где можно об этом почитать, пожалуйста.
В такой ситуации лучше разместить БАЗУ и РОВЕР на расстоянии (друг от друга), которое можно достаточно точно измерить: например рулеткой. Тогда для БАЗЫ введете координаты из усреднения хоть за 2 часа, хоть за 5 минут - особого значения это не имеет (от этого только полученный вектор может немного "крутиться вокруг базы, но на его величину это не влияет). А вот совместную работу их хорошо бы провести не менее часа. Если Вы потом этот час (RINEX файлы) обработаете в чем-то проф. (TopconTools, GNSS-Solutions, LGO), то полученные результаты - а это будет вектор БАЗА-РОВЕР Вы сравните с измеренным рулеткой расстоянием. Это и будет практическая точность измерений. К тому же на коротких расстояниях исключаются многие ошибки (ионосфера и другие) и созвездия спутников для БАЗЫ и РОВЕРА практически одинаковые, что тоже повышает точность. С передачей поправок на РОВЕР в реальном времени (это ведь RTK?) я еще не разобрался, поэтому говорю просто про оценку точности измерений БАЗА-РОВЕР. Но эта оценка далее будет справедлива и для RTK. Посмотрите терки на эту тему: http://forum.openstreetmap.org/viewtopic.php?id=9451&p=16 #383 и немного назад #343
Если строго, то есть рекомендации mikg-43-05. 1. В п. 7.2 растояние сравнивается с образцовыми расстояниями на полигоне. 2. В п.п. 7.3 и 7.4 определяется с помощью замкнутых фигур.
Маленький но полезный ЛИКБЕЗ по DGPS (да и пожалуй вся тема): http://forum.openstreetmap.org/viewtopic.php?pid=313295#p313295
камрады, подскажите где почитать как пользоваться РТКлиб RTKlib. ситуация: 1. имею две пост.действующие реф.станции 2. между ними 33 км 3. в сеть передаю поправки RTCM 3 и RTCM 2, оригинальный формат - CMR (но RTKNavi с ней не работает) 4. одну станцию завожу как ровер, вторую как базу (ввожу координату, она известна) - ставлю режим L1+L2 статика или киематика. 5. остальные параметры по умолчанию. 6. решение дает только плавающее. собственно смущает отсутствие фиксированного решения, может это связано с недоделкой программы(???)