Калибровка SDR-приемника

Калибровка SDR-приемника

В статье про настройку APRS IGate я рассказал не про всё. Нет, я не пытался утаить от вас ценную информацию, просто не хотел «раздувать» статью. А не рассказал я тогда про калибровку SDR-приёмника через Kalibrate.

APRS IGate — домашняя станция для приема APRS пакетов
APRS IGate с использованием SDR-приемника и Direwolf. Шлюз для взаимодействия с интернет-сервисами по радио.

Kalibrate

SDR-приёмники — это обычная массовопроизводимая электроника, а не какое-то высокоточное лабораторное оборудование. А это значит, что все приёмники врут.

Все врут

Но погрешность частоты можно скорректировать с помощью Kalibrate.

Что за погрешность? Откуда она берётся? Как работает Kalibrate? — это те вопросы, на которые я не смогу вам ответить. Потому что радио для меня это просто необъяснимое волшебство. 😅

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

Что за сигнал не знаю, но приведу цитату из другой (умной) статьи:

Для коррекции частоты используется канал FCCH стандарта GSM, точность которого должна составлять 0.05 ppm.

Базовая станция периодически передаёт пакет коррекции по каналу коррекции частоты (FCCH). FCCH повторяется в каждом 51 фрейме TDMA, а пакет коррекции частоты находится во фреймах 0, 10, 20, 30 и 40 в таймслоте 0.

Всё очень просто и понятно! 😅 В общем, давайте уже переходить к практике.

Измеряем погрешность через kal-rtl

Мой SDR трудится 24/7 в качестве приёмника для APRS-шлюза, а сам шлюз настроен на одноплатнике с DietPi. DietPi — это дистрибутив, основанный на Debian, и он оказался бесполезен — в репах Debian нет пакета kalibrate-rtl.

Поэтому для калибровки я подключил приёмник к своему ноуту на Fedora, где Kalibrate можно поставить из официального репозитория:

dnf install kalibrate-rtl

После установки Kalibrate необходимо просканировать сотовые вышки в округе, используя команду kal-rtl -s GSM900. Через параметр -s задаются частоты для сканирования — в моём случае удалось найти вышки в диапазоне 900 МГц:

Далее нужно выбрать канал с наибольшей мощностью и подставить его в команду kal-rtl -c 15:

В итоге для моего приёмника погрешность составляет -4.869 ppm.

В идеале, перед замерами нужно чтобы приемник нагрелся и «вышел на рабочую температуру». Мой приёмник до этого и так работал 24/7, поэтому мне дополнительно ничего делать не пришлось.

Плюс ещё можно попереключаться между разными каналами и взять усреднённую погрешность.

Что делать с полученным значением?

Полученную погрешность нужно прописать в настройках программы, которую вы используете для работы с SDR. Точно знаю, что такая опция есть как минимум в SDR++ и Gqrx.

Я же использую rtl_fm для своего шлюза, и в нём погрешность указывается в параметре -p. Если у вас такой же APRS IGate как у меня, то этот параметр нужно добавить в файле /etc/systemd/system/rtl-aprs.service:

[Service]
…
ExecStart=/usr/bin/rtl_fm -p -4.869 -f 432.500M
…

А затем для перезапуска шлюза нужно выполнить:

systemctl daemon-reload
systemctl restart rtl-aprs direwolf
Rust и APRS телеметрия — как у меня настроен Direwolf - man smart-home
Судя по онлайнам, стрим про моддинг Prison Architect как-то не особо зашел 🙂 На стриме я показывал как можно «взламывать» игры и другие приложения с помощью DLL-инъекций. Но с подобными инъекциями нюанс в том, что на каком-нибудь Python их написать не получится — нужно что-то низкоуровневое. Т…

Вот и всё. Не уверен, что эта заметка много кому будет полезна, но я всё же решил её зачем-то написать. А если вдруг такой контент вам не интересен, то можете заглянуть в мой Telegram — вдруг там найдёте что-нибудь по вкусу. 🙂

man smart-home
Telegram про умный дом: идеи, девайсы, Home Assistant.

Была ли статья полезна?

Хотите сказать спасибо? Кофе автору — ваша благодарность.

На кофе
Подписка на новые статьи

Уведомления, как только в блоге появится что-нибудь интересненькое.

Подписываясь, вы даете согласие на обработку персональных данных.