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