Версия документа: 0.6, 20 сентября 2026 года.
Рабочая версия: Horizon 0.2.5. Украинский — основной язык; русский, английский, немецкий и французский выбираются в настройках. Названия английских инструментов ниже сохранены для сопоставления с прежними сборками.
Документ описывает функции текущей сборки Horizon. Раздел «Распределённая РЭР» помечен «В разработке»: окно и входы в него скрыты до приёмки.
1. Назначение и ограничения#
Horizon предназначен для работы с SDR-приёмниками, просмотра спектра и waterfall, записи IQ, анализа FHSS/LoRa-подобных сигналов, поиска аналогового FPV, ведения журнала событий и ручной работы с картой. Поддержка GPS, внешних устройств и пеленгации находится в разработке и скрыта в текущей Beta.
Результат автоматической классификации является оценкой, а не гарантированной идентификацией передатчика. Для ответственных решений подтверждайте событие по IQ-записи, waterfall, измерениям других постов и известным эталонным сигналам.
По умолчанию Horizon работает только на приём. Одноразовая передача IQ реализована как закрытая Beta-функция и требует отдельного права sdr.tx сверх обычного iq.replay. Pro включает entitlement sdr.tx, но физическая передача дополнительно зависит от TX-возможностей драйвера, build safety gate и явного подтверждения оператора. Не подключайте передающий тракт без подходящей антенны или эквивалента нагрузки.
2. Быстрый запуск#
Portable Beta использует серверную активацию: распакуйте архив, запустите Horizon.exe и войдите в Horizon account. Автономная локальная регистрация и свободный demo-вход удалены. Для приложения используется тот же серверный аккаунт и тот же пароль, что и для веб-кабинета Horizon.
Тестовый архив явно помечен как неподписанный. Его SHA-256 можно сверить с прилагаемым SHA256SUMS.txt; это проверка целостности, а не подпись издателя. Он распространяется отдельно от подписанных Stable/Beta-обновлений. Проверки подписи в updater не отключаются ради бесплатного режима.
- Подключите SDR до запуска Horizon.
- Запустите
Horizon.exe. - Сначала зарегистрируйте аккаунт на
/account/register: подтвердите почту по ссылке из письма и дважды введите пароль. Затем используйте ту же электронную почту и пароль в окне входа Horizon. Существующий пароль меняется в кабинете через/account/passwordтолько после подтверждения шестизначным кодом из письма. - Выберите SDR. Для проверки без оборудования используйте
RF scenario simulator [SIM-RF-0001]. - Укажите
StartиEndв МГц. - Установите
RATEс учётом возможностей устройства. - Выберите
WATERFALL FFT; для первого запуска подойдёт 4096 или 8192. - Нажмите
Start RX. - Откройте необходимые инструменты через
Tools. - Для экономии ресурсов отключите ненужные
Spectrum,Waterfallи плавающие инструменты.
Главное окно не создаётся до успешного входа. Horizon передаёт введённые почту и пароль только по HTTPS в Account API; пароль не записывается в настройки, журналы, URL или защищённое хранилище приложения. При успехе сервер выдаёт короткую access-сессию и вращаемый refresh token. Затем Horizon строго проверяет профиль /v1/me, получает одноразовый activation challenge, доказывает владение installation key и принимает только подписанный Ed25519 lease, совпадающий с аккаунтом, тарифом и этой установкой. Rotating refresh token сохраняется в Windows DPAPI только после успешной активации; plaintext в QSettings не записывается.
Вход использует form-запрос grant_type=password к /oauth/token с точными client_id=horizon-desktop и scope openid profile offline_access horizon.desktop. Browser Authorization Code + PKCE остаётся отдельным Access-защищённым контуром совместимости и восстановления, но для обычного входа в приложение браузер не открывается.
Форма входа доступна только в production-сборке со встроенной доверенной конфигурацией. Для неё при конфигурации CMake задаются HORIZON_ACCOUNT_API_URL, HORIZON_OIDC_AUTHORIZATION_URL, HORIZON_OIDC_TOKEN_URL, HORIZON_OIDC_CLIENT_ID, а также ID, public key и период действия ключа подписи lease через HORIZON_LICENSE_SIGNING_KEY_ID, HORIZON_LICENSE_SIGNING_PUBLIC_KEY, HORIZON_LICENSE_SIGNING_VALID_FROM и HORIZON_LICENSE_SIGNING_VALID_UNTIL. Все production URL должны использовать HTTPS. На Account API тот же период задаётся через HORIZON_ACTIVATION_SIGNING_VALID_FROM и HORIZON_ACTIVATION_SIGNING_VALID_UNTIL. Отсутствующий, неканонический, будущий или истёкший период закрыто блокирует выдачу lease с no-store 503, чтобы сервер не создал лицензию, которую desktop обязан отвергнуть. Текущая рабочая сборка содержит production endpoints, публичный client ID и закреплённый public key активации; локальный вход в ней отсутствует.
Пароль впервые создаётся только после подтверждения адреса электронной почты. Существующий пароль меняется на /account/password из действующей Horizon web-сессии: пользователь нажимает Отправить код на почту, получает шестизначный код на подтверждённый адрес и вводит код, текущий пароль и новый пароль два раза. Код действует 10 минут, допускает не более пяти неверных попыток и используется один раз; повторная отправка отменяет предыдущий код. Без действующего кода пароль не меняется. Успешная смена завершает прежние web-, desktop- и OAuth-сессии; после неё надо войти новым паролем.
Отдельный внешний OIDC-контур совместимости по-прежнему проверяет закреплённые JWKS, точные issuer, audience и scope. Несвязанная внешняя identity получает identity_not_linked; для неё Horizon показывает код вида XXXX-XXXX-XXXX и открывает /account/link. Код действует десять минут, а подтверждение выполняется только из уже открытого кабинета. Ошибка 503 означает, что соответствующий внешний OIDC-контур не настроен или закрыто отключён.
Для автоматического стенда доступен Horizon.exe --headless. Он не показывает login и главное окно, не забирает фокус и запускается только с действующим ранее сохранённым подписанным lease. Без такого кэша процесс сразу завершается с кодом 2. В этом режиме Horizon блокирует вывод любого верхнеуровневого окна Qt, включая сообщения, которые могут создать фоновые компоненты после запуска: приложение не появляется поверх других окон.
Аккаунт и лицензия#
Откройте Аккаунт -> Лицензия и установки..., чтобы увидеть текущий аккаунт, режим доступа, список разрешённых функций и идентификатор этой установки Horizon. Кнопка Copy ID копирует installation ID для поддержки или будущей привязки в личном кабинете. Идентификатор создаётся один раз и сохраняется после перезапуска программы; он не является серийным номером SDR. Кнопка Выйти из аккаунта отзывает серверную refresh-сессию и удаляет локальные lease и refresh token; после явного выхода почту и пароль потребуется ввести снова.
Главное окно показывает только функции, разрешённые текущим подписанным lease. Недоступные пункты меню, панели и вложенные действия скрыты; при обновлении прав они появляются или исчезают без перезапуска. Если функция входит в лицензию, но временно не готова из-за состояния приёмника или отсутствия совместимого оборудования, она остаётся видимой, но неактивной.
В веб-кабинете раздел Подписка показывает серверный тариф, состояние, текущий период и историю счетов. В разделе Установки можно переименовать свой компьютер и деактивировать его, чтобы освободить лицензионный слот. Переименование не меняет installation ID; деактивированная установка должна пройти активацию заново. Обычный пользовательский кабинет отображает тариф и entitlements. Глобальный администратор управляет ими на /account/admin: тариф выбирается в строке аккаунта, а раскрывающийся список Права пользователя содержит отдельный флаг для каждого entitlement. Включение и запрет сохраняются в D1 и append-only аудите; новый набор попадает в следующую подписанную лицензию приложения. В закрытой Beta отсутствие платёжной подписки является нормальным состоянием. В блоке Подписка и платежи выберите Pro и период, затем нажмите Запросить доступ. Кабинет хранит одну ожидающую заявку: выбор можно изменить без создания дубля или отменить. Заявка фиксируется в аудите, но сама не включает платные функции. Операторское одобрение подписывается отдельно; его статус и причина появятся в истории заявок. Даже статус Одобрена не активирует тариф сам по себе: права появляются только после отдельного защищённого billing-события или выдачи.
Pro включает несколько SDR, карту и локальную РЭР; незавершённые элементы интерфейса остаются скрыты. Облачная синхронизация постов и объединение наблюдений относятся к отдельному RER Pilot (В разработке): права rer.cloud_sync и rer.fusion не выдаются обычной подпиской Pro.
При успешном входе кабинет также сверяет базовые Free-права с текущим тарифным контрактом. Это не удаляет Beta, Pro или административные права: сервер обновляет только записи, которые были выданы именно редакцией Free.
В блоке Возможности лицензии рядом с каждым правом показано его происхождение: Free, Closed Beta, Подписка, Выдано оператором или Совместимость. Несколько меток означают, что функция разрешена несколькими независимыми источниками. Кабинет и /v1/entitlements не раскрывают provider, subscription ID, grant ID и внутренние строки source; эти значения нужны только серверу.
Связанные способы входа и последние события не выводятся на главной странице кабинета. Полный журнал остаётся на отдельной защищённой странице /account/audit, а связанные входы доступны через защищённый Account API. Cloudflare Access identity для восстановления, администрирования и смены пароля защищена от удаления. После отзыва внешнего входа новые запросы этой связи получат identity_not_linked, а повторная связь потребует нового одноразового кода и подтверждения в браузере. Лицензия для работы без сети продолжает действовать до своего срока, поэтому при потере компьютера дополнительно деактивируйте соответствующую установку.
Одноразовый код привязки действует 10 минут; сервер сохраняет только его domain-separated SHA-256-хеш. Завершённые, заменённые и просроченные служебные записи удаляются после семи дней при следующей инициализации Worker или выдаче нового кода. Это не удаляет постоянный связанный вход и append-only событие аудита: у них отдельный жизненный цикл до отзыва входа или закрытия аккаунта.
Сайт запрещает встраивать кабинет и /account/link в сторонние iframe. Общая CSP, X-Frame-Options: DENY и Referrer-Policy: no-referrer уменьшают риск подмены кнопки подтверждения и утечки одноразового desktop-кода через referrer. Настраивать это пользователю не требуется: заголовки добавляются сервером ко всем ответам.
Кнопка Полный журнал открывает всю серверную историю текущего аккаунта, а не только последние события из карточки кабинета. На странице выводится по 50 записей; Следующая страница загружает более старую часть, В начало возвращает к свежим событиям, а обычная кнопка браузера Назад — к предыдущей порции. Курсор не содержит прав доступа и не позволяет перейти в журнал другого аккаунта. Account API предоставляет тот же журнал через GET /v1/audit-events с limit от 1 до 100 и непрозрачным cursor; ответы всегда имеют Cache-Control: no-store.
Все защищённые ответы Account API, включая ошибки, содержат UUID X-Request-ID и не кешируются. При обращении в поддержку приложите request ID из ответа или диагностики Horizon. Подписанные Stable/Beta manifest и release artifact также требуют сессию аккаунта и возвращаются с private, no-store и Vary: Cookie, Authorization.
Скачать CSV сохраняет UTC-время, тип, описание, ID объекта и ID события для текущего аккаунта. UTF-8 BOM и формат RFC 4180 подходят для Excel и обычных CSV-инструментов; значения, похожие на формулы, нейтрализуются апострофом. Email, OIDC subject, токены и внутренний ID аккаунта в файл не попадают. Экспорт ограничен 10 000 новейшими строками. Если старые строки были опущены, имя содержит -latest-10000, а HTTP-заголовок X-Horizon-Export-Truncated равен true.
Команды кабинета относятся только к текущему аккаунту. Владелец аккаунта может управлять установками, заявками на тариф и полным JSON-экспортом. Глобальная системная диагностика доступна только отдельно настроенному владельцу платформы. Недоступные команды скрываются в интерфейсе и дополнительно запрещаются Account API, поэтому прямой запрос не расширяет права и не меняет account_id.
Адрес /v1/account-export скачивает JSON-снимок текущего аккаунта: профиль, права, заявки, безопасные сведения о подписках и счетах, установки, связанные способы входа и аудит. OIDC subject, токены, ключевой материал установок и внешние платёжные идентификаторы намеренно исключены. Если коллекция превышает защитный лимит, её имя перечисляется в truncatedCollections; ответ всегда имеет Cache-Control: no-store и собственный X-Request-ID.
Только главный владелец проекта с текущей Horizon password-сессией видит кнопку Состояние. Его email должен точно совпадать с единственным адресом в серверном HORIZON_SITE_ADMIN_EMAILS. Страница /account/system проверяет Account D1, desktop OIDC, подпись лицензий, billing webhook и отдельные Stable/Beta-каналы. Статус Выключено нормален для намеренно не подключённой интеграции Closed Beta; Нужна настройка означает частично заполненную или неверную конфигурацию, а Недоступно — сбой runtime-проверки. Те же обезличенные данные доступны через GET /v1/service-readiness только Horizon password-сессии главного владельца. Обычный аккаунт и Cloudflare Access identity этих прав не дают. Ни страница, ни JSON не показывают значения bindings, issuer, provider, key ID, токены, хеши или исходный текст исключения.
Страница сайта /privacy отдельно перечисляет локальные IQ/GPS/RER-данные и сведения Account API. Самостоятельное удаление учётной записи из кабинета и публичного API отключено.
Локальный demo-режим удалён. Для подписанного допуска окно различает ACTIVE, REFRESH DUE, OFFLINE GRACE, EXPIRED, CLOCK CHECK FAILED и INVALID LEASE. Horizon не принимает неподписанный серверный lease. При первом запуске Horizon создаёт отдельную ключевую пару ECDSA P-256. Закрытая часть хранится только в Windows DPAPI для текущего пользователя, а окно показывает алгоритм и SHA-256 fingerprint публичного ключа. Копирование файла настроек на другой компьютер не переносит закрытый ключ.
Desktop-контур уже умеет сохранять выданный сервером подписанный lease в отдельном DPAPI-кэше, привязанном к installation ID и текущему пользователю Windows. При каждом чтении Horizon заново проверяет Ed25519-подпись, аккаунт, установку, сроки и доверенное серверное время; повреждённая запись или откат времени не дают прав. Строки Offline lease cache и Cache protection показывают наличие записи и способ защиты. Кнопка Remove cached lease удаляет только этот кэш, не удаляя ключ установки. Online-контур продлевает lease тем же challenge и proof-of-possession, который применялся при первой активации. Подтверждённый сервером revoke удаляет локальные lease и refresh token и сразу снимает права. Явный Sign out сначала отзывает серверную refresh-сессию, затем удаляет локальные lease и refresh token. Обычная потеря сети сохраняет offline lease до подписанного срока. При следующих запусках защищённый Windows DPAPI refresh token обновляет сессию бесшумно, даже если автономный lease уже истёк. Окно входа появляется после явного выхода, отзыва или истечения refresh-сессии: через 90 дней без использования либо не позднее 365 дней после её создания.
При изменении частот, sample rate или FFT во время приёма Horizon кратко перезапускает поток автоматически. Отдельно нажимать Stop RX не требуется.
3. Верхняя панель#
Устройство#
Верхний список показывает найденные SDR и их серийные номера. Доступность зависит от SoapySDR и установленных драйверов производителя. При выборе отображаются драйвер, серийный номер и возможности: RX only, RX + TX, а также AMP, если SDR предоставляет отдельный RF-усилитель. Список остаётся доступным во время RX: при выборе другого SDR Horizon сам останавливает текущий поток, переключает серийный номер и возобновляет приём. Во время IQ Replay список заблокирован.
HackRF One подключается напрямую, без SoapyHackRF. В готовый пакет Horizon для Windows уже входят 64-битные hackrf.dll, libusb-1.0.dll и pthreadVC3.dll. Подключите HackRF, запустите Horizon и нажмите Rescan devices. Для собственной сборки можно поместить совместимый runtime рядом с Horizon.exe либо задать абсолютный путь к hackrf.dll в HORIZON_HACKRF_LIBRARY. Horizon выбирает устройство по заводскому serial, показывает диапазон 1 МГц-6 ГГц и sample rate до 20 MS/s (допустимый диапазон 2-20 MS/s). Общий gain распределяется между ступенями LNA 0-40 dB и VGA 0-62 dB, а флажок AMP управляет отдельным RF-усилителем. Закрытый TX-путь использует отдельный VGA gain 0-47 dB и при конфигурации передачи принудительно выключает AMP.
Если рядом есть hackrf.dll, нативный backend имеет приоритет над устройством с тем же serial, найденным через SoapySDR, поэтому один приемник не дублируется в списке.
bladeRF также может работать напрямую без SoapyBladeRF. Поместите 64-битную bladeRF.dll, libbladeRF.dll или libbladerf.dll рядом с Horizon.exe и нажмите Rescan devices. Альтернативный абсолютный путь задается через HORIZON_BLADERF_LIBRARY. Horizon открывает выбранный приемник по заводскому serial и получает у конкретной модели допустимые диапазоны частоты и sample rate. Прием использует нативный формат SC16 Q11, bandwidth применяется к аналоговому фильтру, а общий gain переводит RX в ручной режим и распределяется библиотекой по внутренним каскадам. Закрытый TX-путь получает допустимые частоты модели и переводит interleaved CF32 в нативный SC16 Q11.
Нативный bladeRF имеет приоритет над Soapy-устройством с тем же serial. Если vendor DLL отсутствует, Horizon продолжает искать Soapy factory bladerf и не мешает работе остальных приемников.
RigExpert Fobos SDR подключается через отдельный нативный backend, а не через SoapySDR. Поместите 64-битную библиотеку производителя fobos.dll или libfobos.dll рядом с Horizon.exe и нажмите Rescan devices. Для нестандартного расположения задайте абсолютный путь в переменной среды HORIZON_FOBOS_LIBRARY. После обнаружения Horizon показывает заводской serial, диапазон 100 кГц-6 ГГц, доступные sample rate и флаг AMP. Флажок AMP управляет LNA Fobos, а общий gain - его VGA.
Если библиотека отсутствует или имеет другую архитектуру, Fobos просто не появляется в списке; запуск симулятора и других SDR не нарушается. Сама libfobos в дистрибутив Horizon не включена.
Откройте Справка -> SDR runtime..., чтобы проверить аппаратный runtime запущенной копии Horizon. В верхней части отдельно указаны нативные библиотеки HackRF/bladeRF/Fobos и Soapy factories hackrf, bladerf. Кнопка Show Details... показывает найденные файлы модулей, пути поиска и ошибки загрузчика.
Наличие строки SoapySDR core: BUILT IN само по себе не означает поддержку конкретного SDR. Для bladeRF достаточно Native bladeRF library: READY либо bladeRF Soapy factory: READY. Для HackRF достаточно Native HackRF library: READY либо HackRF Soapy factory: READY. Состояние NOT FOUND означает, что runtime-файлы повреждены, имеют другую архитектуру либо отсутствуют рядом с запущенным EXE.
Если драйвер не сообщает заводской serial, Horizon показывает идентификатор NOSERIAL-..., детерминированный из аргументов SoapySDR. Он различает устройства в текущей конфигурации, но не является серийным номером производителя.
Sample rate и центральная частота обязательны. Bandwidth и общий gain применяются best-effort: отсутствие этих API у конкретного драйвера больше не блокирует RX.
AMP#
Флажок AMP включает отдельный встроенный RF-усилитель, только если драйвер SDR сообщил о такой возможности. Используйте AMP при слабом сигнале и достаточном динамическом диапазоне. Если поднимается весь шумовой фон, появляются зеркальные сигналы или вершины упираются в верх шкалы, выключите AMP.
Start и End#
Start и End задают полный диапазон Spectrum и Waterfall. Например, 2400 и 2500 означают карту 2,4–2,5 ГГц. Если диапазон шире мгновенной полосы SDR, Horizon делит его на сегменты и перестраивает приёмник. Это режим sweep.
RATE / Sample rate#
RATE задаётся в MS/s и определяет количество комплексных IQ-отсчётов в секунду, а следовательно, мгновенную полосу одного захвата.
- При
40 MS/sодин захват покрывает примерно 40 МГц. - Диапазон 100 МГц при
40 MS/sсобирается из нескольких перестроек. - Больший sample rate может ускорить широкий sweep и сохранить короткие детали.
- Он также увеличивает USB-поток, нагрузку DSP, скорость IQ-записи и риск пропусков.
- Sample rate сам по себе не увеличивает FFT-разрешение. Частотный шаг примерно равен
sample rate / FFT size.
Выбирайте максимальный стабильный rate, который поддерживают SDR, USB и компьютер. Для точного узкополосного анализа часто выгоднее сузить диапазон и уменьшить rate.
WATERFALL FFT#
Доступны 1024, 2048, 4096, 8192, 16384 и 32768.
- Меньший FFT быстрее и лучше сохраняет временную плотность строк.
- Больший FFT лучше разделяет близкие несущие.
- Слишком большой FFT увеличивает нагрузку и временное окно анализа.
Рекомендуемый старт: 4096–8192. Для близких узкополосных несущих используйте 16384–32768. При падении FPS сначала уменьшите FFT.
Управление приёмом#
Start RX/Stop RXзапускает или останавливает получение IQ.Pause displayостанавливает только изображение. SDR или IQ-файл продолжают работу, поэтомуResume displayпоказывает уже текущее место.- Кнопка сброса рядом с диапазоном возвращает полный масштаб Spectrum/Waterfall.
CPU,GPU,RAM,SWEEP, скорость sweep иFPSвыводятся в верхней полосе под меню. Длинная диагностика переносится на следующую строку, сохраняя все показатели.
4. Spectrum#
Индикатор FPS измеряет отрисовки АЧХ с изменившимися спектральными данными. Обновление надписей и несколько кадров, объединённых перед одной отрисовкой, не увеличивают этот счётчик. Показатель sweeps/s отдельно измеряет полные проходы выбранного диапазона. Живая АЧХ показывает последнее измерение независимо от прокрутки или задержки истории Waterfall.
Для быстрого широкого обзора HackRF выберите «Профиль детектора → Обычный»: этот режим использует аппаратный sweep. «Поиск ELRS» получает длинные непрерывные IQ-блоки для анализа сигнала. При одном SDR широкий диапазон в этом режиме обновляется заметно медленнее; статус отдельно показывает частоту полной АЧХ и FPS отрисовки.
Spectrum показывает текущий уровень мощности по частоте. Зелёная линия Live соответствует последнему кадру.
Управление мышью#
- Колесо над графиком: частотный zoom относительно курсора.
- Колесо над левой шкалой dB: сжать или растянуть вертикальный диапазон.
- Средняя кнопка по горизонтали: сдвиг частотного окна.
- Средняя кнопка по вертикали: сдвиг шкалы уровня.
- Перетаскивание левой кнопкой: измерительная рамка с начальной и конечной частотой,
ΔF,Δ dBи пиковым уровнем. - Правая кнопка: убрать рамку.
Масштаб Spectrum синхронизируется с Waterfall текущего монитора.
Live, Peak Hold и Max Hold#
Live— текущий спектр, зелёный цвет.Peak Hold— затухающий след недавних максимумов, жёлтый цвет.Max Hold— максимумы за всё время после включения режима, розовый цвет.
Режимы выбираются по одному. Переключение очищает предыдущий hold-буфер.
Метки сигналов#
Над спектром есть два разных вида плашек. Справочные полосы LTE, GSM, UMTS, GNSS, Wi-Fi и Analog FPV 5.8 показывают известное распределение частот и растягиваются на весь диапазон стандарта. Они не означают, что Horizon обнаружил сигнал, и остаются стабильными при изменении шума.
Динамические плашки появляются только после работы детектора. Их ширина соответствует измеренной мгновенной полосе пакета, а не всему диапазону ППРЧ. ELRS SF7 означает подтверждённый LoRa-подобный чирп с оценкой SF7 и признаками перестройки. Неизвестный широкополосный сигнал не получает название Wi-Fi/LTE только из-за совпадения частот.
5. Waterfall#
Waterfall показывает историю спектра: частота расположена по горизонтали, возраст строки — по вертикали. 0 сверху означает самые новые данные. При увеличении шкала переходит от секунд к миллисекундам и микросекундам.
Управление мышью#
- Колесо над изображением: частотный zoom.
- Колесо над левой шкалой: видимая глубина времени.
- Средняя кнопка по горизонтали: сдвиг по частоте.
- Средняя кнопка по вертикали: просмотр истории; прокрутка ограничена накопленными данными.
- Левая кнопка: рамка с частотами,
ΔF, возрастом,Δtи пиковым уровнем. - Правая кнопка: убрать рамку.
Цвет и теплота#
Справа находится цветовая шкала и кривая преобразования dB в цвет.
Autoоценивает шумовой фон и контраст автоматически.Manualсохраняет установленную оператором кривую.- Перетаскивайте три точки левой кнопкой: вертикаль меняет dB-порог, горизонталь меняет положение цвета.
- Колесо над шкалой сдвигает весь диапазон dB.
Shift + колесосжимает или расширяет диапазон цветов.- Двойной щелчок по шкале возвращает Auto.
При сильной ряби сначала включите Auto. Затем при необходимости перейдите в Manual и поднимите нижнюю точку чуть выше шума.
6. Signal analyzer#
Откройте Tools > Signal analyzer. Инструмент ведёт отдельные сигнальные треки.
- Запустите RX и подождите несколько циклов sweep.
- Сначала работайте с выключенным
Raw candidates. - Для отладки включите Raw candidates, чтобы увидеть неподтверждённые пики.
- Выберите подтверждённый трек и нажмите
Locate, чтобы передать его параметры в Direction Finder.
Столбцы#
ID— локальный идентификатор трека.State—CANDIDATE,PROBABLEилиCONFIRMED.Type,Type %— тип и уверенность классификатора.Hop %— уверенность в перестройке частоты.SF— spreading factor;...означает недостаточно доказательств.Rate— вероятный LoRa air-rate профиль ExpressLRS 4.0.1.Sym kBd— символьная скоростьBW / 2^SF.Pkt MHz— мгновенная полоса пакета/чирпа.Range MHz,Min MHz,Max MHz— занятый диапазон ППРЧ.Freq MHz— последняя наблюдаемая частота.SNR— превышение над шумом.Hops,Hops/s,Dwell— переходы, скорость и время на канале.Activity— доля наблюдений с активным треком.
В sweep-режиме трекер использует время исходных сегментов, а не время готовой панорамы. Если частота наблюдений недостаточна, >= перед Hops/s означает измеренную нижнюю границу скорости, а <= перед Dwell — верхнюю границу времени на канале. Значения без этих знаков прошли проверку временного разрешения.
Оценка SF выполняется в фоне и последовательно распределяется между сегментами и кандидатами. На широком диапазоне подтверждение всех одновременных источников может занять несколько полных циклов sweep. Готовая оценка удерживается четыре секунды, чтобы асинхронный результат встретился со следующим наблюдением той же частоты; кэш ограничен 64 записями и не растёт со временем.
Для ELRS используйте комбинацию CONFIRMED, устойчивого SF, высокого Hop %, повторяемого Hops/s и правдоподобного Range, а не одно поле Type.
В Rate суффикс F означает Full Resolution, D — DVDA, est. — выбор между несколькими профилями с помощью измеренного Hops/s. Например, 100F/150 Hz означает, что SF и BW совпадают с обоими режимами и данных пока недостаточно для честного разделения. Это классификация радиопрофиля, а не декодирование содержимого пакета. custom LoRa означает LoRa/FHSS с измеренным SF, который не совпал со стандартной таблицей ELRS 4.0.1; он не получает официальную метку ELRS автоматически.
7. Подтверждённые события#
Horizon оценивает доказательства управления и видео независимо. Близость частот сама по себе не связывает их с одним источником. Результаты доступны в Spectrum, Signal analyzer и Event log.
В Tools > Event log находятся настройки High-оповещений:
Arm direct High alertsвключает реакцию на новые подтверждённые High-события.Soundвключает звук.Snapshotсохраняет снимок спектра и отчёт об инциденте.
Auto DF ELRS находится в Devices / Map > Direction finding и запускает один пеленгационный проход для нового подтверждённого ELRS. Требуется rotator. После запуска оповещения и автоматическая пеленгация разоружены.
8. Профили детекторов и поиск FPV#
Tools > Detector profile выбирает полевые пороги без остановки приёма:
Sensitive— слабые сигналы и чистый эфир; ниже порог SNR/fill и line sync.Field— рекомендуемый баланс чувствительности и ложных срабатываний.Dense RF— загруженный городской эфир; повышенные пороги Wi-Fi/LTE окружения.
Профиль применяется к Signal analyzer, ELRS/FHSS-кандидатам и FPV-анализ, включая все активные SDR, и сохраняется в workspace. Он управляет появлением кандидатов, но не отменяет независимые требования SF, hopping и PAL/NTSC evidence.
Custom... открывает редактор порогов. Значения dB вводятся непосредственно, а fill и confidence — в процентах. Import profile... и Export Custom... работают с переносимым файлом *.hdet.json схемы horizon.detector-profile/v1. При импорте проверяются все обязательные поля, конечность чисел и безопасные пределы значений.
В заголовке Signal analyzer отображаются активный профиль, фактические пороги и счетчики последнего цикла. Цепочка regions -> accepted показывает число найденных спектральных областей и прошедших кандидатов. Поля reject SNR, narrow, BW и fill объясняют, на каком фильтре были отклонены остальные области. Для сохранения снимка выберите Tools > Detector profile > Export diagnostics snapshot...: CSV содержит отдельную строку для каждого монитора, число обработанных циклов, средний noise floor и накопленные счетчики всей текущей сессии. Если диапазон монитора собирают несколько SDR, в поле receiver перечисляются все их серийные номера. Экспорт после Stop RX сохраняет итог сессии и подходит для сравнения профилей на одной IQ-записи.
Tools > Detector profile > Compare profiles on IQ... прогоняет одну запись через Sensitive, Field, Dense RF и текущий Custom. FFT каждого IQ-кадра вычисляется один раз и повторно используется всеми профилями, поэтому сравнение получает одинаковые входные данные. Поддерживаются .hmiq, .hiq и raw CF32. Контейнеры используют записанные метаданные; для .cf32, .iq и .bin применяются текущие Center и Rate. Работа выполняется в одном фоновом потоке. Повторное нажатие команды отменяет анализ. Итоговый CSV содержит абсолютные счетчики и число Signal/FPV кандидатов на FFT-кадр для каждого профиля.
Эталонная разметка IQ#
Tools > Detector profile > Edit IQ ground truth... создаёт рядом с записью файл <имя IQ>.labels.json схемы horizon.iq-ground-truth/v1. Для каждого события задайте ID, тип сигнала, Start/End времени, Start/End частоты и при необходимости SF. SF доступен только для ELRS/FHSS; допустимы значения SF5–SF12.
Флаг Entire recording reviewed означает, что пользователь просмотрел всю запись, а не только отметил несколько известных сигналов. Без него benchmark считает recall по известным событиям, но оставляет precision пустым. При полном просмотре CSV также содержит false positives и precision. Совпадение требует пересечения кандидата с меткой одновременно по времени и частоте. Для Analog FPV используется FPV-анализ, для остальных типов — Signal detector. Если имя или размер IQ изменились, Horizon не применяет старую разметку к другому содержимому.
После сравнения Horizon открывает таблицу результатов прямо в приложении. В ней показаны Signal/FPV candidates per frame, TP, FP, FN, precision и recall для каждого профиля. Кнопка Open CSV открывает полный машинно-читаемый отчёт.
Пакетная проверка размеченных IQ#
Tools > Detector profile > Run labeled IQ regression suite... рекурсивно находит в выбранной папке IQ-записи с файлами <имя IQ>.labels.json и сравнивает все профили на одинаковых FFT-кадрах. Неразмеченные записи пропускаются. Повторное нажатие команды останавливает текущий прогон.
CSV содержит строки FILE для каждой записи, TOTAL со сводными TP, FP, FN, precision и recall по каждому профилю, а также ERROR для файлов, которые не удалось прочитать или проверить. Сводная precision вычисляется только тогда, когда все вошедшие в неё записи отмечены Entire recording reviewed; это не позволяет принять неполную разметку за отсутствие ложных срабатываний.
Save baseline... сохраняет проверенный результат в переносимый JSON-файл. Compare baseline... сравнивает новый прогон с ним и показывает изменение precision и recall в процентных пунктах: STABLE, IMPROVED или REGRESSION. Сравнение разрешено только для того же набора IQ-файлов с теми же путями и размерами. Кнопка Export CSV... сохраняет машинно-читаемый quality gate. Первая строка содержит PASS или REGRESSION, далее идут дельты каждого профиля.
FPV-анализ ищет устойчивые широкополосные сигналы и отдельно отмечает кандидатов аналогового FPV-видео. Сам факт большой полосы не считается доказательством видео.
Широкий накопленный след подтверждённого ELRS/FHSS не считается аналоговым видео: Horizon учитывает hopping-доказательства даже тогда, когда sweep-карта визуально заполнила весь рабочий диапазон. Wi-Fi/LTE-подобный канал также исключается из FPV, включая совпадение его центра с частотой стандартного видеоканала.
Для метки Analog FPV candidate дополнительно требуются пять последовательных наблюдений, высокая непрерывность и устойчивые центр и ширина полосы. До накопления временных доказательств сигнал имеет класс Wideband carrier в анализаторе и журнале. Неподтверждённая широкополосная несущая не показывает отдельную плашку на спектре; метка Analog FPV появляется после подтверждения аналогового кандидата.
После спектральной проверки Horizon анализирует IQ кандидата и ищет периодичность строк PAL (64 µs) или NTSC (63.56 µs) вместе с кратными периодами. Line sync показывает доверие к этому признаку, а Standard — наиболее вероятный стандарт. Без подтверждённой строчной структуры высокий уровень аналогового FPV не выдаётся.
FPV confidence — итоговая объяснимая оценка. Она складывается из Spectral (форма и SNR полосы), Channel score (близость к стандартной частоте), Morphology (fill, persistence, continuity и стабильность) и Line sync (IQ-периодичность). Журнал использует итоговую оценку аналогового видео отдельно от оценки неизвестной широкой несущей. FPV-анализ работает при показе Spectrum, Signal analyzer, Event log или при включённых обработчиках подтверждённых событий.
Для проверки и открытия видео используйте единый инструмент:
- Откройте
Tools > Video scanner. - Выберите
Сканировать каналыи отметьте диапазоны3,3 ГГци/или5,8 ГГц. - Нажмите
Start scanи дождитесь подтверждённогоVIDEO LOCK. - Выберите строку и нажмите
Open selected.
Оценки спектра не заменяют проверку PAL/NTSC. Класс Wideband carrier означает устойчивую широкополосную несущую без подтверждённого типа.
Редкие чирпы ELRS не должны считаться видео только потому, что за время пересекли широкий диапазон: детектор дополнительно использует fill и persistence. Класс Wideband carrier не переводится в уровень High как аналоговое видео.
9. Analog video#
Инструмент декодирует аналоговое PAL/NTSC-видео из непрерывного IQ-потока и умеет последовательно проверять каналы выбранных диапазонов 3,3 и 5,8 ГГц. Частоты сканера независимы от диапазона SDR на главном экране: список строится из таблиц каналов отмеченных диапазонов. По умолчанию выбран диапазон 5,8 ГГц; выбор диапазонов сохраняется между запусками.
- Оставьте стандарт
Autoлибо принудительно выберитеPAL/NTSC. - Выберите
Сканировать каналы(Scan channel plans) и отметьте один или оба диапазона в списке. Для одной частоты доступныManualи5.8 GHz channel. РежимСвой диапазон(Custom scan range) использует отдельно заданные Start/End/Step; открытие окна и переключение режимов не копируют частоты с главного экрана. - Для одного канала нажмите
Start video, для полного плана —Start scan. - Horizon временно остановит широкий sweep, настроит непрерывный RX и будет проверять только частоты из выбранных таблиц: 35 уникальных частот для 3,3 ГГц, 39 для 5,8 ГГц или 74 для обоих диапазонов. Одинаковые частоты проверяются один раз; между диапазонами сканер не добавляет промежуточных частот.
- Строка получает
VIDEO LOCKтолько после трёх последовательных подтверждений PAL/NTSC timing. Высокий уровень или ELRS-чирп сам по себе видео не подтверждает. - После остановки/закрытия инструмента предыдущие диапазон, rate, zoom и RX восстанавливаются.
Таблица 3,3 ГГц соответствует Foxeer Reaper 40CH, каналы A/B/E/F/R, 3170–3630 МГц. Для других моделей передатчиков таблица каналов может отличаться. В результатах рядом с каналом указан диапазон, например 3.3 GHz A1 и 5.8 GHz A1.
Raceband 5,8 ГГц: R1 5658, R2 5695, R3 5732, R4 5769, R5 5806, R6 5843, R7 5880, R8 5917 МГц. Таблица полного scan показывает канал, частоту, стандарт и текущее состояние; одинаковые частоты сканируются один раз.
Карта частот над таблицей показывает весь план без создания сотен UI-кнопок: голубой означает текущую частоту, зелёный — тихую, жёлтый — несущую без video lock, розовый — подтверждённое видео. Клик выбирает ту же строку таблицы, двойной клик останавливает scan и открывает канал. Для длинного пользовательского диапазона карта автоматически превращается в компактную heatmap; точная частота и уровень остаются в tooltip и таблице. Во время scan большой live-preview скрыт, а подтверждённые кадры остаются в столбце Preview; при открытии канала live-preview занимает его место.
Snapshotсохраняет PNG.Recordначинает MJPEG/AVI; повторное нажатие останавливает запись.Open folderоткрывает каталог видео.- Статус показывает timing confidence, стандарт, размер и отброшенные кадры.
При циклическом поиске таблица дополнительно помогает выбрать свободный канал:
Busyпоказывает долю проходов с несущей или подтверждённым видео и число валидных наблюдений.Activity historyхранит последние 96 проходов: зелёный — тихо, жёлтый — несущая без video lock, красный — подтверждённое PAL/NTSC, серый — нет данных.Open best freeстановится доступна после минимум трёх валидных проходов с достаточным покрытием. Horizon проверяет не только центр, но и все соседние точки, которые перекрываются 20-МГц видеополосой; неизмеренный или занятый сосед не может быть выдан как свободная частота.Followвозвращает автоматическую прокрутку за текущей частотой. По умолчанию он выключен, поэтому scan не отбирает у пользователя выбранную строку.- После первого полного прохода
CYCLEиCH/sпоказывают измеренную, а не расчётную скорость сканирования. - До накопления истории сводка помечает самый тихий канал как
PROVISIONAL; кнопкаClearсбрасывает уровни, кадры и историю рекомендаций.
Поиск выполняется в два этапа. Уровень IQ измеряется для каждой частоты дешёвым проходом; PAL/NTSC timing запускается только во время начального обучения noise floor, для несущих выше адаптивного порога и при наличии timing evidence. На тихой частоте остаётся контрольная проба через каждые десять блоков, поэтому слабое видео не исключается навсегда. Полный декодер включается только после первых признаков строчной структуры. DSP GATED в сводке показывает долю запланированных timing-проб, которые не потребовали тяжёлого анализа, а DECODE — число реально обработанных декодером блоков.
Декодирование и запись используют ограниченные фоновые очереди, поэтому медленный диск не должен останавливать Spectrum/Waterfall. Без подтверждённого line timing кадр остаётся UNCONFIRMED VIDEO TIMING.
10. Event log#
Event log показывает переходы START/END и события детекторов.
Clearочищает только таблицу.Export CSVэкспортирует дневной журнал.Open logsоткрывает постоянные JSONL-журналы.
Столбцы включают время, событие, состояние, тип, частоту, полосу, уровень, SNR и длительность. Очистка таблицы не удаляет файлы.
11. 3D panorama#
Tools > 3D panorama строит временной стек: частота идёт по X, уровень вверх, старые трассы уходят в глубину.
Pauseзамораживает panorama, не останавливая RX.- Корзина очищает историю.
- Кнопка сброса возвращает стандартную перспективу.
Historyзадаёт 48, 96, 160 или 256 трасс.- Колесо меняет вертикальное усиление.
Shift + колесоменяет глубину перспективы.- Средняя кнопка перемещает сцену.
- Двойной щелчок левой/средней кнопкой сбрасывает вид.
Последняя трасса выделена ярко. Инструмент удобен для ППРЧ и кратких импульсов. История ограничена; когда окно скрыто, кадры ему не передаются.
12. Карта; GPS, устройства и пеленгация — в разработке#
В текущей Beta доступна карта с ручным вводом координат. GPS/NMEA, внешние устройства и Direction Finder скрыты: для них пока нет готового поддерживаемого комплекта оборудования. Описание ниже сохранено как справка по прототипу и не означает доступность этих элементов интерфейса. Старые настройки остаются в профиле, но подключение устройств автоматически не запускается.
GPS / NMEA — прототип, скрыт#
Быстрое подключение с карты:
- Откройте
Tools -> Devices / Map -> Map. - Подключите USB GPS и нажмите
Find GPS. - Horizon в фоновом режиме проверит свободные COM-порты на скоростях 4800, 9600 и 38400 бод. Уже занятые Horizon порты поворотки, компаса и других устройств не проверяются.
- Найденный NMEA-приёмник добавляется в профиль с автоматическим переподключением. Карта переходит к координатам GPS.
Ручное подключение и нестандартная скорость:
- Выберите драйвер
GPS / NMEA serial. - Выберите COM-порт или введите, например,
COM3@4800. - Оставьте
Reconnectдля автоматического восстановления. - Нажмите
Add device.
Поддерживаются NMEA GGA/RMC: координаты, высота, спутники, fix, HDOP/точность, скорость и курс при наличии полей.
Валидный RMC также даёт UTC reference. В таблице UTC Δ показывает отличие времени GPS от системных часов, а +/- — консервативную погрешность с учётом разрешения поля времени и передачи предложения по UART. Horizon не изменяет часы Windows. Слишком старое сообщение или смещение более 5 секунд не используется автоматически для нового наблюдения распределённого РЭР (В разработке).
Каждый принятый GGA/RMC fix получает локальную отметку времени. Если новые валидные координаты не поступали более 3 секунд, таблица показывает GPS stale, сохранённая метка остаётся видимой для диагностики, но исключается из новых DF-наблюдений; распределённый РЭР — В разработке. Статическая позиция, которую оператор установил на карте вручную, не имеет такого тайм-аута.
Строка GPS над картой показывает поиск, ожидание fix, число спутников, точность или возраст устаревшей координаты. Живая метка подписана HORIZON | GPS FIX, вокруг неё рисуется круг заявленной горизонтальной точности. Если данные старше трёх секунд, метка становится жёлтой и получает статус GPS STALE. Ручная координата рисуется голубым цветом; рядом показываются только координаты и высота.
Одноразовая координата через SDR#
Fix via SDR позволяет временно использовать выбранную SDR как GPS L1-приёмник, получить координату поста и сразу вернуть приёмник к прежней работе:
- Подключите к SDR GPS L1-антенну на 1575,42 МГц и установите её с открытым обзором неба. Активной антенне требуется совместимое внешнее питание или bias-tee; не включайте питание, если оно не допускается антенной и SDR.
- Откройте
Tools -> Devices / Map -> Mapи нажмитеFix via SDR. - При первом запуске укажите
gnss-sdr.exe. Horizon также ищет его рядом с приложением, вruntime/gnss-sdrи по переменнойHORIZON_GNSS_SDR. - Horizon остановит текущий RX, настроит выбранную SDR на GPS L1, запишет 45 секунд IQ с частотой 2 MS/s и затем автоматически восстановит прежнее устройство, диапазон, выбранные приёмники, sweep и состояние паузы экрана.
- После восстановления RX файл декодируется в фоне. При успешном fix координата появится на карте, а временный IQ-файл будет удалён.
Кнопка превращается в Cancel GPS на время операции. Отмена захвата немедленно возвращает прежний RX; отмена декодирования не затрагивает уже восстановленный RX. Декодер проверяется до остановки эфира, поэтому отсутствие GNSS-SDR не прерывает текущий приём.
Полученная точка подписана как сохранённый GPS SDR FIX с возрастом. Она подходит для привязки неподвижного поста, но не считается живой телеметрией и не должна использоваться при перемещении поста или вместо свежего GPS/UTC в автоматическом РЭР (В разработке). Для непрерывных координат и синхронизации времени используйте NMEA GPS.
Compass / NMEA HDT-HDM#
- Выберите драйвер
Compass / NMEA HDT-HDM. - Выберите COM-порт или введите endpoint с baud rate, например
COM4@4800. - Нажмите
Add device.
HDT отображается как TRUE, HDM как MAG. Валидный курс ориентирует метку поста на карте. Если подключён rotator с телеметрией, его фактический азимут имеет приоритет на карте; показание компаса продолжает отображаться в таблице устройств. Компас не получает команды вращения и не считается поворотным механизмом.
Rotator / GS-232#
- Выберите
Rotator / GS-232 serial, порт и нажмитеAdd device. - Для теста выберите отдельный драйвер
Virtual rotator; endpointSIM-ROTATORпоявится автоматически. - Введите
Az,Elи нажмитеSet heading.
В строке Rotator limits задаются программные пределы истинного азимута и угла места. Азимут Az CW Start -> Stop всегда описывает сектор по часовой стрелке. Например, 300 -> 60 означает сектор шириной 120 градусов через север: 300...359.9, затем 0...60. Значения 0 -> 359.9 оставляют почти полный круг. Ручные команды за пределами сектора ограничиваются ближайшей границей и помечаются ROTATOR LIMITED.
Direction Finder начинает с Start, проходит сектор по часовой стрелке с заданным шагом, корректно переходит через 359 -> 0 и не выходит за границу Stop. Полнота диаграммы оценивается относительно заданного сектора: проход 300 -> 60 должен покрыть свои 120 градусов, тогда как проход полного круга по такой же частичной выборке будет отклонён как INCOMPLETE COVERAGE.
North offset калибрует ноль механизма: физическая команда равна истинному азимуту плюс offset, а telemetry преобразуется обратно перед картой и DF; распределённый РЭР — В разработке. В таблице AZ — истинное направление, DEV — показание контроллера. Изменение любого предела или offset во время DF немедленно прекращает сканирование и отправляет rotator команду STOP. Пределы и offset сохраняются в рабочем профиле, но сам DF после запуска программы остается выключенным.
Таблица показывает тип, драйвер, endpoint, состояние и данные. Remove удаляет выбранное устройство.
Ответ положения GS-232 считается свежим 1,5 секунды. Если rotator заявил поддержку telemetry, DF не начинает измерение по старому углу и не переключается автоматически в режим без обратной связи: статус показывает ожидание свежей telemetry, а через 15 секунд операция завершается с ошибкой. Задержка 750 мс используется только для простого rotator-драйвера, который изначально не имеет capability telemetry.
Generic serial transport резервирует обычный COM endpoint для будущего или пользовательского протокола. Выбранный driverId, endpoint и автоподключение сохраняются в рабочем профиле. Старые профили GPS/rotator автоматически переводятся на новые идентификаторы драйверов.
Карта#
В подписи поста ALT показывает численную высоту рельефа для его координат на любом слое карты. Высота автоматически берётся из DEM с постоянной детализацией и не зависит от масштаба карты. До загрузки показывается «…», при отсутствии данных — «—». При выборе позиции щелчком по карте найденная высота рельефа также подставляется в поле Alt. Высота GPS и значение, введённое через поля вручную, сохраняются без автоматической замены.
Карта(Map) — координатная сетка,Спутник(Satellite) — спутниковые тайлы,Карта высот(Elevation map) — рельеф с окраской высот и затенением склонов.- В режиме
Позиция посталевый щелчок заполняет широту и долготу, а после загрузки DEM — полеAlt. - Выберите
Расстояние,РадиусилиАзимутв панели над картой. Первый щелчок задаёт точку A, движение мыши показывает предварительное измерение, второй щелчок фиксирует точку B. Следующий щелчок начинает новое измерение. Расстояниепоказывает длину по поверхности Земли;Радиусрисует круг с центром в A и радиусом A–B.Азимутпоказывает направление от A к B: 0° — истинный север, 90° — восток, отсчёт по часовой стрелке. При совпадении точек азимут не определён.Очистить измерениеубирает точки и фигуру. Измерения сохраняют географические координаты при перемещении карты и смене слоя и не меняют позицию поста.- На карте высот рядом с результатом отображаются приблизительные высоты рельефа в точках A/B. Это высоты земли, а не зданий или GPS-приёмника. Цветовая шкала расположена внизу карты; полный список источников открывается по ссылке слева.
- Новые участки спутниковой карты и карты высот загружаются из сети. Просмотренные тайлы кэшируются на диске. При недоступности данных высота не подменяется нулём. Источник рельефа: Terrain Tiles.
- Средняя кнопка перемещает карту.
- Колесо меняет масштаб относительно курсора.
- Координаты можно задать через
Lat,Lon,AltиSet position. Find GPSиFollow GPSотносятся к скрытому прототипу и недоступны в текущей Beta.
Direction Finder#
- Установите позицию поста.
- Подключите rotator.
- Задайте
DF MHz, измерительнуюBW,Step deg,Dwell msиEl. - Нажмите
Start DF.
Rotator проходит азимуты, Horizon ждёт завершения движения, накапливает уровень и строит диаграмму. На каждом азимуте обрабатываются все кадры за Dwell, а не один последний кадр: статус показывает duty-weighted уровень, SNR, ACTIVE и число кадров N. Это уменьшает вероятность пропустить редкий прыжок FHSS/ELRS. BW должна покрывать рабочую полосу выбранного ППРЧ-трека.
После полного прохода Horizon интерполирует максимум между шагами поворотного устройства. AZ — оценка азимута, +/- — угловая погрешность, BW — ширина главного лепестка по уровню -3 dB, C — доверие к диаграмме. Плоская или неполная диаграмма автоматически даёт низкое доверие и большую погрешность.
Красный статус DF REJECTED означает, что диаграмма оставлена только для диагностики и не добавлена на карту, в инцидент; RER session — В разработке. В статусе указана причина: мало измеренных углов, неполное покрытие, низкий контраст, слишком широкий луч, низкое доверие или чрезмерная погрешность. Для рабочего пеленга уменьшите шаг, увеличьте Dwell, проверьте полосу BW и направленность антенны.
Завершённый проход добавляет луч на карту. После измерений минимум из двух разнесённых позиций выполняется локальная триангуляция. Почти параллельные лучи отклоняются; рекомендуются три и более позиции. Clear bearings начинает новую сессию.
РЭР — В разработке#
Распределённая РЭР не прошла полевую приёмку. В текущей Beta окно RER session, кнопка карты и пункты меню скрыты; старый рабочий профиль не открывает это окно и не запускает синхронизацию постов. Наличие протоколов в исходниках не означает готовность функции для пользователей. Доступна карта с ручным вводом координат; GPS, устройства и пеленгация скрыты как функции в разработке. План распределённого РЭР описан в разделе 20.
В основных рабочих окнах и разделах настроек есть кнопка «Помощь». Она открывает краткие пояснения под кнопкой: назначение окна, порядок начала работы и значение основных параметров. Закрыть пояснение можно щелчком снаружи.
13. Automation#
«Автоматизация» настраивает одно действие по событию. Для обычной работы есть два готовых действия, которые заполняются через форму:
- «Показать уведомление» — показывает событие в Horizon. Звук включается галочкой. Текст можно оставить пустым: программа сама подставит данные события.
- «Записать IQ» — задайте диапазон монитора 1, длительность в секундах и папку. Запись начнётся автоматически и остановится через указанное время. Остальные мониторы записываются в текущих диапазонах. Для этого нужен работающий приём SDR и право записи IQ в лицензии.
Как настроить#
- В «Когда запускать» выберите событие:
- «При тревоге уровня» — «Настроить тревогу…» открывает настройку зоны частот, порога и включения тревоги.
- «При новой высокой угрозе» — один запуск при начале нового события High.
- В «Что сделать» выберите готовое действие и заполните его параметры.
- Нажмите «Выполнить один раз» для реальной проверки выбранного действия. Результат появится в журнале.
По умолчанию автозапуск выключен. Строка в первом блоке показывает его состояние. Запись IQ меняет диапазон первого монитора на указанный в форме. При уже идущей записи новая запись не запускается и существующая не прерывается. Файл каждого запуска получает отдельное имя в выбранной папке.
Кнопка «Помощь» открывает пояснения в выпадающем окне под кнопкой. Окно закрывается щелчком снаружи.
Для интеграций#
Галочка «Интеграции и внешние программы» раскрывает дополнительные действия: запуск программы, HTTP-запрос, Webhook и MQTT. Эти действия не нужны для уведомления и записи IQ.
Программа запускается отдельным процессом. Для .ps1 выберите powershell.exe, для .py — python.exe, путь к скрипту укажите в аргументах. REST поддерживает GET/POST/PUT/PATCH/DELETE, Webhook — POST JSON. MQTT 3.1.1 использует QoS 0 без логина и TLS; очередь отправки не подтверждает получение сообщения.
В «Помощи» для этих действий перечислены переменные:
${frequency_hz},${frequency_mhz}— основная частота;${secondary_frequency_hz},${secondary_frequency_mhz}— частота видео;${level_db},${confidence}— уровень сигнала и уверенность детектора;${event_type},${evidence},${timestamp}— тип, описание и время UTC.
Подставляются данные последнего срабатывания автоматизации. До первого события числовые значения равны нулю. Текстовые значения не экранируются для JSON.
14. Level alarm#
Confirm задает минимальное время непрерывного превышения порога. До его истечения зона имеет состояние PENDING, поэтому одиночный выброс FFT не создает инцидент и не запускает автоматизацию. Release задает время, которое уровень должен непрерывно оставаться ниже Level - Hyst, чтобы активная тревога вернулась в ARMED. Значения по умолчанию: 200 и 500 мс соответственно. Состояния рассчитываются по монотонному времени источника, а не по FPS интерфейса; настройки сохраняются в профиле рабочего пространства. Level alarm контролирует независимые частотные зоны.
- Нажмите
Add zoneи выберите строку. - Задайте имя,
Start,End,LevelиHyst. - Включите зону в столбце
On. - Включите общий
Enabled.
Hyst — гистерезис: после события уровень должен опуститься ниже порога на эту величину, чтобы зона вернулась в норму.
Sound— звук.Snapshot— снимок спектра.IQ clip— IQ до/после события; длительности задаютPreиPost.Testпроверяет звук, но не имитирует полный RF-инцидент.Open incidentsоткрывает материалы.
Зоны имеют независимые latch-состояния. Двойной щелчок по Evidence открывает папку события.
15. Channel planner#
- Задайте
Start,End,Width MHzи порогBusy dB. - Включите
Enabledи дождитесь не менее восьми наблюдений полного sweep. - Сравнивайте
Avg dB, устойчивый к одиночным выбросамP95 dB,BusyиCoverage. Число после косой черты в Coverage — количество наблюдений. - Дважды щёлкните готовую строку, чтобы перенести диапазон в основной Start/End.
До достаточного накопления строки показаны серым, Rank равен -, а статус остаётся COLLECTING. Канал получает рекомендацию только при Coverage не ниже 80% и минимум восьми наблюдениях. Reset statistics очищает накопление, Export CSV... сохраняет полную ранжированную таблицу с P95, coverage и признаком готовности.
Планировщик оценивает RF-активность, но не гарантирует юридическую или протокольную доступность канала.
16. Запись и воспроизведение IQ#
Record IQ#
- Запустите RX реального SDR.
- Выберите
Tools > Record IQ.... В окне «Запись IQ» задайте начало и конец диапазона в МГц для каждого активного монитора, файл и длительность в секундах. «До ручной остановки» (0 секунд) позволяет записывать без ограничения времени. - Нажмите «Начать запись». SDR настроится на выбранные диапазоны. По истечении длительности файл автоматически закрывается и готов к воспроизведению; приём и отображение спектра продолжаются.
- В непрерывной полосе Horizon создаёт
.hiq; в широком sweep или multi-RX —.hmiqс частотами и временными метками каждого сегмента. Широкая полоса снимается по участкам частот; это не одновременный непрерывный IQ всей полосы. - Во время записи пункт меню меняется на
Остановить запись IQ(Stop IQ recording). Он позволяет завершить запись раньше таймера. В поиске ELRS индикаторIQ RECпоказывает растущий размер записи иIQ DROP— потерянные при записи отсчёты.
IQ записывается до display/DSP ring в отдельном writer-потоке. Pause display не останавливает SDR и запись. Статус показывает размер и DROP. При росте DROP уменьшите sample rate или используйте быстрый диск. .hiq хранит center, rate, bandwidth, время и число отсчётов; заголовок финализируется при Stop.
Replay IQ / Открыть IQ#
.hiqоткрывается с метаданными автоматически..hmiqвосстанавливает несколько SDR либо аппаратный sweep, его частоты и общую временную шкалу. Спектр и waterfall строятся заново из сохранённых IQ-сэмплов.- Имена IQ-файлов могут содержать кириллицу.
.cf32,.iq,.binсчитаются interleaved CF32: float32 I, затем float32 Q; center и rate вводятся вручную.- Если RX уже работает, Replay корректно останавливает живой поток и не переключается обратно на симулятор.
- Файл проходит через тот же DSP и детекторы, что SDR.
Pause displayне ставит файл на паузу: позиция продолжает двигаться.Stop RXзавершает Replay, удаляет временный файловый пункт из списка и возвращает SDR, который был выбран до открытия файла.- Для анализа с начала откройте файл заново.
Передача IQ через SDR (закрытая Beta)#
Передача доступна только если выбранный драйвер сообщает TX, лицензия одновременно содержит iq.replay и отдельное право sdr.tx, а build safety gate открыт. Pro включает эти права, но они не обходят аппаратные и safety-проверки. Free не разрешает физическое излучение. Для рабочей сборки разработчика параметр CMake HORIZON_ENABLE_LOCAL_IQ_TX=ON дополнительно открывает TX-код после проверки подписанного entitlement sdr.tx. Он выключен по умолчанию; упаковщик Windows явно выключает его для выпуска. Поддержка TX устройством и оба подтверждения оператора остаются обязательными.
- Выберите TX-совместимый SDR и откройте
Tools > Transmit IQ through SDR.... - Выберите
.hmiq,.hiqлибо raw.cf32,.iq,.binили.raw. Для.hmiqвыберите записанный поток SDR, если их несколько. Частота, sample rate и полоса каждого блока берутся из записи; поля первого блока показывают начальные параметры. Для.hiqпараметры читаются из заголовка; для raw CF32 задайте их вручную. - Проверьте частоты записи и TX gain.
IQ amplitudeотдельно масштабирует I/Q и по умолчанию равен 10%. - Подтвердите подходящую антенну/нагрузку и право работать на выбранной частоте.
- Нажмите
Start TX. Передача выполняется один раз, без автоматического loop. Во время работы видны красный статусTX ACTIVE, прогресс иStop TX.
Для записи и последующей передачи используйте Record IQ..., остановите запись, затем выберите полученный файл в Transmit IQ through SDR.... HMIQ передаёт блоки одного выбранного SDR в порядке записи, перестраивая передатчик по частотам и параметрам блоков. Усиление приёмника из записи не применяется к TX: используются TX gain и IQ amplitude из окна передачи. Паузы между блоками и одновременная работа нескольких SDR не воспроизводятся; при перестройке передатчика возникает пауза. Прогресс и длительность относятся к выбранному потоку. До включения передачи проверяются структура файла, выбранные отсчёты и возможность настроить SDR на все параметры потока. Большой HMIQ-файл полностью читается перед стартом TX, поэтому проверка может занять время; виден статус «ПРОВЕРКА IQ-ФАЙЛА | TX ОСТАНОВЛЕН». Несовместимые параметры или повреждённый файл вызывают отказ. Полоса фильтра HackRF выбирается из доступных аппаратных значений; она может отличаться от записанной полосы. Порядок настройки соответствует контракту libhackrf.
Перед включением TX Horizon останавливает RX. После завершения или Stop устройство остаётся остановленным: возврат на приём выполняется пользователем вручную. Закрытие окна, ошибка файла, отказ драйвера и таймаут подачи данных всегда вызывают stopTx(). Рабочий профиль не восстанавливает TX вооружённым.
Нативные пути HackRF и bladeRF и общий Soapy TX покрыты тестами с поддельными библиотеками/устройствами. Перед снятием production-блокировки обязательна проверка на эквиваленте нагрузки и измерительном оборудовании для каждой модели SDR.
17. Performance, Sweep и Monitors#
Performance#
Maximum quality— максимальная плотность и частота обновления.Balanced— основной компромисс.Low CPU— реже обновляет и уменьшает обработку.
Для слабого ПК закройте Video и плавающие инструменты, уменьшите FFT, оставьте один monitor и при необходимости скройте Spectrum или Waterfall.
Sweep#
Fast— максимальная скорость прохода.Balanced— основной режим.Deep— больше IQ на сегмент, лучше для слабых/длинных признаков, но медленнее.
После первого полного прохода single-SDR sweep автоматически чаще возвращается к сегментам с устойчивым превышением локального шумового фона. Внеочередной проход помечается REVISIT; RV n показывает число возвратов в последнем завершенном цикле. Приоритет затухает, когда активность исчезает. Частота возвратов ограничена профилем Sweep, поэтому все базовые сегменты по-прежнему обязательно посещаются, а COV и AGE не выдают revisit за новое покрытие. Первый цикл всегда линейный: Horizon сначала строит полную карту диапазона и только затем включает адаптивный приоритет.
Для первичного поиска используйте Fast. Для подтверждения SF сузьте диапазон либо выберите Balanced/Deep.
В верхнем статусе COV показывает долю сегментов, которые действительно обновлены за допустимое время, а AGE — возраст самого старого свежего сегмента. Нормальное состояние после первого полного прохода — COV 100%. При ошибке перестройки Horizon очищает соответствующую часть панорамы; старый сигнал не выдаётся за новое наблюдение.
Monitors#
Tools > Monitors включает 1–6 экранов. В многомониторном режиме каждый имеет собственные Start/End. Новый монитор сначала наследует основной диапазон, затем становится независимым.
Кнопка отделения в заголовке дополнительного монитора открывает весь его блок Spectrum/Waterfall в отдельном системном окне. Перетащите это окно на другой экран. Закройте его или нажмите кнопку возврата в заголовке, чтобы вернуть монитор в сетку главного окна. Состав отделённых мониторов, экран и положение окон сохраняются в рабочем профиле.
Один SDR последовательно обслуживает объединённый диапазон всех экранов; это не несколько независимых приёмников. RAM-бюджет Waterfall делится между активными мониторами.
FFT общей полосы вычисляется один раз. В многомониторном режиме на отрисовку и в GPU каждого экрана передаются только bins его Start/End, поэтому добавление узких экранов не размножает полную sweep-карту.
Receiver manager#
В колонке Cal dB задаётся индивидуальная поправка уровня каждого SDR от -60 до +60 dB. Поправка применяется до объединения диапазонов и используется спектром, waterfall и детекторами. Она сохраняется по серийному номеру устройства.
Во время приёма колонки Rate / IQ, Queue, Drop и Age показывают настроенный sample rate, среднюю скорость поступления IQ, глубину очереди, потерянные блоки и возраст последнего блока. STALE означает, что данные не поступали больше секунды.
Если живой SDR не отдаёт IQ две секунды, receiver session аварийно завершилась или sweep несколько раз подряд не смог перестроить частоту, Horizon закрывает текущий тракт и выполняет до трёх автоматических перезапусков через 1, 2 и 4 секунды. Строка состояния показывает номер попытки и причину. После успешного запуска появляется RX RECOVERED; если новый отказ случился после 30 секунд стабильной работы, счётчик попыток начинается заново.
AUTO RECOVERY EXHAUSTED означает, что дальнейшие команды прекращены до ручного Start RX. Нажатие Stop RX отменяет ожидающий перезапуск. Воспроизведение IQ-файла никогда не перезапускается автоматически.
Раз в секунду Horizon записывает эту телеметрию в Documents/Horizon/Logs/receiver_health_YYYYMMDD.jsonl. Файл ограничен 32 MB, после чего предыдущая часть сохраняется с окончанием .1. Команды Tools > Export receiver diagnostics... и Tools > Open diagnostics folder экспортируют CSV и открывают каталог журналов.
Tools > Receiver manager показывает все найденные SDR. Флажок Use включает приёмник в план, а таблица заранее показывает назначенные monitor, объединённые диапазоны и число перестроек. Планировщик распределяет диапазоны так, чтобы минимизировать самый длинный sweep среди выбранных SDR. Выбор сохраняется в рабочем профиле; Rescan повторно опрашивает USB-устройства.
Переключатель Assignment задаёт способ распределения:
Auto balanceоставляет описанное автоматическое распределение;Per SDR rangesзакрепляет отдельный диапазон за каждой отмеченной SDR.
В режиме Per SDR ranges колонки Start MHz и End MHz становятся редактируемыми. Первая отмеченная SDR обслуживает Monitor 1, вторая — Monitor 2 и так далее; число экранов синхронизируется с числом выбранных приёмников. Диапазоны сохраняются по серийному номеру. Если устройство не поддерживает назначенную ему полосу, Horizon показывает UNSUPPORTED MONITOR и не подменяет его другим SDR. Поля и флажки можно менять во время RX: тракт перезапускается с новым назначением без повторного открытия Receiver manager.
При выборе двух и более SDR Start RX запускает параллельный receiver pool. Непересекающиеся частотные участки распределяются пропорционально sample rate, а обзорный monitor может одновременно собираться из нескольких приёмников. Spectrum, Waterfall и общий анализ сигналов/FPV получают независимые кадры и время соответствующего SDR. Изменение флажков во время RX автоматически перезапускает тракт с новым планом.
Для multi-RX верхний статус также показывает минимальное COV среди monitor и AGE самого старого использованного слоя. Покрытие считается по фактически полученным частотным bins, поэтому потеря одного блока видна даже внутри завершённого цикла. После секунды без IQ watchdog переводит SDR в STALE, исключает его слой, очищает связанные частоты и аннотации. Если поток не восстановился за две секунды, сессия завершается как MULTI-RX FAULT с причиной; старые обнаружения не продолжают участвовать в тревогах.
Перед стартом pool Horizon открывает выбранные SDR и запрашивает их реальные RX frequency ranges. Каждый участок назначается только приемнику, который полностью его покрывает. Если хотя бы один monitor недоступен всем выбранным устройствам, RX не запускается: строка состояния показывает номер непокрытого monitor. Это исключает тихую работу системы с незаметной слепой зоной.
Tools > Record IQ... в multi-RX сохраняет контейнер .hmiq. Каждый блок содержит serial SDR, сегмент и цикл sweep, центральную частоту, фактический sample rate и монотонное время. Pause display не останавливает запись. Строка состояния показывает объём и DROP; при росте DROP нужен более быстрый диск или меньший rate. Tools > Replay IQ... открывает .hmiq, индексирует потоки без загрузки всего файла в RAM и восстанавливает многоприёмный план. Блоки поступают в общий DSP по записанным монотонным меткам времени и циклически воспроизводятся. Pause display скрывает новые кадры, но временная позиция файла продолжает двигаться.
При классификации Horizon сначала проверяет подтверждённый SF, затем характерные диапазоны и ширины Wi-Fi/GSM/LTE. Метка FHSS появляется только при отсутствии более подходящего типа сигнала; одно перемещение пика по sweep-карте не считается достаточным подтверждением канала управления.
18. Меню и рабочий профиль#
Файл#
Открыть IQ...— открыть.hiqили сырой CF32.Выход— сохранить профиль и закрыть программу.
Правка#
Настройки...— Sample rate и Waterfall FFT.Сбросить масштаб— полный диапазон Spectrum/Waterfall.Сбросить рабочий профиль— удалить сохранённые параметры; применяется после перезапуска.
Вид#
Дублирует видимость инструментов, Monitors и Performance. Плавающие окна можно перемещать, закреплять и закрывать.
Справка#
SDR runtime...показывает найденные аппаратные библиотеки и factories.Канал обновленийвыбираетStableилиBeta; выбор сохраняется.Проверить обновления...запрашивает манифест выбранного канала.
Проверка обновлений не останавливает RX и ничего не устанавливает автоматически. Stable и Beta доступны только после регистрации и входа в Horizon-аккаунт. Horizon обновляет короткоживущий access token непосредственно перед запросом, не сохраняет его и использует Bearer для manifest и release artifact. Beta дополнительно требует updates.beta; исчезнувшее право не подменяется Stable.
Пункт работает только в production-сборке со встроенным HTTPS endpoint вида /v1/releases/latest, отдельным Ed25519 public key релизов и закреплённым SHA-256 сертификата издателя Horizon. Для найденной версии доступны страница релиза и Скачать и проверить. Во втором случае выберите путь: Horizon сначала загружает файл во временный staging, проверяет подписанные размер и SHA-256, затем Windows Authenticode, цепочку и закреплённого издателя, после чего повторно проверяет размер/SHA-256 и атомарно сохраняет файл. Unsigned-файл и подпись другого издателя отклоняются. При отмене или любой ошибке старый файл не заменяется. После успеха можно открыть папку; запуск EXE остаётся ручным действием пользователя.
Сохраняются диапазоны, rate, FFT, режимы, мониторы, карта, зоны, внешние устройства, раскладка. РЭР — В разработке: старые Session/Post/пути не включают скрытый инструмент; секрет сессии не сохраняется. Не восстанавливаются вооружёнными: AMP, TX, alarm, High threat, Auto DF, planner, video, recording и Auto sync.
19. Встроенный симулятор#
RF scenario simulator [SIM-RF-0001] создаёт:
- шесть независимых ELRS-подобных ППРЧ SF5–SF10 в диапазоне 2,4 ГГц;
- ELRS-подобные ППРЧ SF5/SF7/SF9 в диапазоне 868 МГц;
- ELRS-подобные ППРЧ SF6/SF8/SF10 в диапазоне 915 МГц;
- Wi-Fi-подобный burst 20 МГц на 2462 МГц;
- GSM-подобный сигнал около 947,4 МГц;
- analog-video-подобный сигнал на 5806 МГц.
У ППРЧ-источников различаются частота прыжков, длительность пакета и занимаемый диапазон. Набор конкретного диапазона выбирается при настройке центральной частоты, поэтому источники 2,4 ГГц не появляются при тестировании 868/915 МГц и наоборот. Это детерминированные формы для проверки отображения и анализаторов, а не полные протокольные кадры ELRS, Wi-Fi, GSM или аналогового видео.
Для rotator используйте SIM-ROTATOR.
20. Распределённая РЭР — В разработке#
Функция скрыта для пользователей. Она не входит в готовые возможности бесплатной Beta и не продаётся как готовый сервис. Экспериментальные протоколы обмена, синхронизация наблюдений, облачные роли и объединение данных нескольких постов требуют отдельной приёмки. TDoA требует синхронизированного оборудования и также находится в разработке.
До открытия раздела нужны измерения минимум двух реальных разнесённых постов, проверка UTC и погрешности часов, координат и калибровки антенн, отклонения ложных сопоставлений, устойчивости обмена и защиты доступа. Проверки файлов/математики на компьютере не заменяют эти полевые измерения.
21. Файлы и каталоги#
- Инциденты:
Documents/Horizon/Incidents. - Журналы:
Documents/Horizon/Logs. - Видео:
Videos/Horizon/Video, с fallback в Documents. - Ручная IQ-запись: путь выбирает оператор.
Инцидент может содержать incident.json, spectrum.png и capture.hiq.
22. Термины#
- IQ — комплексные отсчёты до FFT.
- Sample rate — IQ-отсчёты в секунду и мгновенная полоса.
- FFT — преобразование IQ в частотные бины.
- SNR — превышение над шумом.
- SF — spreading factor LoRa.
- Pkt MHz — мгновенная полоса пакета.
- Range MHz — весь занятый диапазон ППРЧ-трека.
- Hop / Hops/s — переход / оценка переходов в секунду.
- Dwell — время на одном канале.
- Duty/Activity — доля активности.
- Fill — спектральная заполненность.
- Persistence — устойчивость во времени.
- AoA — направление прихода.
- TDoA — разность времени прихода на синхронизированные посты.
- RMS error — среднеквадратичная невязка пеленгов.
23. Устранение проблем#
SDR не найден#
Проверьте USB/питание, драйвер производителя и SoapySDR-модуль, остановите RX и повторите поиск. Сначала проверьте SDR в фирменной утилите.
Низкий FPS#
Закройте Video и неиспользуемые инструменты, уменьшите FFT, выберите Balanced/Low CPU и Fast sweep, уменьшите rate/диапазон, оставьте один monitor или скройте один из основных графиков.
Не видны короткие чирпы#
Выберите Maximum quality, начните с FFT 4096–8192, сузьте диапазон, увеличьте временную глубину и настройте Auto/Manual color. Проверьте IQ-запись: при sweep источник мог передавать, когда SDR находился на другом сегменте.
Время Waterfall кажется неправильным#
Шкала показывает возраст сохранённых строк, не длительность файла. В sweep одна строка полного диапазона составлена из временно разнесённых сегментов. Для точного временного анализа сузьте диапазон до мгновенной полосы SDR.
SF не определяется#
Дайте несколько пакетов, проверьте SNR и отсутствие перегрузки, сузьте диапазон, выберите Balanced/Deep и проверьте sample rate IQ-файла.
Много ложных меток#
Выключите Raw candidates, ждите CONFIRMED, отключите AMP при интермодуляции, сузьте диапазон и сохраняйте IQ ложного события для улучшения детектора.
Аналоговое видео не синхронизируется#
Проверьте PAL/NTSC, частоту, непрерывный 20 MS/s RX и возможности SDR. Отключите AMP при перегрузке.
Карта показывает неверную ручную позицию#
Проверьте введённые широту, долготу и высоту. GPS и пеленгация скрыты в текущей Beta.