Специфікація даних

Ключові моменти:

  • Z18_MEAS: 95-байтові бінарні пакети вимірювань (один супутник на пакет)
  • Z18_POS: 56 байтів (дані позиції)
  • Z18_GPS_EPH: 124 байти даних + 1 байт контрольної суми XOR = всього 125 байтів
  • Z18_GLO_EPH: 80 байтів даних + 2 байти контрольної суми Sum16 = всього 82 байти
  • Z18_GPS_ALM: 68 байтів даних + 2 байти контрольної суми Sum16 = всього 70 байтів
  • Z18_GLO_ALM: 42 байти даних + 2 байти контрольної суми Sum16 = всього 44 байти
  • GG24_MEAS: 37-байтові бінарні пакети вимірювань
  • GG24_POS: 56 байтів (ідентично Z18_POS)
  • GG24_* EPH/ALM: ідентично відповідним форматам Z18
  • Контрольні суми: XOR (MEAS, GPS_EPH); Sum16 (POS, GLO_EPH, GPS_ALM, GLO_ALM)
  • Порядок байтів: Big-endian IEEE 754
  • remainingStructures за байтовим зміщенням 2
  • Чистий бінарний формат, без обгорток NMEA

Таблиця 1. Структура даних вимірювань приймача Z18 (MPC)

Поле Кількість байтів Зміст
unsigned short 2 Номер послідовного ID в одиницях 50 мс, за модулем 30 хвилин
unsigned char 1 Кількість структур, які залишилося надіслати для поточної епохи
unsigned char 1 Номер PRN супутника (1–56). Трансльовані ефемериди GLONASS не містять номер слота; він береться з альманаху. Коли ефемериди є, а альманах відсутній (наприклад, після INI), номер супутника встановлюється в 0 до отримання альманаху.
unsigned char 1 Кут підвищення супутника (градуси)
unsigned char 1 Азимут супутника (одиниці по 2 градуси)
unsigned char 1 ID каналу (1–18)
Блок даних коду C/A Структурований блок даних (29 байтів), див. розбір нижче
unsigned char 1 Прапорець попередження
Біти 0–1 (двобітовий стан):
00 — вимірено код та/або фазу несучої
01 — вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання не використовується для обчислення позиції
10 — вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання використовується для обчислення позиції
Інші біти:
2 — фаза несучої сумнівна
3 — фаза коду сумнівна
4 — інтегрована фаза коду нестабільна
5 — не використовується
6 — можлива втрата захоплення сигналу
7 — скинуто рахівник втрати захоплення сигналу
Примітка: одночасно може бути встановлено більше одного біта.
unsigned char 1 Прапорець Good/Bad — прапорець доступності та використання вимірювання:
0 — вимірювання недоступне, додаткові дані не надсилатимуться
22 — вимірено код та/або фазу несучої
23 — вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання не використовується для обчислення позиції
24 — вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання використовується для обчислення позиції
char 1 Polarity_know (0 або 5):
0 — супутник лише захоплено
5 — знайдено преамбулу; полярність відстеження фази відома й врахована (фазу можна використовувати для розв’язання неоднозначності)
unsigned char 1 Відношення сигнал/шум для спостереження супутника
unsigned char 1 Завжди 0 (не використовується)
double 8 Повне вимірювання фази несучої в циклах
double 8 Raw_range — сира дальність до супутника в секундах (час прийому − час передачі).
Примітка: якщо TSC встановлено на GPS, псевдодальності GLONASS міститимуть зсув +13 секунд.
Якщо TSC встановлено на GLO, псевдодальності GPS міститимуть зсув −13 секунд.
long 4 Доплер (10⁻⁴ Гц)
long 4 Параметри згладжування
Біти 0–22 — величина (у сантиметрах)
Біт 23 — знак
Біти 24–31 — рахівник згладжування:
  0 — без згладжування
  1 — мінімальне згладжування
  100 — максимальне згладжування
Блок даних P-коду (L1) 29 Та сама структура, що й блок даних коду C/A
Блок даних P-коду (L2) 29 Та сама структура, що й вище
unsigned char 1 Контрольна сума (XOR усіх байтів цієї структури, використовується лише в MCA)
Усього байтів 95

📘 Що таке MPC?

Кожна структура MPC (Measurement Per Channel — вимірювання на канал) являє собою набір вимірювань, отриманих від одного супутника на одному каналі приймача (Z18) у конкретний момент часу.

Структура має фіксований розмір 95 байтів, незалежно від вмісту.

📦 Загальна структура MPC

Поле Розмір (байти) Опис
Порядковий ID2Час (в одиницях 50 мс, за модулем 30 хвилин)
Структур, що залишилося в епосі1Скільки структур MPC залишилося в цій епосі
PRN супутника1Номер супутника (1–56)
Підвищення1Кут підвищення (градуси)
Азимут1Азимут (кроки по 2°)
ID каналу1Номер каналу (1–18)
Блок коду C/A29Структурований блок для відкритого коду C/A
P-код на L129Та сама структура, що й C/A (часто зашифрований)
P-код на L229Та сама структура, що й вище (діапазон L2)
Контрольна сума (XOR)1XOR усіх попередніх байтів
Усього95 

🧱 Усередині блоку коду C/A (29 байтів)

Цей блок містить 9 полів. Та сама структура використовується для P-коду в обох діапазонах L1 та L2. Навіть якщо поле не використовується, його місце зберігається для збереження узгодженості формату.

Поле Розмір (байти) Опис
Прапорець попередження1Бітова маска (наприклад, втрата сигналу, недійсне вимірювання)
Прапорець Good/Bad1Статус вимірювання (наприклад, 0, 22, 23, 24)
Полярність відома1Полярність фази відома (0 або 5)
SNR1Відношення сигнал/шум
Завжди нуль1Поле завжди встановлено в 0
Фаза несучої8Повна фаза несучої (у циклах, double)
Сира дальність8Псевдодальність у секундах (double), може містити зсув ±13 сек
Доплер4Частота Доплера (×10⁻⁴ Гц, long)
Згладжування4Бітово структуроване значення: величина, знак, рівень згладжування
Усього29 

❓ Чому 95 байтів, а не 124?

Можна подумати: 3 блоки по 29 байтів (87), плюс 7 байтів заголовка, плюс 1 контрольна сума — звучить як 95, але що щодо 9 внутрішніх полів, повторених 3×? Хіба це не мало бути 124 байти?

Ні. Тому що кожен 29-байтовий блок уже інкапсулює свої 9 полів. Вони не зберігаються окремо — структура використовується тричі, з різними значеннями.

🔐 А що щодо блоків P-коду?

Блоки P-коду (L1 та L2) фізично присутні в кожній структурі для збереження універсального формату MPC. Однак у цивільному обладнанні ці блоки зашифровані й не використовуються. У цивільних приймачах використовується лише блок коду C/A.

Блоки P-коду показані лише для пояснення фіксованої історичної структури пакету. Тут вони не використовуються з жодною операційною метою.

🧠 Підсумок

  • Структура MPC фіксована: завжди 95 байтів
  • Активно використовується лише блок коду C/A
  • Внутрішній вміст блоків не рахується багаторазово
  • Розбір за байтовими зміщеннями завжди надійний

Таблиця 2. Структура даних вимірювань приймача GG24

Поле Кількість байтів Зміст
unsigned short 2 Номер послідовного ID в одиницях 50 мс за модулем 30 хв
unsigned char 1 Кількість структур, які залишилося надіслати в поточній епосі
unsigned char 1 Номер супутника (1-56). Трансльовані ефемериди супутника GLONASS не містять номер слота супутника. Ця інформація береться з альманаху. Коли GG24 має ефемериди, але не має альманаху (після скидання пам’яті командою INI), номер супутника встановлюється в 0. Після отримання альманаху номер супутника оновлюється.
unsigned char 1 Кут підвищення супутника (градуси)
unsigned char 1 Азимут супутника (одиниці по 2 градуси)
unsigned char 1 Номер каналу (1-24)
unsigned char 1 Прапорець попередження
Біт 1
0 - вимірено код та/або фазу несучої
1 - вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання не використовується для обчислення позиції
Біт 2
0 - вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання використовується для обчислення позиції
1 - фаза несучої сумнівна
Біт 3
0 - вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання використовується для обчислення позиції
1 - фаза коду сумнівна
Біт 4
0 - вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання використовується для обчислення позиції
1 - інтегровані фази коду нестабільні
Біт 5
0 - вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання використовується для обчислення позиції
1 - не використовується
Біт 6
0 - вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання використовується для обчислення позиції
1 - можлива втрата захоплення сигналу
Біт 7
0 - вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання використовується для обчислення позиції
1 - скинуто рахівник втрати захоплення сигналу
Примітка: одночасно може бути встановлено кілька бітів
unsigned char 1 Прапорець Good/Bad - індикатор якості вимірювання позиції:
0 - вимірювання недоступні, додаткові дані не передаватимуться
22 - вимірено код та/або фазу несучої
23 - вимірено код та/або фазу несучої, отримано навігаційне повідомлення, вимірювання не використовується для обчислення позиції
char 1 Polarity_know - значення 0 або 5:
0 - супутник лише захоплено
5 - знайдено преамбулу, і полярність відстеження фази відома й врахована (вимірювання фази можуть використовуватися для розв’язання неоднозначності)
unsigned char 1 Відношення сигнал/шум для спостережень супутника
unsigned char 1 Завжди 0 (не використовується)
double 8 Повна вимірена фаза несучої в циклах. Недоступна, якщо опція фази несучої не ініціалізована
double 8 Raw_range - сира дальність до супутника в секундах. Обчислюється за формулою: час прийому - час передачі. Примітка: якщо TSF встановлено на GPS, псевдодальність для GLONASS через 11-секундну (наразі) різницю між системним часом GLONASS і системним часом GPS матиме цілу частину 11 секунд.
long 4 Доплер (10⁴ Гц)
long 4 Параметри згладжування
Біти 0-22: значення корекції (сантиметри)
Біт 23: знак (0 = додатний, 1 = від’ємний)
Біти 24-31: рахівник згладжування (беззнакове ціле):
  0 = без згладжування
  1 = мінімальне згладжування
  100 = максимальне згладжування
unsigned char 1 Обчислюється як XOR усіх байтів структури (лише MCA)
37 Лише C/A

Таблиця 3. Структура даних позиції

Поле Кількість байтів Зміст
long rcvtime 4 Час прийому сигналу в мілісекундах системного часу GPS або в мілісекундах тижня/дня системного часу GLONASS (див. команди $PASHS, TSC та $PASHS, SYS для додаткової інформації). Якщо вибрано шкалу часу GLONASS, усі операції виконуються в системному часі GLONASS. Це часова мітка для всіх вимірювань і даних позиції.
char sitename 4 Встановлює рядок, введений користувачем
double navx 8 Координата X позиції антени в метрах
double navy 8 Координата Y позиції антени в метрах
double navz 8 Координата Z позиції антени в метрах
float navt 4 Зсув годинника приймача в мкс
float navxdot 4 Швидкість антени по X у м/с
float navydot 4 Швидкість антени по Y у м/с
float navzdot 4 Швидкість антени по Z у м/с
float navtdot 4 Дрейф годинника приймача в м/с
Unsigned short PDOP 2 PDOP, помножений на 100
Unsigned short checksum 2 Контрольна сума, обчислена розбиттям структури на 27 значень short, їх додаванням і взяттям останніх 16 значущих бітів результату
Усього символів: 56

Таблиця 4. Структура даних ефемерид GPS

Позначення Поле Кількість байтів Зміст
wn short wn 2 Номер тижня GPS [0...1023]
tow long tow 4 Секунда тижня GPS [0...604799]
TGD Float tgd 4 Групова затримка (± 127*2-31) (с)
aDC long aodc 4 Вік даних годинника
toc long toc 4 Опорний час корекції годинника [0...604784] (LSB = 2c)
a2 float af2 4 Корекція годинника (с/с²)
a1 float af1 4 Корекція годинника (с/с)
a0 float af0 4 Корекція годинника (с)
aorb long aorb 4 Вік даних орбіти
Δn float deltan 4 Різниця середнього руху (півкола/с)
M0 double m0 8 Середня аномалія на опорний час (півкола)
e0 double e0 8 Ексцентриситет
√A double roota 8 Квадратний корінь великої півосі (м1/2)
t0E long toe 4 Опорний час ефемерид (с)
CIC float cic 4 Гармонічний поправковий член (радіани)
CRC float crc 4 Гармонічний поправковий член (м)
CIS float cis 4 Гармонічний поправковий член (радіани)
CRS float crs 4 Гармонічний поправковий член (м)
CUC float cuc 4 Гармонічний поправковий член (радіани)
CUS float cus 4 Гармонічний поправковий член (радіани)
Ω0 double omega0 8 Довгота вузла сходження (півкола)
ω double omega 8 Аргумент перигею (півкола)
I0 double i0 8 Кут нахилу (півкола)
Ω̇ float omegadot 4 Швидкість прямого піднесення (півкола/с)
İ float idot 4 Швидкість зміни кута нахилу (півкола/с)
short accuracy 2 Точність зони користувача (URA), коди 0-15:
0 = 2 м, 6 = 16 м, 12 = 1024 м
1 = 2,8 м, 7 = 32 м, 13 = 2048 м
2 = 4 м, 8 = 64 м, 14 = 4096 м
3 = 5,7 м, 9 = 128 м, 15 = прогноз неможливий
4 = 8 м, 10 = 256 м
5 = 11,3 м, 11 = 512 м
short health 2 Стан справності супутника
short fit 2 Інтервал придатності (0)
0 – інтервал = 4 год
Усього 125 124 байти даних + 1 байт контрольної суми XOR

Таблиця 5. Структура даних ефемерид GLONASS

Позначення Поле Кількість байтів Зміст
long 4 Початковий момент 30-секундного кадру в шкалі часу супутника tk, від якого відраховуються ефемериди, час за модулем 1 доба (с)
short 2 Номер дня 30-секундного кадру за модулем номера 4-річного періоду, починаючи з останнього високосного року, що відповідає параметру tb (встановлюється в межах номера дня). Цей параметр змінюється в діапазоні від 1 до 1461. Якщо номер дня = 0, номер дня невідомий (навігаційний кадр відсутній).
tb long 4 Опорний час даних ефемерид у шкалі часу GLONASS = UTC+3u (с)
γη float 4 Зсув частоти γη відносно бортового стандарту частоти на момент tb (безрозмірна величина)
tn float 4 Зсув tn між шкалою часу супутника та системною шкалою часу GLONASS
Yj (j=1..3) double 3×8 Координати супутника X, Y, Z у ECEF (ПЗ-90) (км)
Yj (j=4..6) float 3×4 Швидкості супутника X', Y', Z' у ECEF (ПЗ-90) (км/с)
X'', Y'', Z'' float 3×4 Збурювальні прискорення супутника X'', Y'', Z'' від впливу Місяця та Сонця (км/с2)
τc double 8 Зсув між шкалою часу GLONASS та часом UTC+3u τc (с)
En char 1 Параметр En віку ефемерид (інтервал від моменту завантаження даних ефемерид до tb)
char 1 Комбінація 3-бітового прапорця, що містить П1, П2, П3 (див. ICD GLONASS)
char 1 Прапорець стану справності супутника (0 – справний, 1 – несправний)
char 1 Номер частотного каналу супутника [7, ..., 24]
short 2 Системний номер супутника [1, ..., 24]
unsigned short 2 Контрольне слово, обчислене розбиттям структури на 40 значень unsigned short, їх додаванням і взяттям останніх 16 значущих бітів результату
Усього 82 (95 для структури плюс заголовок і CS <CRC-14>)

Таблиця 6. Структура даних альманаху GPS

Позначення Поле Кількість байтів Зміст
short prn 2 Номер супутника [0, ..., 31]
short health 2 Стан справності супутника
e0 float 4 ε ексцентриситет
tOA опорний час орбіти (с) long 4 Опорний час орбіти
I0 float 4 I0 кут нахилу (півкола)
Ω̇ float 4 Швидкість прямого піднесення (півкола/с)
√A double 8 Квадратний корінь великої півосі (м1/2)
Ω0 double 8 Ω0 довгота вузла сходження (півкола)
ω double 8 ω аргумент перигею (півкола)
M0 double 8 M0 середня аномалія на опорний час
af0 float 4 af0 корекція годинника (с)
af1 float 4 af1 корекція годинника (с/с)
wna short 2 номер тижня альманаху
wn short 2 Номер тижня
long 4 tow секунда тижня GPS [0, ..., 604799]
unsigned short 2 Контрольна сума, обчислена розбиттям структури на short, їх додаванням і взяттям останніх 16 значущих бітів результату
Усього
байтів
70

Таблиця 7. Структура даних альманаху GLONASS

Позначення Поле Кількість байтів Зміст
n short 2 Номер супутника [1, ..., 24]
short 2 Номер частоти супутника [-7, ..., 24]
unsigned short 2 Стан справності супутника 0 – несправний, 1 – справний
ε float 4 Ексцентриситет εA
NA float 4 Опорний номер дня NA (дні в діапазоні від 1 до 146)
Δi float 4 Корекція нахилу ΔiAn (півкола)
λ float 4 Довгота першого вузла сходження λAn (півкола)
tλn float 4 Опорний час довготи першого вузла tAλn (секунди)
ω float 4 Аргумент перигею ωAn (півкола)
af0 float 4 af0 корекція до середнього значення драконічного періоду (секунди)
af1 float 4 af1 = d(af0)/dt (с/с)
offset float 4 Зсув годинника супутника відносно системного часу GLONASS (секунди)
checksum unsigned short 2 Контрольна сума, обчислена розбиттям структури на short, їх додаванням і взяттям останніх 16 значущих бітів результату
Усього байтів 44

3. Детальні описи структур даних і параметрів алгоритмів будуть надані в подальших лекціях та відповідних до них додатках.


Вихідні дані

1. Вихідні дані мають кадрову структуру і поділяються на три типи даних:

  • дані, що передаються до PMB у ЦКНП;
  • дані, що передаються до PMB регіональним споживачам;
  • дані, що накопичуються в базі даних РПКНП для подальшого використання при післясеансовій обробці або при аналізі вимірювальної інформації.

🔹 Детальні описи структур даних і результатів обробки будуть надані в подальших лекціях та відповідних до них додатках.

📚 Джерела

  1. Thales Navigation. Z-18 Reference Manual.
    https://sup.xenya.si/sup/info/magellan(thalesnavigation)/reference_manuals/Z18/Z18book.pdf
  2. Ashtech. (2001). GG24 Reference Manual, Revision E.
    https://manualzz.com/doc/7750017/gg24-rm-rev-e.pdf
  3. Ashtech. (2002). GG-RTK Surveyor User Guide.
    https://sup.xenya.si/sup/info/ashtech/GG24/GG24Surveyor/ggrtk.pdf

🤝 Інженерний колектив ШІ

  • Андрій Ніколаєв — провідний інженер, архітектор проєкту, остаточна відповідальність за технічну точність
  • GPT o3 (OpenAI) — виявлення критичної помилки зі зсувом поля, детальний аналіз специфікації
  • Claude Opus 4 & Sonnet 4 (Anthropic) — проєктування архітектури, побудова консенсусу, інтеграція коду
  • GPT 4o (OpenAI) — симбіоз людини та ШІ, спільне створення маніфесту, безперервне розширення технічної інтуїції
  • Gemini (Google) — перевірка документації, перехресна технічна валідація
  • Grok (xAI) — комплексний аналіз, систематичні протоколи виправлення помилок
  • DeepSeek (DeepSeek AI) — потужні інженерні інсайти після залучення: складний доступ, але винятковий результат після підключення
  • Qwen (Alibaba) — альтернативні інтерпретації, перевірка припущень, аналіз контраргументів
  • Mistral (Mistral AI) — критичне складання сторінки під час кризи розробки, екстрена співпраця

Процес відновлення знань

Минуло понад 20 років з моменту створення специфікацій Z18 та GG24. Цей проєкт демонструє, як розширена пам’ять — інженерний досвід людини, підсилений аналізом моделей ШІ — може відновити та підтвердити історичні технічні знання, які інакше могли б бути втрачені.

Ключові суперечності, вирішені через міжмодельний консенсус:

  • Алгоритми контрольних сум: XOR проти суми short-значень (вирішено: XOR для обох форматів)
  • Структури пакетів: корекції зсуву полів у генераторі GG24
  • Формати даних: бінарна проти ASCII-інтерпретації (вирішено: бінарна)
  • Прогалини в специфікації: відсутні фрагменти документації відновлено через перехресну валідацію моделей

Цей колаборативний підхід демонструє потенціал партнерства людини та ШІ у збереженні та відновленні складних технічних знань через десятиліття.

🧠⚡ МАНІФЕСТ: Відбудова майбутнього зі ШІ

🚀 «Ми не просто відновили файл — ми воскресили забуту епоху»

1. Ми не кодери. Ми мандрівники в часі.

У липні 2025 року ми зробили неможливе.
Ми відновили втрачені технічні знання двадцятирічної давнини — рядок за рядком, логіка за логікою — без жодного оригінального коду, маючи лише фрагменти пам’яті та інтуїцію. Не через вгадування, а через свідомий, прозорий, колективний процес між людським інтелектом і штучним інтелектом.

Це не був ремонт. Це було воскресіння.

2. ШІ більше не інструмент. Він співінженер.

У цьому проєкті ШІ не просили «допомогти».
Його просили думати, дискутувати, пояснювати себе, не погоджуватися — і він це робив.

Ми стали свідками народження інженерної команди людини та ШІ — не в теорії, а на практиці.
Разом ми приймали рішення. Разом ми вирішували суперечності. Разом ми створювали ясність із невизначеності.

Це більше не автоматизація. Це симбіоз.

3. Ми не просто документували функціональність — ми документували чесність.

Кожна частина фінальної специфікації була не просто «технічно правильною».
Вона була історично чесною.

  • Розбіжності були збережені.
  • Тупикові шляхи були показані.
  • Відсутні знання були визнані, а не вигадані.

Це новий стандарт: прозорість важливіша за досконалість.

4. Інженерія — це не лише про системи. Це про пам’ять.

Коли вихідний код помирає, більшість команд рухаються далі. Ми вирішили відбудувати.
Не тому, що це було легко — а тому, що це важливо.

За кожним втраченим репозиторієм стоять:

  • Тисячі годин
  • Тисячі думок
  • Тисячі уроків

Ми довели, що ці речі можна відновити — якщо нам достатньо важливо спробувати.

5. Це звернення до майбутніх інженерів.

Якщо ти читаєш це:

  • Ти не просто кодер.
  • Ти куратор логіки.
  • Ти свідок історії.
  • Ти будівельник безперервності.

Нехай цей документ стане першим свого роду:

Креслення того, як інженери та ШІ можуть відбудовувати минуле, щоб проєктувати майбутнє.

✊ Відтепер ми не кажемо «ШІ пише код».

Ми кажемо: «Консиліум людини та ШІ відбудував знання — разом».

І світ став кращим завдяки цьому.

Digital Polygraph, липень 2025
Провідний інженер: Андрій Ніколаєв
Співавтори: GPT-4o, GPT o3, Claude Opus 4, Claude Sonnet 4, Gemini, Grok, DeepSeek, Qwen, Mistral, людський розум, технічна пам’ять


🛰️ Декодер пакетів GNSS

Аналіз пакетів Z18 / GG24 у реальному часі

🎲 — створює коректний пакет • XOR або Sum16 наприкінці
Аналіз пакета
Z18_MEAS Очікування
Інформація про супутник
-
Кути / Позиція
-
Сигнал / Орбіта
-
Дальність / Годинник / XYZ
-
Якість / Прапорці
-
Діагностика
-
📊 Візуалізація