Radio SDR (software defined radio, czyli radio programowalne) to urządzenie radiowe, w którym większość pracy wykonuje oprogramowanie. Zwykle obsługuje się je programami z oknami i myszką. Program sdrtop działa inaczej: w terminalu. Można go więc uruchomić w panelu tmux, przez SSH albo na maleńkim ekranie cyberdecka, czyli przenośnego komputera zbudowanego samodzielnie.
To projekt hobbystyczny, rozwijany po godzinach. Jego twórca chciał wyciągnąć z radia możliwie każdą informację diagnostyczną i pokazywać ją na żywo. Miało być kilka liczb na ekranie, a powstał cały zestaw przyrządów, z modelem współczynnika szumów włącznie.
Co pokazuje na ekranie
Domyślny widok to tzw. Command Rail: duży wskaźnik częstotliwości, analogowy S-metr (miernik siły sygnału) i kilka wskaźników z własnymi wykresami na żywo. Obok jest to, czego można oczekiwać od programu SDR:
- widmo z zatrzymywaniem szczytów, śledzeniem poziomu szumu, powiększaniem i znacznikami,
- wodospad, czyli przesuwający się spektrogram, z przewijaniem historii i uśrednianiem klatek,
- przemiatanie pasma szerszego niż jedno okno, z przejściem na wybrany szczyt klawiszem Enter,
- sześć motywów kolorystycznych i gotowe układy ekranu, a także możliwość tworzenia własnych.
Programem steruje się wyłącznie z klawiatury; myszy nie używa wcale.
Cztery stanowiska pomiarowe
Osobna część programu to cztery stanowiska pomiarowe (IQ, RF, Timing i Signal), które odpowiadają na pytania, na jakie sam wykres nie odpowie: czy sygnał IQ (dwie składowe próbek, z których program liczy widmo) jest czysty, czy tor wejściowy ma dobrze ustawione wzmocnienie, czy komputer nadąża za strumieniem próbek i czym właściwie jest ten sygnał. Wśród pomiarów są współczynnik szumów, minimalny wykrywalny sygnał (MDS), tłumienie częstotliwości lustrzanej, zajęte pasmo, ACPR (moc w kanałach sąsiednich), wysterowanie przetwornika analogowo-cyfrowego i jitter (wahania odstępów, w jakich docierają kolejne porcje próbek).
Demodulator celowo nie odtwarza dźwięku. Pokazuje za to to, czego nie widać na wykresie widma: dewiację FM, sygnał pilota 19 kHz, poziom sygnału stereo, podton CTCSS (używany np. do otwierania przemienników), głębokość modulacji AM oraz dane RDS: nazwę stacji, typ programu i RadioText. Jeden klawisz odejmuje od sygnału IQ składową stałą, drugi wyznacza i nakłada korekcję kwadratury. Widać wtedy, jak znikają szpilka na środku widma i obrazy lustrzane.
Jest też tryb obserwatora: gdy radio zajmuje inny program, sdrtop pokazuje który i czeka, aż urządzenie się zwolni. Skrót Ctrl+R włącza zapis surowego strumienia IQ w otwartym formacie SigMF, stosowanym do zapisu nagrań z radia SDR, z oznaczonymi miejscami, gdzie zgubiły się próbki. Przy radiach, które sięgają pasma 2,4 GHz, dostępna jest też sekcja NET: dekoduje i mierzy transmisje Bluetooth Low Energy (BLE, także w trybie dalekiego zasięgu LE Coded) i klasycznego Bluetooth. Niczego przy tym nie nadaje i z niczym się nie łączy. Ta część jest jeszcze w budowie.
Jakie radia obsługuje
Sprawdzone na prawdziwym sprzęcie są trzy urządzenia: HackRF One, RTL-SDR (układy R820T, R828D i E4000) oraz analizator widma tinySA Ultra ZS405 (w jego przypadku program pokazuje widmo i wodospad). PortaPack H4M pracuje w trybie HackRF. Przy RTL-SDR część pomiarów jest niedostępna, bo to radio ma tylko jeden regulator wzmocnienia, więc program nie liczy dla niego współczynnika szumów całego toru.
Inne radia, np. Airspy, SDRplay, PlutoSDR, LimeSDR, bladeRF czy USRP, mają działać przez bibliotekę SoapySDR. Ten tryb ma status beta. Autor napisał tę część na podstawie dokumentacji, bez dostępu do tych urządzeń, i potwierdził jej działanie tylko z HackRF. Kto ma inne radio, może je sprawdzić; autor prosi o zgłoszenie wyniku na GitHubie.
Instalacja
Program działa na Linuksie. Najprostsza droga to skrypt instalacyjny, który próbuje użyć gotowego pliku binarnego, a w razie potrzeby kompiluje program ze źródeł:
curl -fsSL https://raw.githubusercontent.com/musithang/sdrtop/main/packaging/install.sh | sh
Uruchamianie skryptu prosto z sieci to wykonywanie cudzego kodu, więc najpierw warto go przeczytać. Żeby od razu doinstalować biblioteki dla swojego radia, zamień końcowe sh na sh -s -- i dopisz parametr --hackrf albo --rtlsdr (dla SoapySDR: --soapy):
curl -fsSL https://raw.githubusercontent.com/musithang/sdrtop/main/packaging/install.sh | sh -s -- --hackrf
Bez tych parametrów skrypt nie instaluje żadnej z bibliotek.
Druga droga to Cargo, menedżer pakietów Rusta:
cargo install sdrtop --locked
Potrzebne są Rust w wersji 1.88 lub nowszej i kompilator C z linkerem. Biblioteki radia są ładowane dopiero w czasie działania: HackRF wymaga libhackrf w wersji 2023.01.1 lub nowszej, a RTL-SDR biblioteki librtlsdr. Gdy brakuje biblioteki, nie działa tylko obsługa danego radia. Na laptopie kompilacja trwa kilka minut, na Raspberry Pi znacznie dłużej.
Pierwsze uruchomienie
Po starcie sdrtop pokazuje menu. Enter wybiera układ ekranu, spacja uruchamia i zatrzymuje odbiór, Esc wraca do menu, a q kończy program i zapisuje ustawienia. Do pracy wystarczy kilka klawiszy:
fispozwalają wpisać częstotliwość i szybkość próbkowania,- strzałki w górę i w dół zmieniają wzmocnienie,
c,eilprzełączają na pełny widok panelu Command Rail, widma albo wodospadu,- pełną listę skrótów pokazuje zakładka Keys w menu.
Ustawienia trafiają do pliku ~/.config/sdrtop/config.toml. Można go edytować ręcznie, a gdy plik jest uszkodzony, program wraca do ustawień domyślnych.
Na co zwrócić uwagę
Projekt jest w fazie wczesnego rozwoju, a znanych błędów jest sporo. Funkcje NET na słabszych komputerach potrafią przekraczać możliwości procesora przy dużych szybkościach próbkowania. W planach są kolejne cyfrowe demodulatory, m.in. Wi-Fi, ADS-B (sygnały z samolotów), AIS (sygnały ze statków), LoRa i DMR (cyfrowa łączność głosowa), wciąż bez dźwięku, tylko z danymi.
Artykuł powstał na podstawie repozytorium projektu sdrtop i jego dziennika zmian.
