Rtl sdr
Эта статья про программное обеспечение, про USB свисток смотрите статью RTL-SDR.
rtl_sdr - набор небольших утилит от osmocom, работающих из терминала.
Установка
Windows
- Скачиваем архив отсюда: https://ftp.osmocom.org/binaries/windows/rtl-sdr/. Из всей кучи выбираем архив под вашу ОС (32 или 64 бит) и с самой свежей датой. Подходящий архив для 64 бит находится в самом низу списка.
- Распаковываем все файлы в одну папку.
- ?????
- PROFIT!
Чтобы легко и непринуждённо открыть командную строку сразу в нужной нам папке, нажимаем Shift+ПКМ в этой папке в проводнике, затем выбираем "Открыть окно команд".
Linux
Debian/Ubuntu: sudo apt install rtl-sdr
Arch/Manjaro: sudo pacman -S rtl-sdr
Сборка из исходников (вам потребуется установить libusb-1.0-0-dev):
git clone https://github.com/osmocom/rtl-sdr.git cd rtl-sdr mkdir build cd build cmake .. make sudo make install
Список утилит
rtl_sdr
Утилита предназначена для сохранения дампа эфира в IQ файл.
Использование: rtl_sdr -f частота [опции] [имя выходного файла]
Опции:
-f частота в герцах -s частота дискретизации в герцах (по умолчанию: 2048000) -d номер устройства (если у вас их подключено больше одного) (по умолчанию: 0) -g усиление в децибелах (по умолчанию: автоматическое) -p коррекция PPM (по умолчанию: 0) -b размер блока на выходе (по умолчанию: 16 * 16384) -n количество отсчётов (семплов), сколько должно быть принято (по умолчанию: бесконечно) -S принудительно использовать синхронный выход (по умолчанию асинхронный)
Числа можно указывать в научной нотации, например 1.8e6 вместо 1800000, 392e6 вместо 392000000. Также поддежриваются суффиксы k, M, G. Вместо имени файла можно указать - для вывода результата на стандартный вывод (stdout).
Пример: rtl_sdr -f 392e6 -s 1.8e6 /tmp/capture.bin
rtl_fm
Утилита для приёма и демодуляции сигнала. Поддерживает следующие виды модуляции: FM, AM, USB, LSB, RAW.
Использование: rtl_fm -f частота [опции] [имя выходного файла]
Опции:
-f частота в герцах
Можно указать несколько частот сразу, программа будет их сканировать. Например: -f 145.500M -f 145.575M
Можно указать диапазон с шагом. Например: -f 118M:137M:25k
Для сканирования обязательно должен быть включен шумодав (-l).
-M модуляция (по умолчанию: fm)
Доступные виды модуляции: fm, wbfm, raw, am, usb, lsb
wbfm == -M fm -s 170k -o 4 -A fast -r 32k -l 0 -E deemp
raw == вывод сырого эфира в виде IQ (как в утилите rtl_sdr)
-s частота дискретизации (по умолчанию: 24k)
-d номер устройства (если у вас их подключено больше одного) (по умолчанию: 0)
-g усиление в децибелах (по умолчанию: автоматическое)
-l шумодав (по умолчанию: 0 - выключено)
for fm squelch is inverted
-o децимация (oversampling) (по умолчанию: 1, рекомендуется: 4)
-p коррекция PPM (по умолчанию: 0)
-E дополнительные опции (по умолчанию все выключены)
Можно включать сразу несколько. Например: -E deemp -E dc
Список всех поддерживаемых опций:
edge: enable lower edge tuning
dc: enable dc blocking filter
deemp: enable de-emphasis filter
direct: прямая оцифровка (полезно для приёма КВ)
offset: использовать offset tuning (актуально только для E4000)
-r частота передискретизации (по умолчанию: выключено)
-t задержка шумодава (по умолчанию: 10)
Положительные значения разрешают сканирование.
Отрицательные значения приведут к завершению работы утилиты при закрытии шумодава.
-F размер фильтра (по умолчанию: выключено)
Включает более качественный фильтр низких частот
Доступные значения: 0 или 9.
0 имеет немного более плохое качество.
-A выбор тригонометрических функций (по умолчанию: std)
Доступные значения: std, fast, lut
Числа можно указывать в научной нотации, например 1.8e6 вместо 1800000, 392e6 вместо 392000000. Также поддежриваются суффиксы k, M, G. Вместо имени файла можно указать - для вывода результата на стандартный вывод (stdout).
Примеры:
- прослушивание вещательных станций с помощью SoX:
rtl_fm -f 104.7M -M wbfm - | play -r 32k - приём цифровых сигналов:
rtl_fm -f ... -s 22050 - | multimon -t raw /dev/stdin
rtl_power
Утилита для сохранения статистики по уровню сигнала на указанном диапазоне в .csv файл. Применяется совместно с утилитой heatmap.py.
Использование: rtl_power -f частотный диапазон [опции] [имя выходного файла]
Опции:
-f от:до:размер пикселя (всё в герцах)
Размер пикселя может быть округлён в меньшую сторону. Допустимые значения от 1 до 2.8M.
-i интервал проходов в секундах (по умолчанию: 10)
Интервал должен быть больше, чем время полного прохода.
-1 провести только один проход (single-shot) (по умолчанию выключено)
-e таймер времени работы в секундах, доступны суффиксы s, m, h (по умолчанию выключено)
-d номер устройства (если у вас их подключено больше одного) (по умолчанию: 0)
-g усиление в децибелах (по умолчанию: автоматическое)
-p коррекция PPM (по умолчанию: 0)
-w оконная функция (по умолчанию: rectangle)
Доступные варианты: hamming, blackman, blackman-harris, hann-poisson, bartlett, youssef
-c урезание спектра (по умолчанию: 0%, рекомендуется: 20%-50%)
Отбрасывает данные по краям спектра, значение 100% отбрасывает все данные.
Не будет работать на размере пикселя больше 1 МГц.
-F размер фильтра (по умолчанию: выключено)
Включает более качественный фильтр низких частот
Доступные значения: 0 или 9.
0 имеет немного более плохое качество.
Попробуйте совместно с -c 50%
-P включает peak hold (по умолчанию выключено)
-D прямая оцифровка (полезно для приёма КВ) (по умолчанию выключено)
-O использовать offset tuning (актуально только для E4000) (по умолчанию выключено)
Вместо имени файла можно указать - для вывода результата на стандартный вывод (stdout).
Результат работы программы сохраняется в CSV следующего формата:
дата, время, частота начала диапазона, частота конца диапазона, шаг частоты, количество отсчётов, значение в dBm, значение в dBm, ...
Примеры:
- сканирование вещательного FM диапазона:
rtl_power -f 88M:108M:125k fm_stations.csv. Отдельные радиостанции должны быть хорошо различимы. - пятиминутное сканирование по всему диапазону в невысоком качестве:
rtl_power -f 100M:1G:1M -i 5m -1 survey.csv - собирать данные в течение часа, сжимать их на лету:
rtl_power -f ... -e 1h | gzip > log.csv.gz
Использование совместно с heatmap.py
- Для работы нам нужен python и python-pil
- Скачиваем скрипт отсюда: https://raw.githubusercontent.com/keenerd/rtl-sdr-misc/master/heatmap/heatmap.py
- Запускаем скрипт, например так:
python heatmap.py input_file.csv output.png
Для получения большей информации по поводу скрипта можно прочитать встроенную справку: python heatmap.py -h
rtl_eeprom
Утилита для просмотра/изменения серийного номера, названия свистка и прочих данных.
Запись некорректных значений может испортить свисток!
Использование: rtl_eeprom [опции]
Опции:
-d номер устройства (если у вас их подключено больше одного) (по умолчанию: 0)
-m задать название производителя
-p задать название устройства
-s задать серийный номер
-i 0 или 1 - включить или выключить ИК-приёмник
-g записать стандартную конфигурацию
Нужно выбрать один из вариантов:
realtek - Realtek default (as without EEPROM)
realtek_oem - Realtek default OEM with EEPROM
noxon - Terratec NOXON DAB Stick
terratec_black - Terratec T Stick Black
terratec_plus - Terratec T Stick+ (DVB-T/DAB)
-w имя файла для записи дампа в свисток
-r имя файла для сохранения дампа со свистка на компьютер
-h показать справку
rtl_adsb
Утилита для приёма сигналов ADSB.
Использование: rtl_adsb [опции] [имя выходного файла]
Опции:
-d номер устройства (если у вас их подключено больше одного) (по умолчанию: 0) -V вывод дополнительной информации (по умолчанию выключено) -S показывать короткие кадры (по умолчанию выключено) -Q качество приёма (0: без проверок, 0.5: половина бита, 1: один бит (по умолчанию), 2: два бита) -e кол-во разрешённых ошибок (по умолчанию: 5) -g усиление в децибелах (по умолчанию: автоматическое) -p коррекция PPM (по умолчанию: 0)
Вместо имени файла можно указать - для вывода результата на стандартный вывод (stdout).
Примеры:
- стриминг с помощью netcat:
rtl_adsb ... | netcat -lp 8080 - стриминг с помощью socat:
rtl_adsb ... | socat -u - TCP4:sdrsharp.com:47806
rtl_biast
Утилита для включения/выключения Bias-T - питания активной антенны. Актуально только для RTL-SDR v3. Также с помощью этой утилиты можно переключать любые GPIO порты, что актуально уже для всех свистков.
Использование: rtl_biast [опции]
Опции:
-d номер устройства (если у вас их подключено больше одного) (по умолчанию: 0) -b включить или выключить пин (по умолчанию: 0) -g номер пина GPIO (по умолчанию: 0 - пин с Bias-T)
Примеры:
- включить Bias-T:
rtl_biast -d 0 -b 1 - включить другой порт GPIO:
rtl_biast -d 0 -g 1 -b 1
rtl_tcp
Утилита для запуска TCP сервера. К этому серверу можно подключиться из других SDR программ, например из SDR#, SDR++, GNU Radio и других.
Использование: rtl_tcp [опции]
Опции:
-a адрес (по умолчанию: 127.0.0.1) -p порт (по умолчанию: 1234) -f частота в герцах (по умолчанию: 100M) -g усиление в децибелах (по умолчанию: автоматическое) -s частота дискретизации в герцах (по умолчанию: 2048000) -b количество буферов (по умолчанию: 32, задаётся библиотекой) -n максимальное количество связанных буферов (по умолчанию: 500) -d номер устройства (если у вас их подключено больше одного) (по умолчанию: 0) -P коррекция PPM (по умолчанию: 0)
Пример: rtl_tcp -a 192.168.0.100 - запуск сервера для клиентов из локальной сети (вместо 192.168.0.100 укажите IP сервера в локальной сети).
Для подключения в программе SDR# выберите вверху слева окна программы устройство RTL-SDR (TCP), кликните на шестерёнку и введите IP адрес. После подключения вы сможете менять частоту и усиление, как на обычном USB свистке.
Данные передаются в сыром несжатом виде, поэтому требуется достаточная скорость сети, в идеале кабель 100 мбит, но Wi-Fi типа 802.11ac тоже сойдёт. 802.11n хватает впритык и в зашумленной многоэтажке или при плохом сигнале может терять пакеты.
Требуемую скорость в байтах в секунду можно расчитать так: spd = sample_rate * 2. Для 2048000 Гц потребуется канал около 4 мб/с.
rtl_test
Утилита для тестирования и бенчмарка USB свистов.
Использование: rtl_test [опции]
Опции:
-s частота дискретизации (по умолчанию: 2048000) -d номер устройства (если у вас их подключено больше одного) (по умолчанию: 0) -t провести бенчмарк свистка на тюнере E4000 -p провести измерение PPM -b размер блока (по умолчанию: 16 * 16384) -S принудительно использовать синхронный выход (по умолчанию асинхронный)
Примеры:
- просто проверить работоспособность свистка:
rtl_test. Если на экране не появляются ошибки или сообщения о потерях данных, значит свисток работает корректно. - найти максимально возможную частоту дискретизации:
rtl_test -s 3.2e6. Постепенно уменьшайте частоту, пока не пропадут сообщения о потерях данных. 2.4e6 работает на всех свистках, 2.88e6 на большинстве (в зависимости от контроллера USB в материнской плате). - найти доступный диапазон частот на свистке с тюнером E4000 (он отличается от свистка к свистку, также зависит от температуры):
rtl_test -t