В статье про настройку APRS IGate я рассказал не про всё. Нет, я не пытался утаить от вас ценную информацию, просто не хотел «раздувать» статью. А не рассказал я тогда про калибровку SDR-приёмника через Kalibrate.
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
Вот и всё. Не уверен, что эта заметка много кому будет полезна, но я всё же решил её зачем-то написать. А если вдруг такой контент вам не интересен, то можете заглянуть в мой Telegram — вдруг там найдёте что-нибудь по вкусу. 🙂