среда, 3 сентября 2014 г.

Software Defined Radio (SDR)

Введение

Тюнеры

Можно использовать большинство недорогих китайских usb-тюнеров (см. ebay.com) обладающих АЦП RTL2832U и чипом-тюнером E4000 или R820T. Однако эти тюнеры не пригодны для просмотра аналогового ТВ (где полоса приёма 6-8МГц превышает возможности тюнера) или цифрового ТВ стандарта DVB-T2 (карта использования).
Тюнер на RTL2832U и R820T способен принимать в диапазоне частот от ~24МГц до ~1766МГц. Частота дискретизации до 3.2 МГц, при частоте выше 2.8 МГц могут быть потери данных.


Начало

Далее речь пойдёт о ПО для GNU/Linux, которое, однако, может быть и кроссплатформенным. Все примеры проверены на USB 2.0 DVB-T/DAB/FM RTL2832U R820T приёмнике.
Для зашиты от помех устройство было экранировано обыкновенным алюминиевым скотчем (примерно так). Другие рекомендации по уменьшению шумов.

Просмотрим буфера сообщений ядра dmesg на предмет наличия только что подключённого устройства (выдело жирным):
 dmesg -T | tail

[Чт. авг. 17 23:27:17 2019] usb 2-1.2: New USB device found, idVendor=0bda, idProduct=2838
[Чт. авг. 17 23:27:17 2019] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[Чт. авг. 17 23:27:17 2019] usb 2-1.2: Product: RTL2838UHIDIR
[Чт. авг. 17 23:27:17 2019] usb 2-1.2: Manufacturer: Realtek
[Чт. авг. 17 23:27:17 2019] usb 2-1.2: SerialNumber: 00000001
Запустим программу rtl_test, чтобы окончательно убедится, что всё в порядке:
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
Sampling at 2048000 S/s.

Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.

Reading samples in async mode...

Если возникает ошибка:

Found 1 device(s):
  0:  Generic RTL2832U OEM
Using device 0: Generic RTL2832U OEM
Kernel driver is active, or device is claimed by second instance of librtlsdr.
In the first case, please either detach or blacklist the kernel module
(dvb_usb_rtl28xxu), or enable automatic detaching at compile time.
usb_claim_interface error -6
Failed to open rtlsdr device #0.

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

modprobe -r dvb_usb_rtl28xxu


Программы

GNURadio [link]

Мощный инструмент для обработки сигналов. Представляет собой достаточной простой способ для обработки сигналов с помощью создания диаграмм потока управления, которые автоматически генерируются в pyhon скрипты. Позволяет визуализировать, изменять, модулировать, получать и эмулировать сигналы.

GQRX [link]

Графическая утилита, в основе которой лежит фрейморк GNURadio. Водопад, управление по сети, вещание в сеть, запись сигнала, запись демодулированого сигнала.
AM, SSB, FM-N и FM-W демодуляция.

Управлять программой (предварительно включив фичу):
telnet localhost 7356
  • F – set frequency
  • f – get frequency
  • l – get level (signal strength)
  • M – set mode: OFF, RAW, AM, FM, WFM, WFM_ST, LSB, USB, CW, CWL, CWU
  • m – get mode
  • c – close connection
  • AOS – Acquisition of signal, start audio recorder
  • LOS – Loss of signal, stop audio recorder
As an example consider the following session:
F 123456789
RPRT 0
f 123456789
c
Connection closed by foreign host.
Подключится к программе с помощью netcat и проигрывать аудиопоток с помощью ALSA player:
nc -l -u 7355 | aplay -r 48k -f S16_LE

* На данный момент (август 2015) GQRX работает с rtl_tcp некорректно, отображаемая картинка может не соответствовать передаваемым rtl_tcp данным.

rtl_test

Проверить приёмник

rtl_test -t

 

rtl_fm, Rtl_fm Guide

Демодулировать (-M wbfm) радио  на частоте (-f 89.1M) и воспроизвести используя утилиту play из пакета Sox:
rtl_fm -M wbfm -f 89.1M | play -r 32k -t raw -e s -b 16 -c 1 -V1 -
Сохранить результат работы rtl_fm в файл:
rtl_fm -M wbfm -f 89.1M > radio.bin
Проигрывать аудиопоток можно вышеприведённой командой aplay
cat radio.bin | aplay -r 24k -f S16_LE

 

rtl_power [man]

Использовать водопад для мониторинга не всегда удобно, т.к. он показывает небольшой фрагмент истории изменения амплитуды. Чтобы записать подобную историю (но не сам сигнал) используется rtl_power:
rtl_power -f 118M:137M:8k -g 50 -i 10 -e 1h airband.csv
-f начало:конец:шаг - частотный диапазон и разрешение;
-g - усиление;
-i - шаг(разрешение) по времени в секундах;
-e - продолжительность сбора данных.

Результатом вышеприведённой команды будет файл в формате
date, time, Hz low, Hz high, Hz step, samples, dB, dB, dB, ...


Этот файл подойдёт для автоматической обработки. Cкрипт heatmap.py конвертирует собранную информацию в водопад и сохранит в png.



Для того чтобы rtl_power обрубал края полосы частот тюнера, где качество приёма хуже чем в центре используется ключ -c n, где n=0..1 - доля обрезаемого спектра.

multimon-ng [github]

Декодирует данные, передаваемые по цифровым радио протоколам, в том числе POCSAG.

 

rtl_433 [github]

Показывает данных различных сенсоров, передаваемые (в основном) на частоте 433МГц.
Запустить rtl_433 в режиме анализатора (-a). Программа будет выводить сигнал в бинарном представлении, без интерпретации.

rtl_433 -f 43380000 -a
Вывод:
*** signal_start = 725249308, signal_end = 725358603
signal_len = 109295,  pulses = 78
Iteration 1. t: 365    min: 241 (45)    max: 490 (33)    delta 7585
Iteration 2. t: 365    min: 241 (45)    max: 490 (33)    delta 0
Pulse coding: Short pulse length 241 - Long pulse length 490
Short distance: 241, long distance: 485, packet distance: 18045
p_limit: 365
[00] {26} 3a 7c 0a 00 : 00111010 01111100 00001010 00000000
[01] {26} 3a 7c 0a 00 : 00111010 01111100 00001010 00000000
[02] {26} 3a 7c 09 00 : 00111010 01111100 00001001 00000000


dump1090 [github]

Посмотреть табличку с информацией (ADS-B протокол) о самолётах в зоне приёма тюнера:
dump1090 --interactive
По-умолчанию высота - в футах, скорость - в узлах.
Hex    Flight   Altitude  Speed   Lat       Lon       Track  Messages Seen . 
--------------------------------------------------------------------------------
Перевести единицы в метрические - --metric
В сетевом режиме (--net) на порт 30003 подаётся следующая информация:
MSG,1,,,4CB88C,,,,,,AZA621  ,,,,,,,,0,0,0,0
MSG,4,,,4CB88C,,,,,,,,434,311,,,64,,0,0,0,0
MSG,3,,,4CB88C,,,,,,,36000,,,5.06025,90.24252,,,0,0,0,0
4CB88C - ICAO address, AZA621 - номер рейса, 434 - скорость (узлы, морских миль (1.83км) в час), 311 - направление (градусы), 36000 высота (футы, 0.3048м), 5.06025,90.24252 - широта,долгота.
Ключом --net можно воспользоваться для запуска http сервера с картой и самолётами в реальном времени. Порт по-умолчанию - 8080.


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


./dump1090 --interactive --net --net-http-port 8090 --enable-agc --aggressive


Чтобы иметь возможность просмотреть историю (в интерактивно режиме показываются только "видимые" в данный момент самолёты), подключимся к порту 30003.

nc localhost 30003
В браузере откроем интерактивную карту по адресу http://localhost:8090/




Ссылки
Очень простая антенна для приёма ADS-B - http://antirez.com/news/46
Аналог - rtl_adsb. Ещё аналоги - по ссылке ниже.

DSD [github]

Digital Speech Decoder декодирует цифровое радио стандартов P25 Phase 1, D-STAR и др.
mkfifo pipe.wav
dsd -i pipe.wav -w test.wav

rtl_fm -f 421.577M -s 48k > pipe.wav

 

Алсо

Посмотреть на короткий сигнал с бинарными данными модулированый, например в OOK, можно в аудиоредакторе Audacity [ You can ring my bell! Adventures in sub-GHz RF land...].

***

  • Sample rate (частота дискретизации)
  • PPM (parts per million, миллионная доля) - в контексте SDR, величина характеризующая погрешность работы резонатора тюнера. Линеен для всей полосы частот. Выполнить коррекцию частоты приёмника можно настроившись на известную и подобрать этот параметр, чтобы компенсировать разницу между фактической частотой и той, на которую настроен приёмник. [Точная калибровка донгла RTL-SDR по GSM]
  • I/Q сигнал - сигнал представленный в виде двух независимых компонент I (синфазная) и Q (квадратурная), которые однозначно описывают частоту и амплитуду сигнала в данный момент времени. I/Q Data for Dummies
  • POCSAG - пейджинговый протокол. 
  • APRS (Automatic Packet Reporting System) - цифровая любительская радиосвязь. 
  • ADS-B (Automatic dependent surveillance-broadcast), АЗН-В (автоматическое зависимое наблюдение-вещание) - коротко: протокол, по которому самолёт может передавать информацию о себе (ICAO код, онлайн БД, ещё) и своём движении (широта, долгота, направление, скорость, высота). flightradar24 - движение самолётов он-лайн. 
  • APCO P25 
  • OOK\ASK модуляция в которой бинарные символы 1 и 0 кодируются сигналом c высокой и нулевой\низкой (соответственно OOK\ASK) амплитудой.

Ссылки

Таблица частот
Signal Identification Guide 
rtl-sdr.com

1 комментарий:

  1. .: Software Defined Radio (Sdr) >>>>> Download Now

    >>>>> Download Full

    .: Software Defined Radio (Sdr) >>>>> Download LINK

    >>>>> Download Now

    .: Software Defined Radio (Sdr) >>>>> Download Full

    >>>>> Download LINK 3L

    ОтветитьУдалить