kalibrate-rtl

Wireless & RF v0.4.1

Сканер GSM-частот для RTL-SDR: определяет активные базовые станции GSM в эфире и измеряет ошибку частоты (PPM offset) донгла. Необходим для калибровки RTL-SDR перед работой с gr-gsm, IMSI-catcher и другими GSM-инструментами.

v0.4.1
current
Добавлен 25.06.2026 · Обновлён 25.06.2026 · Wireless & RF
Установка
sudo apt install kalibrate-rtl
# или:
git clone https://github.com/steve-m/kalibrate-rtl
cd kalibrate-rtl && ./bootstrap && ./configure
make && sudo make install

# Сканирование GSM-900:
kal -s GSM900

# Калибровка:
kal -c 51 -b GSM900
переведено ИИ

СОДЕРЖАНИЕ

Kalibrate, или kal, может сканировать базовые станции GSM в заданном частотном диапазоне и использовать эти базовые станции для вычисления смещения частоты местного генератора.

Описание ниже относится к оригинальному kal — эта версия была модифицирована для устройств RTL-SDR.

Данный проект может исправлять лишь небольшое смещение в ppm. Вам необходимо либо самостоятельно получить грубую начальную оценку, либо использовать проект, который может автоматически исправлять бо́льшие смещения. Например, https://github.com/viraptor/fm_tune или https://github.com/JiaoXianjun/LTE-Cell-Scanner

ЧТО

О тактовых генераторах

USRP1, как и ряд других устройств, имеет встроенный генератор, точность которого гарантирована лишь в пределах 20 частей на миллион (ppm). (Хотя на практике генератор USRP обычно ближе к 3 ppm.) Этого достаточно для ряда задач, но не для всех. К счастью, USRP также поддерживает внешний генератор. Например, Clock Tamer, KSP 52 МГц и FA-SY 1 — это точные часы, которые хорошо работают с USRP.

Как правило, внешние часы необходимо калибровать, чтобы убедиться в их максимальной точности. Осциллограф, вероятно, является лучшим способом определить точность этих часов. Однако хороший осциллограф дорог, и не у каждого есть к нему доступ. Существуют и другие способы калибровки этих устройств — документация к FA-SY 1 описывает использование сигналов времени WWV. Аналогичным образом, базовые станции GSM обязаны быть точными в пределах 0,05 ppm, поэтому они также могут служить точным эталонным генератором.

Если у вас есть плата USRP, охватывающая частоты GSM в вашем регионе, использование базовой станции GSM является особенно удобным.

Описание

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

Вспышка коррекции частоты состоит из определённой битовой последовательности, которая после модуляции представляет собой синусоиду с частотой, равной четверти скорости передачи битов GSM. А именно: (1625000 / 6) / 4 = 67708,3 Гц. Поиска этого чистого тона в канале мобильная станция может определить смещение своих часов, измерив, насколько получаемая частота отличается от 67708,3 Гц.

Существует множество способов идентификации чистого тона. Например, можно захватить пакет данных, а затем проанализировать его с помощью преобразования Фурье, чтобы определить, сосредоточена ли большая часть мощности сигнала на определённой частоте. В качестве альтернативы можно задать полосовой фильтр на 67708,3 Гц, а затем сравнивать мощность сигнала до и после его прохождения через фильтр. Однако оба этих метода имеют недостатки. Метод FFT требует значительных ресурсов и не позволяет легко обнаруживать края вспышек коррекции частоты. Метод фильтрации либо недостаточно точен, либо не способен обнаруживать бо́льшие смещения. Можно использовать несколько фильтров, но это также требует значительных ресурсов.

kal использует гибрид методов FFT и фильтрации. Фильтр, применяемый в kal, — это адаптивный фильтр, описанный в статье:

G. Narendra Varma, Usha Sahu, G. Prabhu Charan, Robust Frequency Burst Detection Algorithm for GSM/GPRS.

Адаптивный эквалайзер линий (ALE) пытается предсказать входной сигнал, подстраивая коэффициенты своего фильтра. Предсказание сравнивается с реальным сигналом, и коэффициенты корректируются таким образом, чтобы ошибка была минимальна. Если входной сигнал содержит узкополосный сигнал с большой амплитудой на фоне широкополосного шума, результатом работы фильтра будет чистая синусоида той же частоты, практически свободная от широкополосного шума.

kal применяет ALE к буферу и вычисляет ошибку между предсказанием ALE и входным сигналом в каждой точке сигнала. Затем kal вычисляет среднее значение всех ошибок. Когда ошибка падает ниже среднего на протяжении длины, соответствующей вспышке коррекции частоты, это указывает на обнаруженную вспышку.

Как только местоположение вспышки коррекции частоты определено, необходимо установить её частоту, чтобы вычислить смещение от 67708,3 Гц. Берётся входной сигнал, соответствующий участкам с низким уровнем ошибки, и пропускается через FFT. Наибольший пик в выходном сигнале FFT соответствует обнаруженной частоте вспышки коррекции частоты. Этот пик затем используется для определения частотного смещения.

Любой шум в системе влияет на измерения, поэтому kal усредняет результаты несколько раз перед отображением смещения. Отображаются диапазон значений и стандартное отклонение, что позволяет оценить точность измерения.

КАК

kal использует систему GNU Autoconf и должен легко собираться на большинстве платформ *nix.

Пример для Debian:

$ git clone https://github.com/steve-m/kalibrate-rtl.git
$ sudo apt-get install libtool libfftw3-dev
jl@thinkfoo:~/src$ cd kal-v0.4.1
jl@thinkfoo:~/src/kal-v0.4.1$ ./bootstrap && CXXFLAGS='-W -Wall -O3' ./configure && make
[...]
jl@thinkfoo:~/src/kal-v0.4.1$ src/kal -h
kalibrate v0.4.1, Copyright (c) 2010, Joshua Lackey

Usage:
    GSM Base Station Scan:
        kal <-s band indicator> [options]

    Clock Offset Calculation:
        kal <-f frequency | -c channel> [options]

Where options are:
    -s  band to scan (GSM850, GSM900, EGSM, DCS, PCS)
    -ffrequency of nearby GSM base station
    -c  channel of nearby GSM base station
    -b  band indicator (GSM850, GSM900, EGSM, DCS, PCS)
    -R  side A (0) or B (1), defaults to B
    -A  antenna TX/RX (0) or RX2 (1), defaults to RX2
    -g  gain as % of range, defaults to 45%
    -F  FPGA master clock frequency, defaults to 52MHz
    -v  verbose
    -D  enable debug messages
    -h  help
jl@thinkfoo:~/src/kal-v0.4.1$ src/kal -s 850
kal: Scanning for GSM-850 base stations.
GSM-850:
    chan: 128 (869.2MHz -  13Hz)    power: 9400.80
    chan: 131 (869.8MHz +   7Hz)    power: 4081.75
    chan: 139 (871.4MHz +  10Hz)    power: 2936.20
    chan: 145 (872.6MHz -   7Hz)    power: 33605.48
jl@thinkfoo:~/src/kal-v0.4.1$ src/kal -c 145
kal: Calculating clock frequency offset.
Using GSM-850 channel 145 (872.6MHz)
average     [min, max]  (range, stddev)
-   1Hz     [-8, 7] (14, 3.948722)
overruns: 0
not found: 0

КТО

Я хотел бы поблагодарить Александра Чемериса за его ценные замечания, идеи и тестирование большого числа альфа-версий. Также я хотел бы поблагодарить Марка Дж. Блэйра за его помощь в запуске kal на Mac OS X.

Я хотел бы также поблагодарить Марка Дж. Блэйра за его помощь в запуске kal на Mac OS X. (А также за то, что помог мне осознать, что я фактически никогда не использовал параметр -F...)

Copyright (c) 2010, Joshua Lackey (jl@thre.at), модифицировано для использования с устройствами rtl-sdr.

Copyright (c) 2012, Steve Markgraf (steve@steve-m.de)

Временное сопровождение: Stan Pitucha (viraptor@gmail.com)

Комментарии
Войдите, чтобы оставить комментарий