SatProf — автономная система калибровки спутниковых измерений по радиозондам, восстановления вертикальных профилей атмосферы и подготовки наблюдений для WRFDA.
приёмный поток → SatDump release/1.2.2 → физический Level‑1C
│
WIS2 / DWD / IGRA → радиозонд → RTTOV ───────┤
↓
count→TB → O−B → bias → T/q/RH → WRFDA
Система рассчитана на непрерывную работу без Docker на Debian и Astra Linux 1.6/1.7.
- 📡 строгая связка с
f2re/SatDump:release/1.2.2; - 🧪 встроенная команда SatDump
level1cдля количественного экспортаproduct.cbor; - 🔢 сохранение исходных цифровых счётов без потерь;
- 🌡️ экспорт яркостных температур только при наличии реального калибратора;
- 🧭 широта, долгота, время, положение в скане и спутниковый зенитный угол;
- 🔐 проверка размерностей, единиц, путей, числа байт и CRC32 каждого массива;
- 👁️ автоматическое наблюдение каталогов приёмной станции;
- 🎈 оперативные TEMP BUFR через WIS 2.0 и DWD, история NOAA IGRA;
- 📐 четырёхмерная коллокация спутник–радиозонд с учётом дрейфа шара;
- 🌍 RTTOV/PyRTTOV, расчёт
TBрасч, O−B и полной ошибки пары; - 📈 викарная модель
raw count → TB, остаточные поправки и контроль дрейфа; - 🧠 восстановление
T(p),q(p),RH(p)и каркас 1D‑Var; - 🗺️ FastAPI/OpenLayers: спутники, орбиты, гранулы и выбор точки профиля;
- ⚙️ постоянная SQLite-очередь, дедупликация, повторные попытки и восстановление;
- 🩺 readiness/liveness, Prometheus-метрики и systemd-мониторинг;
- 🚀 версионированное развёртывание с автоматическим откатом;
- 📦 нативный офлайн-бандл для Astra Linux 1.6/1.7.
SatProf не получает радиометрию из PNG/JPEG и оформленных композитов.
Поддерживаются три состояния:
| Состояние | Содержание |
|---|---|
calibrated |
SatDump выдал физические яркостные температуры |
partial |
TB доступна только для части каналов |
raw_counts |
сохранены только исходные цифровые отсчёты |
vicarious_calibrated |
SatProf построил проверенную модель count→TB |
Текущий декодер МТВЗА‑ГЯ в SatDump сохраняет исходные 16-битные отсчёты, но не имеет штатной абсолютной калибровки всех каналов. Поэтому такие данные маркируются как raw_counts, а не как кельвины. После накопления коллокаций SatProf обучает отдельную модель по целевым TB, рассчитанным RTTOV из радиозонда.
git clone --branch release/1.2.2 \
https://github.com/f2re/SatDump.git /opt/SatDump
cd /opt/SatDump
bash scripts/astra/install-deps.sh \
--profile headless \
--bootstrap-missing
bash scripts/astra/build.sh \
--profile headless \
--clean \
--installПроверка нового экспортёра:
bash scripts/astra/run.sh -- level1c --helpgit clone https://github.com/f2re/satprof.git /opt/satprof
cd /opt/satprof
bash scripts/install.shНа Astra Linux полный цикл:
bash scripts/install_astra.sh --satdump-install-depsУстановщик:
- проверяет Astra Linux и архитектуру;
- при необходимости собирает изолированный CPython 3.11;
- получает строго ветку SatDump
release/1.2.2; - собирает SatDump в версионный prefix;
- создаёт неизменяемый release SatProf;
- выполняет тесты;
- переключает символьные ссылки;
- проверяет
/health/ready; - при ошибке возвращает предыдущую версию.
cp config/config.example.yaml config/config.yaml
nano config/config.yamlworkspace: /opt/satprof/workspace
satdump:
root: /opt/SatDump
repository: https://github.com/f2re/SatDump
required_branch: release/1.2.2
install_prefix: /opt/satdump/current
# expected_commit: ПОЛНЫЙ_SHA_ПРОВЕРЕННОЙ_СБОРКИ
instruments:
mtvza_gy:
coefficient_file: /opt/rttov/coefficients/rtcoef_meteor_2_mtvza_gy.datПроверка:
.venv/bin/satprof init --config config/config.yaml
.venv/bin/satprof satdump-validate --config config/config.yaml
.venv/bin/satprof sync-tle --config config/config.yamlЗапуск:
.venv/bin/satprof-worker --config config/config.yaml.venv/bin/satprof-web --config config/config.yamlИнтерфейс: http://127.0.0.1:8088.
Готовые профили находятся в config/watch_profiles.example.yaml.
Пример для X-band Метеор‑М:
satdump:
watch_profiles:
- name: meteor-m2-4-mtvza-xband
enabled: true
root: /data/receiver/meteor-m2-4/xband
glob: "*.cadu"
min_age_seconds: 45
min_size_bytes: 1048576
pipeline: meteor_m2x_xband
input_level: cadu
instrument: mtvza_gy
satellite: METEOR-M2-4
reader:
type: auto
product_glob:
- "**/MTVZA/product.cbor"
stride: 1Worker автоматически:
- ждёт стабилизации размера/возраста файла;
- рассчитывает SHA‑256;
- создаёт детерминированный манифест;
- запускает pipeline SatDump;
- находит
product.cborтребуемого прибора; - запускает
satdump level1c; - проверяет и импортирует массивы;
- ставит расчёт коллокаций в очередь;
- переносит обработанный манифест в
processed/.
Подробно: docs/LEVEL1C_PIPELINE.md.
satprof-level1c/
├── satprof-level1c-index.json
└── group-1-200xNNN/
├── satprof-level1c.json
├── raw_counts.u16
├── brightness_temperature.f32
├── latitude.f32
├── longitude.f32
├── observation_time.f64
├── scan_position.f32
├── satellite_zenith.f32
├── quality_flag.u16
├── source_x.u32
└── source_y.u32
Формат не требует NetCDF и пригоден для закрытого контура Astra Linux. Для каждого массива указаны dtype, little-endian, shape, units, bytes и CRC32.
raw count + scan + sec(θ)
↓
робастная поканальная модель
↓
TB, рассчитанная RTTOV по радиозонду
Обучение разделяется по независимым запускам радиозонда и по времени. Для каждого канала контролируются:
- число пар и независимых запусков;
- диапазон raw counts;
- RMSE и bias на отложенном периоде;
- переносимость по позиции скана;
- физический диапазон полученной TB.
После статуса production модель применяется к ранее накопленным гранулам. Затем система повторно формирует O−B и рассчитывает остаточную bias-модель.
| Источник | Назначение |
|---|---|
| WIS 2.0 | основной оперативный международный поток |
| DWD Open Data | открытый резервный TEMP BUFR |
| NOAA IGRA | история и дозаполнение |
| GRUAN | метрологическая валидация |
| ЕИП Росгидромета | региональное дополнение |
Радиозонд сравнивается со спутником только через радиационный оператор:
профиль + поверхность + геометрия → RTTOV → TBрасч
Подробно: docs/WIS2.md и docs/DATA_SOURCES.md.
OpenLayers показывает:
- текущие положения «Метеор‑М» и «Электро‑Л»;
- орбиты по TLE/SGP4;
- контуры Level‑1C-гранул;
- выбранную точку и ближайшее поле зрения;
- восстановленные
T,q,RH; - состояние SatDump, WIS2, DWD, IGRA, очереди и моделей.
Профиль не создаётся, если отсутствует реальная гранула или подходящая модель.
GET /health/live
GET /health/ready
GET /health/ready?deep=true
GET /metricsГлубокий контроль проверяет:
- SQLite
quick_check; - права и свободное место Workspace;
- возраст и состояние очереди;
- свежесть зондов, гранул, коллокаций и моделей;
- ветку, commit и runtime SatDump;
satdump versionиsatdump level1c --help;- наличие коэффициентов RTTOV.
/opt/satprof/.venv/bin/satprof-monitor \
--config /etc/satprof/config.yaml \
--deep --write-snapshotbash scripts/update.sh
bash scripts/update.sh --with-satdumpРелизы размещаются в /opt/satprof/.releases/. Конфигурация, Workspace и база данных не заменяются.
Откат:
bash /opt/satprof/current/scripts/astra/rollback.shНа машине с той же версией Astra:
bash scripts/astra/build-offline-bundle.sh --output distНа закрытой машине:
tar -xzf satprof-offline-*.tar.gz
cd satprof-offline-*
bash install.shБандл содержит wheelhouse Python, Git bundle SatDump, собранный runtime, SHA256SUMS и сценарий установки.
PYTHONPATH=src pytest -q
python -m compileall -q src
find src/satprof_calibrator/web/static -name '*.js' -print0 \
| xargs -0 -n1 node --check
find scripts -name '*.sh' -print0 \
| xargs -0 -n1 bash -nНативная сборка SatDump и офлайн-бандла проверяются self-hosted runner-ами с метками astra-1.6 и astra-1.7.
- Архитектура
- Автоматический Level‑1C
- Интеграция SatDump
- Методика калибровки
- Источники данных
- WIS 2.0
- Веб-интерфейс
- Мониторинг
- Развёртывание Astra
- Валидация
Код SatProf распространяется по MIT. На SatDump, RTTOV и внешние данные действуют их собственные лицензии и условия использования.