juan_gandhi: (Default)
Остаётся рассказать, как читать сигналы gps, если в вашем устройстве есть такой чип.

Пропустим вопросы конфигурации и инициализации, это всё детали. Предположим, что у вас уже всё подключено, прогрето, сконфигурировано, gps нашел свои спутники и готов поделиться информацией. Взять её у него - наша задача.

Gps передаёт свою информацию по последовательному порту, на 4800 baud. Каждый блок представляет собой несколько строк ASCII символов. Каждая строка начинается с идентификатора. Есть стандарт на контент, но есть и реальность, в которой а) стандарт не всегда соблюдается, и б) proprietory форматы содержат много интересного, чего нет в стандартной информации.

Вот некоторые из идентификаторов:

$GPZDA - работает как часы, т.е. сообщает время и дату;
$GPRMC - минимальный источник текущего положения
$GPGGA - типичный источник текущего положения ("gps fix")
$GPGLL - ещё один альтернативный источник текущего положения
$GPGSA - сведения об использованных спутниках и точность по вертикали и по горизонтали

Так как самое интересное - это gps fix, то эти три, GPGGA, GPGLL, GPRMC я и приведу в деталях.

<
GP*** Время, Широта, Долгота  Высота  Скорость  Курс  Точность  Пример  Интерпретация 
RMC + + + + + $GPRMC,081836,A,3751.65,N,4507.36,E,010.0,117.0,221009,011.3,E*42 t=08:18:36, all ok, lat=37°51.65' North, lon=45°7.36' East, speed=10 knots, course=117°, date=Nov.22,2009, magnetic deviation=11.3° East, and 42 is the checksum
GGA + + - - + $GPGGA,180823.30,3751.65,N,4507.36,E,1,09,3.1,271.8,M,-34.5,M,5.5,1234*42 t=08:18:36, lat=37°51.65' North, lon=45°7.36' East, source: satellite, 9 satellites, horizontal precision 3.1 m, altitude 271.8 m, geoid height above ellipsoid -34.5, age of DGPS data = 5.5 sec, DGPS id = 1234; and 42 is the checksum
GLL + - - - - $GPGLL,3751.65,N,4507.36,E,180823.30,A lat=37°51.65' North, lon=45°7.36' East; t=08:18:36; A means data valid


Есть много различных видов данных от GPS; разные GPS возвращают разные пакеты данных. Странное отсутстие высоты в минимальном пакете объясняется тем, что стандарт разрабатывали моряки, а у моряков пространство двумерное, они про высоту ничего не знают. А глубину GPS не меряет.

На этом я заканчиваю свои записки. Пользуйтесь этими данными как считаете нужным.

Ещё несколько замечаний на тему распространённых мифов.

- GPS передаёт данные на спутник. Это нужно верить в чудеса, чтобы полагать, что 30 спутников на высоте 20 тыс км в состоянии принять сигналы от, небось, полумиллиарда мобильников и навигаторов; если ещё учесть мощность сигнала мобильника... ну вы поняли.

- нужна постоянная видимость спутника. Нет; на самом деле, некоторые устройства могут проэкстраполировать ваше движение в тоннеле; кроме того, репитеры, aka DGPS, во множестве размещены по городам и весям; у нас в конторе, например, несколько таких репитеров висит просто на потолке; я так понимаю, что и в Гугле тоже эти приборы понатыканы; вскоре они появятся и в аэропортах, если уже не появились.

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

Замечания приветствуются. Через недельку я это перегоню в pdf и помещу у себя на сайте.
juan_gandhi: (Default)
Ну вот, теперь мы получаем с более чем трёх спутников информацию об их положении в пространстве и о том, который на спутнике час. Остаётся вычесть разницу между показаниями наших часов и часов на спутнике, умножить на скорость света - и пожалуйста, имеем расстояние до каждого спутника. Вычисляем пересечение сфер. Две сферы - будет круг, три сферы могут пересечься с кругом в двух точках. Ну или мы найдём точку, ближайшую к кругу и к третьей сфере.

Но для этого надо знать расстояния. Расстояния получаются, если умножить скорость света на время. Скорость света на частоте L1 практически такая же, как и в вакууме; а время вычисляется путём вычитания времени на gps от времени, пришедшего с сигналом. Но тут закавыка получается. Откуда мы знаем, что наш gps синхронизирован со спутниками? Конечно же, нет.

Поэтому на самом деле задачу надо решать не в трёхмерном, а в четырёхмерном пространстве; четвёртое измерение - время; и для этого нужна четвёртая точка, в смысле - четвёртый спутник. Простой способ может быть, например, таким:

- вычислили точку по трём спутникам, в предположении, что часы синхронизированы;
- для четвёртого спутника вычислим расстояние двумя способами: умножением c * dt и по полученным координатам точки;
- разница между этими двумя расстояниями получена из-за расхождения часов. Теперь мы знаем точное время. Сделаем поправку на наших часах;
- по исправленному времени пересчитаем наши координаты.

На самом деле, конечно, можно использовать больше четырёх спутников и применять метод наименьших квадратов, минимизируя суммарную ошибку.

Ну а если время сошлось, то поправка и не нужна.

Разумеется, точно не получится; ионосфера преломляет сигнал, давая ошибку до 5 метров; тропосфера преломляет; сигнал отражается от предметов; немножко ошибаются часы на спутниках; эфемериды вычислены неточно. Проще всего устранить ошибку из-за задержек при получении сигнала и вычислении, т.к. все эти данные постоянны; ошибка вычислений тоже легко оценивается. С остальным приходится мириться, ну или усреднять по МНК.

Другой способ устранять ошибки - использовать наземные станции DGPS. Эти станции передают сигнал на низких частотах, и если в вашем приборе есть приёмник, то его сигнал можно использовать, и улучшить точность до сантиметров - как если бы вы использовали военный сигнал P(Y). Первоначально наземные станции были внедрены, чтобы устранить искусственную ошибку, скажем, в авиации - но теперь, хотя и спутники уже не врут, такие станции стоят где ни попадя.

Теперь о теории относительности. Как известно, Институт Теоретической Астрономии АН СССР ещё в 1985-м делал вычисления, не учитывая теорию относительности. С.С.Лавров уломал их признать Эйнштейна. С навигацией же без Эйнштейна никак.

У нас имеют место три релятивистских фактора:
- ОТО: на земле гравитация сильнее, чем на высоте 20 тыс км, и в результате наши часы отстают от спутниковых на 45.9 микросекунды в сутки;
- СТО: спутники летают относительно нас, поэтому их часы отстают от наших на 7.2 микросекунды в сутки;
- Эффект Саньяка: мы тут на земле тоже вертимся, и поэтому наши часы относительно спутниковых то спешат, то отстают, в зависимости от того, спутник на западе или на востоке от нас.

Альтернативы.

Китай разрабатывает свою систему, Япония - свою, Индия - свою. Но Индия ещё и с Россией стусовалась на почве использования ГЛОНАСС. В 2007-м году Путин подписал указ, разрешаюший гражданское использование ГЛОНАССа. (Карта покрытия глонасса, сдёрнутая из википедии, выкинута, как не соответствующая законам Ньютона и Кеплера и тому факту, что Земля круглая и вертится.)
juan_gandhi: (Default)
Да, хочу добавить, что если Вы собаку съели на этом деле, то единственной причиной читать то что я тут пишу было бы только желание поправить - you are welcome!

Итак, недоуменный вопрос номер один: а как это на одной частоте передают со всех спутников, и мы при этом не путаем их сигналы?

Делается это так:



На нашу частоту L1 (ну и L2 тоже) накладывается сигнал, полученный из C/A кода и собственно информации. Применяется фазовая модуляция, но это роли не играет; важно другое.

После демодулирования полученной приёмником L1 мы получаем последовательность бит с частотой 1.023 мегагерца. Эти биты представляют собой сумму (по модулю 2, т.е. xor) кода C/A и собственно информации. Код C/A есть последовательность 1023 бит, повторяющаяся каждую миллисекунду. Собственно информация имеет частоту 50 герц, так что каждый информационный бит растянут на 20 копий A/C.

Ну и как же мы различаем все эти потоки информации? А вот как.

Последовательность из 1023 бит можно представить как вектор в 1023-мерном пространстве, над полем Z2, т.е. над полем целых чисел по модулю 2. В этом поле сложение - то же самое, что и xor, а умножение - and, если считать 1 за истину, а 0 за ложь.

Все эти последовательности обладают специфическим свойством:

их корреляция близка к нулю;
их автокорреляция близка к дельта-функции, т.е. равна единице только если сдвиг равен нулю.

Отсюда следует, что, зная один вектор, можно вычислять корреляцию с поступающим сигналом, и когда поймаем единицу, то считай поймали носитель.

В качестве таких последовательностей можно (и нужно) брать коэффициенты неприводимых полиномов по модулю 2. (Хмм... не в курсе, что такое неприводимые полиномы? Это такие полиномы, коорые не раскладываются в произведение других полиномов.)

Для степени 1023 таких полиномов, говорят, будет всего 1025, но нам достаточно 30. Теперь, что мы делаем, чтобы выловить сигнал? Мы ловим эти биты и умножаем на образцы векторов; как только получили произведение, равное количеству единичных бит, так, значит, словили сигнал; и теперь можно извлекать информацию. Это сравнение можно делать параллельно для всех тридцати векторов, и таким образом выловить сразу несколько сигналов.

Переходим к собственно информации, передаваемой, как я уже писал выше, на частоте 50 герц.

В пакете содержатся заголовок, собственное время спутника, его эфемерида и альманах.

Альманах содержит сведения о текущем положении всех спутников - эта информация меняется редко, посмотреть её можно здесь. Каждый спутник передаёт эти данные; имея их, можно сообразить, какие спутники должны быть сейчас видны.
Вот кусочек альманаха:
ID: 01
Health: 063
Eccentricity: 0.3799438477E-002
Time of Applicability(s): 233472.0000
Orbital Inclination(rad): 0.9620113373
Rate of Right Ascen(r/s): -0.7807102520E-008
SQRT(A) (m 1/2): 5153.624512
Right Ascen at Week(rad): 0.1154047132E+001
Argument of Perigee(rad): 0.981060147
Mean Anom(rad): -0.2126137018E+001
Af0(s): -0.6103515625E-004
Af1(s/s): 0.0000000000E+000
week: 530

ID: 02
Health: 000
Eccentricity: 0.9121417999E-002
Time of Applicability(s): 233472.0000
Orbital Inclination(rad): 0.9411659241
Rate of Right Ascen(r/s): -0.7792550605E-008
SQRT(A) (m 1/2): 5153.675293
Right Ascen at Week(rad): -0.3042662144E+001
Argument of Perigee(rad): 2.906376719
Mean Anom(rad): 0.1646851182E+001
Af0(s): 0.1831054688E-003
Af1(s/s): 0.3637978807E-011
week: 530


Эфемерида - точные сведения об орбите конкретного спутника; эти сведения годны в течение четырёх часов.

Но главное, что требуется, чтобы оперативно и точно определить наше положение - это который час на спутнике.

Про это я напишу в следующей части.
juan_gandhi: (Default)
Я ж обещался написать, а.

Итак, все знают, что в небе, на полустационарной орбите (т.е. примерно 20 тыс км, период примерно 12 часов) летает до 30 спутников, под разными углами, так что отовсюду и всегда видно штук пять-десять.


Все эти спутники шлют сигналы на как минимум двух частотах (L1=1575.42 MHz и L2=1227.60 MHz).

В вашем телефоне расположен чип (15 на 17 мм), и антенна, и этот чип ловит сигналы спутников, сколько именно, зависит от качества чипа.

Поймав эти сигналы, хитрый чип для каждого спутника расшифровывает положение спутника (передаётся в сигнале) и вычисляет расстояние до него. Так как наше пространство условно можно считать трёхмерным, то расстояния до четырёх опорных точек должно быть достаточно, чтобы узнать координаты точки.

В принципе, и трёх бы спутников хватило. Рисуем сферу радиуса R1 вокруг одного спутника, сферу радиуса R2 вокруг второго - в пересечении получается окружность; эта окружность пересекается со сферой радиуса R3 в двух точках; ну и эвристика подскажет, какая из двух. Даже и двух спутников хватит, если предположить, что мы находимся на поверхности Земли - вот вам и третья сфера.

Ну а если у нас больше чем три спутника, а, скажем, 5-8, то у нас много излишней информации, и мы можем очень хорошо избавиться от накапливающихся ошибок в вычислениях, используя Метод Наименьших Квадратов - т.е. вычислить точку, где суммарная квадратичная ошибка минимизируется. МНК удобная вещь, состоит в решении системы линейных уравнений, и даже в случае плохой, даже вырожденной матрицы есть очень миленькие методы, позволяющие найти решение.

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

Вот про это-то я и расскажу в следующих частях, а пока немножко беллетристики.

Из этих двух частот первая, L1, имеет общегражданское назначение, и даёт нам точность до трёх метров. L2, военная, помогает скорректировать результат до 30 см. Но это ещё что. До 2000-го года в сигнал L1 нарочно вводилась ошибка, снижающая точность до 10 метров по горизонтали и 30 по вертикали. Чтобы вражеские ракеты не ориентировались. А L2 как раз передавал поправку, но этот сигнал был зашифрован. Ну конечно ездить по Америке с точностью 10 метров не по кайфу, и поэтому на земле порасставлены станции DGPS, корректирующие сигнал. Эту ошибку отключали в 90-м, во время Gulf war, потому что в армии навигаторов не хватало, и они скупали гражданские - так чтоб не заблудились солдатики.

Ошибку должны были снять только к 2006-му году, но военные насобачились избирательно ставить ошибку, так что тогда же, 1-го мая 2000-го года, её и отменили.

Вообще, сейчас входит в моду устанавливать наземные станции GPS даже в зданиях, скажем, в аэропортах и в корпусах Гугла, чтобы можно было ориентироваться без всяких спутников и даже знать, на каком мы этаже, и показывать на телефоне план этажа.

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

May 2025

S M T W T F S
    1 2 3
456 7 8 9 10
11 121314151617
18192021222324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 15th, 2025 02:46 pm
Powered by Dreamwidth Studios