Практикум ionozond: дисперсия, ячейки ионограммы и сутки на трассе — в моделях, которые можно двигать
Интерактивные модели к документу о наклонных ЛЧМ-ионограммах: дисперсия групповой задержки и предельная полоса, способы её измерить, ошибка момента старта, длина БПФ и форма ячейки, расписание станций, суточный ход и вертикальное зондирование. Статический сайт на двух языках без библиотек, полный текст документа в виде вики и проверки моделей на Python, которые нашли ошибки в самом документе.
У консоли ionozond есть документ «Oblique Chirp Ionograms» — о том, как образуется ЛЧМ-ионограмма, что значат её следы и где картинка может обмануть. Документ подробный, но статичный: формула показывает зависимость, а не то, как она ведёт себя при другой частоте или другой полосе. Практикум — это семь моделей к его частям, в которых параметры двигаются ползунками, а графики пересчитываются сразу.
Практикум — статический сайт на русском и английском. Ни сборки, ни сервера, ни внешних библиотек: обычные скрипты, графики нарисованы вручную в SVG. Его можно открыть двойным щелчком по index.html или онлайн — сайт публикуется из ветки main через GitHub Actions, а в подвале указан опубликованный коммит и его дата.
Дисперсия на ионограмме
Главная модель посвящена дисперсии групповой задержки (GDD) — наклону следа на ионограмме, dτ/df. От него зависит, какую полосу трасса пропускает без искажений: в пределах полосы сигнала задержка меняется, и импульс на выходе расплывается.

Модель опирается на измерения с этой трассы. Закон GDD = 7,5·(1/√(1 − f/МНЧ) − 1) мкс/МГц — медиана 19 033 оценок наклона по 583 сеансам 4–9 февраля 2026 года. Коэффициент b подогнан к медианам 19 интервалов f/МНЧ от 0,5 до 0,975 с весами по числу оценок: b = 7,52 при R² = 0,975; без весов или с началом подгонки на 0,6–0,8 МНЧ получается 7,4–7,6. Страница прямо говорит, что это параметр модели одной трассы, а не универсальная постоянная, и что межквартильный разброс — около ±50 %.


Из GDD следует оценка предельной полосы B_max ≈ 1/√GDD. Практикум трактует её как осторожную границу, а не обрыв: проверка на Python показывает, что при GDD·B² = 1 импульс теряет лишь 0,06 дБ, а заметно портится только около 5 — теряет 1,5 дБ и расширяется в 1,6 раза. Для широкополосной КВ-связи с полосой 48 кГц корректор на этой трассе не нужен почти до самой МНЧ.
На той же странице можно включить компенсатор в приёмнике — всепропускающий фильтр с групповой задержкой −GDD_оц·(f − f_ц), где оценка GDD берётся с ошибкой, заданной ползунком. При МНЧ 26 МГц и сигнале на 0,85 МНЧ предельная полоса растёт с 293 кГц до 1,45 МГц при точной оценке, до 710 кГц при ошибке +2 мкс/МГц, какая остаётся после усреднения нескольких сеансов, и до 448 кГц при ошибке +5, как у одного сеанса. Под карточками раскрывается расчёт по шагам с текущими числами страницы, и там, где строка вычитает два напечатанных значения, результат — их разность, так что арифметику можно проверить. Последнее изменение: центр сигнала можно закрепить на 0,85 МНЧ, и тогда при движении МНЧ он следует за ней.
Как измерять, синхронизация и расписание
Три страницы разбирают, откуда берутся числа на ионограмме.
- Как измерять GDD. Наклон задержки или кривизна фазы в окне 1 МГц — на 300 реализациях. На этой трассе фазовый метод проигрывает: при замираниях с частотой 0,37 Гц фаза блуждает за те 10 секунд, что проходит окно в 1 МГц, и парабола принимает это блуждание за дисперсию. По одному сеансу ошибка метода по задержке — около ±4 мкс/МГц, по фазе — ±6–7. Модель сверена с полной обработкой синтетических записей во всех четырёх вариантах с расхождением не больше 15 %.
- Ошибка chirptime. Куда уходит эхо при ошибке момента старта или скорости перестройки: 1 мс сдвига — это 300 км группового пути, 0,2 с — край интервала однозначности, а ошибка на чётное число секунд попадает в нуль дециматора.
- Расписание станций. Планировщик ionozond шаг за шагом: ближайший старт не раньше чем через 3 секунды, пропуски станций, когда приёмник занят, и пересчёт
rep:offsetв chirptime.
Длина БПФ и ячейка
Ячейка ионограммы — k·N/f_ПЧ по частоте на f_ПЧ/(k·N) по задержке, где k — скорость перестройки, N — длина БПФ. Их произведение всегда равно единице, поэтому длина БПФ выбирает не точность, а баланс между частотой и задержкой. Новый раздел раскрывает один столбец у «носа» следа 1F — там, где нижний и верхний лучи сходятся.

Проверка check_cells.py повторяет раздел полной обработкой: синтетическая запись, БПФ и функция удаления мелких объектов из самой консоли. Результат тот же, что на странице: при 500 кГц/с БПФ на 16 384 точки стирает след, а на 4096 — сохраняет.
Сутки и вертикальное зондирование

Страница «Сутки» показывает суточный ход МНЧ и карту предельной полосы по частоте и времени — для наклонной трассы и для вертикального зондирования. Модельные сутки — это схема, и страница об этом говорит; вместо них можно загрузить настоящие сутки из архива — JSON готовит скрипт tools/export_daily.py.

Вертикальный ионозонд в модели повторяет станцию из расписания ionozond: 50 кГц/с, 1–14 МГц. Та же ионосфера пересчитывается на наклонную трассу по закону секанса, и получившийся GDD сравнивается с законом из измерений. Проверка на Python сходится с аналитической формулой для одного слоя с точностью 0,02 км, а дневной слой F2 со слабым слоем E воспроизводит медианы от 0,6 до 0,96 МНЧ с точностью 2–3 мкс/МГц.
Вики и глоссарий
Полный текст документа доступен в практикуме как вики — на английском и в русском переводе. Скрипт сборки делит документ на текстовые блоки по их позициям в исходнике, поэтому разметка и рисунки переносятся без изменений, а русская версия подставляет перевод каждого блока. Сейчас блоков 623, непереведённых нет. Под каждой частью стоят ссылки на модели, которые её иллюстрируют.
Глоссарий описывает 16 терминов: GDD, МНЧ и ННЧ, ДЧХ, моды 1F/2F/3F, O и X, foF2, ЛЧМ, БПФ, ПЧ, гетеродин, ОСШ, chirptime, rep:offset, GPSDO и NTP. В тексте всех страниц первое упоминание термина подчёркнуто пунктиром; наведение или нажатие открывает короткое пояснение со ссылками на часть документа и на глоссарий.
У вики оказалась неожиданная роль — проверять сам документ. Работа над моделями нашла места, которым противоречат собственные таблицы и формулы документа. Сначала практикум исправлял их при сборке, не трогая исходник: расстояние между модами, выбор длины БПФ, ошибку GDD по одному сеансу. Затем исправления перенесли в сам документ. Сборка остановилась на них — исправляемого текста больше не было, — и поправки из практикума удалили.
Проверка моделей
Каждая модель проверена независимо, скриптами на Python из tools/validate/. Проверки показывают и границы применимости. От 0,61 до 0,96 МНЧ закон GDD лежит внутри межквартильного разброса измерений, но при 0,99 МНЧ он вдвое круче медианы, поэтому вблизи МНЧ страницы берут измеренную медиану 36,5 мкс/МГц. Закон измерен при МНЧ 18–32 МГц; ночью страницы продолжают его пропорционально 1/МНЧ и предупреждают об этом. Модельные сутки, форма следов и порог в разделе о ячейках — схемы, а не измерения, и это оговорено на каждой странице.
Тема оформления переключается тремя кнопками: как в системе, светлая и тёмная. Все цвета графиков заданы переменными CSS, поэтому переключение не требует перерисовки, а цвет компенсатора подобран так, чтобы отличаться от основного и при нарушенном цветовосприятии.
Выводы
- Модель к документу полезна тогда, когда её числа взяты с той же трассы и проверены независимо: закон GDD подогнан к 19 033 оценкам, а модели сверены с полной обработкой.
- Каждая модель должна называть свои границы: вблизи МНЧ закон вдвое расходится с медианой, ночью он экстраполирован, а модельные сутки — схема.
- Интерактивная версия документа проверяет сам документ: работа над моделями нашла противоречия в тексте, и исправления ушли в исходник.
- Статический сайт без сборки и библиотек открывается с диска и не устаревает вместе с зависимостями.
Доступность
Исходный код и проверки моделей открыты, сайт работает онлайн и с диска.
- Практикум: konkin-nikita.ru/ionozond-playground
- Исходный код: github.com/nikita-konkin/ionozond-playground
- Консоль и документ: github.com/nikita-konkin/ionozond