Otevře se na nové kartě

GlobalScanRX: RTL-SDR skener, který nahrává rádiový provoz a pustí vám ho přes web

Stručně: GlobalScanRX je open source projekt, který z RTL-SDR donglů dělá automatický skener rádiového provozu. Klient u přijímačů skenuje nastavená pásma a nahrává zachycené vysílání, server nahrávky ukládá a zpřístupní přes web na počítači i v telefonu, u analogových nahrávek včetně vodopádu synchronizovaného se zvukem. Instaluje se přes Docker na Linuxu amd64 a projekt je zatím ve vývoji.

Necháte přijímač běžet přes noc a ráno si v telefonu projdete, co se na pásmu dělo. K tomu slouží GlobalScanRX, open source projekt, který z RTL-SDR donglů dělá automatický skener s webovým archivem nahrávek.

Autorem článku je Dominik Čampa (TikTok @garryfreak). Článek není placenou spoluprací, projekt autor financuje sám.

Jak to vzniklo

K rádiu jsem měl blízko od dětství. Táta mi půjčoval starou radiostanici Alinco po dědovi a poslouchali jsme na ní hasiče nebo radioamatérský převaděč OK0D na Lysé hoře. Fascinovalo mě, že slyším lidi kilometry daleko a nepotřebuji k tomu internet ani mobilní síť. Zájem o rádio mi vydržel dodnes.

Ve třinácti jsem objevil SDR a spektrum najednou viděl na monitoru. Na GlobalScanRX, respektive jeho předchůdcích, pracuji zhruba od roku 2020. Profesně dělám v IT, elektronika, rádio a programování jsou koníčky. Dřív jsem všechno psal ručně, dnes mi s vývojem pomáhá AI.

GlobalScanRX je pořád ve vývoji a testování, zatím to není hotový produkt.

Jak GlobalScanRX funguje

Projekt má dvě části. Klient běží u USB přijímačů, skenuje nastavená pásma, nahrává a výsledky posílá dál. Server provozuje webové rozhraní, uživatelské účty a nastavení a ukládá nahrávky. Obojí může běžet na jednom počítači, nebo k jednomu serveru připojíte několik vzdálených stanovišť.

Každé SDR má vlastní pásma. Grafický editor ukazuje střed i šířku pokrytí, výchozí je 2,048 MHz. Na jedno SDR jdou nejvýš čtyři pásma, doporučuji ale tři.

Během nahrávání se další skenování na daném SDR zastaví, takže krátké vysílání na jiném pásmu se nezachytí. S každým dalším pásmem navíc přijímač stráví na jednotlivých kmitočtech méně času. Pro důležité pásmo proto použijte samostatný dongle.

Sám zkouším okolí 145, 172, 442 a 448 MHz a láká mě i letecké pásmo. To jsou moje nastavení, program žádné pevné frekvence nemá.

Při výpadku spojení se serverem klient dál skenuje podle uložené konfigurace a nahrávky odešle po obnovení spojení. Výchozí fronta má limit 512 MB a nahrávky v ní vydrží 15 minut. Pro delší výpadky je potřeba limity zvýšit, jinak se starší soubory smažou.

Ráno vyberete den a posloucháte

Na dashboardu vyberete včerejšek a v hodinovém grafu uvidíte, kdy vznikaly nahrávky. Klepnutím na sloupec vyberete hodinu, hledání zúžíte podle přijímače, názvu kanálu nebo kmitočtu. Karta nahrávky má pohromadě čas, přijímač, kmitočet, název kanálu a přehrávač. Zvuk jde stáhnout jako MP3.

Kanály si pojmenujete podle toho, co váš přijímač opravdu slyší, třeba OM0OVU Krížava. Název patří k vašemu přijímači, stejný kmitočet totiž na druhém konci republiky může znamenat něco úplně jiného.

Kmitočet, který nahrávat nechcete, může vlastník nebo administrátor zablokovat. Klient pak ignoruje detekce v okolí ±5 kHz. POZOR! Blokování zároveň smaže všechny odpovídající nahrávky na serveru, včetně zvuku a obrázků.

Přehrávač s vodopádem

Obyčejný posuvník mi nestačil. Přehrávač ukazuje skutečnou zvukovou vlnu, do které klepnete nebo po ní táhnete, myší i prstem.

Zajímalo mě ale i to, jak signál vypadal. Se zapnutým ukládáním vodopádů klient přiloží k analogové nahrávce úzký výřez spektra kolem jejího kmitočtu. Před přehráním vidíte celý výřez, během poslechu se vodopád posouvá spolu se zvukem a zobrazuje posledních deset sekund. Pauza zastaví i obraz, posun ve zvuku posune i vodopád.

U nahrávek pro externí digitální dekodér výřez zatím chybí.

Live play

Po zapnutí Live play se každá nová dokončená nahrávka zařadí do fronty a přehraje. Nahrávky z více přijímačů se přehrávají jedna po druhé. Před každou si můžete nechat přečíst název přijímače a kanálu hlasem prohlížeče.

Nahrávka musí nejdřív skončit a dorazit na server, dashboard kontroluje novinky každých pět sekund, takže jde o přehrávání se zpožděním. Na telefonu může přehrávání na pozadí omezit prohlížeč.

Co nahrávat a co raději ne

GlobalScanRX nahrávky ukládá, nabízí ke stažení a umí je zpřístupnit dalším bastlířům na serveru. Pásma si proto vybírejte s rozmyslem a kmitočty, které nahrávat nechcete, rovnou zablokujte.

Na čem to běží

Provozuji to na starším počítači s Intel Core i3 (tuším třetí generace), na kterém běží Proxmox a v něm virtuální Linux, do kterého předávám USB přijímače. Příkon, vytížení ani denní objem nahrávek jsem zatím neměřil, výkonový strop tedy neznám.

Používám RTL-SDR Blog V3 a VHF/UHF anténu, takovou tu „bílou hůl“. Tři dongly mám na jedné anténě přes čínskou redukci ze tří SMA na jeden. Její RF parametry nemám změřené, jako vzor pro anténní rozvod ji tedy neberte.

Co budete potřebovat:

  • linuxový počítač amd64 (Raspberry Pi a ARM zatím ověřené nemám)
  • RTL-SDR dongle, pro začátek stačí jeden, třeba RTL-SDR Blog V3 s anténami
  • anténu pro pásmo, které chcete poslouchat
  • volné USB a místo na disku
  • Docker Engine a Compose

Pokud s RTL-SDR začínáte, projděte si nejdřív návod RTL-SDR pro začátečníky, kde je i výběr donglu a antény.

Instalace

Obě části se instalují přes Docker, podrobný postup je v README serveru a klienta. Návody odkazují na poslední vydané balíčky, číslo verze tedy hádat nemusíte. Pokud vám server už někdo provozuje, začnete rovnou klientem.

Ve zkratce: na serveru nastavíte v .env adresu APP_URL, spustíte Docker Compose a v prvním formuláři vytvoříte administrátora. Tento krok dokončete dřív, než server pustíte do internetu.

Na počítači s dongly nastavíte SERVER_URL, skriptem prepare-usb.sh odstavíte DVB-T ovladač, který by si dongly jinak zabral, a klienta sestavíte. První build trvá i několik minut.

Po instalaci je potřeba přijímač přiřadit k účtu:

  1. V logu klienta najděte RECEIVER CLAIM PIN. Log vypíšete ve složce klienta příkazem docker compose logs -f --tail 100 receiver.
  2. Na webu otevřete My Receivers → Claim, zadejte PIN, jméno a polohu přijímače.
  3. Administrátor přijímač aktivuje a vy nastavíte pásma jednotlivých SDR.
  4. Přijímač si přidejte na dashboard v Settings → Dashboard Settings. Platí to i pro administrátora, aktivace sama dashboard nenaplní (a pak koukáte do prázdné stránky).

Přepnutím na Public přijímač nabídnete ostatním bastlířům na serveru. Kdo chce jen poslouchat, vlastní SDR nepotřebuje.

Server aktualizujete skriptem scripts/update.sh, který před změnou udělá zálohu. Klient se sestavuje znovu ze zdrojového balíčku podle návodu na aktualizace. Obě části mají i volitelné automatické aktualizace, ve výchozím stavu vypnuté.

POZOR! Nepoužívejte docker compose down -v, pokud chcete zachovat data. U klienta byste přišli i o identitu přijímače a čekající nahrávky. Na zastavení stačí docker compose stop.

Co zatím zlobí

Nejvíc problémů dělá USB. Na jeden řadič doporučuji nejvýš tři aktivní SDR, při větším počtu mi řadič zamrzal. Různé zásuvky přitom často vedou do stejného řadiče. Někdy pomůže až dongle fyzicky odpojit a znovu připojit.

V Proxmoxu se mi občas ztratila celá trojice přijímačů. Podezírám větší datový tok, potvrzené to nemám. Bez virtualizace by to možná bylo lepší, srovnání ale zatím nemám. Když SDR nevidí ani lsusb v systému klienta, je chyba v USB nebo v systému a web s tím nesouvisí.

Digitál ještě ladím. Pro digitální hlas používám externí dekodér DSD a mám vyzkoušené DMR. Klient ale občas digitální vysílání zamění za analogové a uloží ho jako obyčejný zvuk místo předání dekodéru. Šifrovaný provoz samozřejmě nezpřístupní.

Vlastní demodulátor

Z vlastního demodulátoru mám největší radost. Nechtěl jsem, aby klient jen spouštěl rtl_fm a přebíral jeho výstup. Celé zpracování od I/Q vzorků po hotovou nahrávku jsem napsal v C++17, najdete ho v src/demodulator.cpp.

Klient nejdřív digitálně posune vybraný kanál do základního pásma a ořízne ho filtrem. Následuje demodulace AM nebo FM (NFM i WFM), decimace a převzorkování zvuku na 48 kHz. FM demodulátor počítá fázový rozdíl mezi po sobě jdoucími komplexními vzorky. V analogové větvi je dál DC block, volitelně AGC a ošetření návaznosti bloků dat, aby se na jejich hranicích nerozbíjela fáze ani časování.

Všechno od nuly samozřejmě nepíšu. S donglem komunikuji přes librtlsdr, FFT počítá FFTW. Vodopád vzniká z FFT, kterou scanner stejně počítá, zvukovou vlnu pro přehrávač připraví server přes FFmpeg. Server je napsaný v Laravelu a ve výchozím nastavení používá SQLite.

Kam dál

Nejdřív chci, aby skenování pokračovalo uvnitř přijímaného pásma i během nahrávání. Potom bych rád napsal vlastní DMR demodulátor a dekodéry CTCSS (podtóny pro ovládání squelche) a DTMF (tónová volba).

Dlouhodobě mě láká TDOA, tedy určení polohy vysílače z rozdílů času příchodu signálu na několik stanovišť. Z časových rozdílů vznikají hyperboly a z jejich průsečíku se dá určit, odkud signál přišel. Rád bych to jednou viděl přímo na mapě ve webu.

Časování chci srovnat přes společný referenční signál DAB. Klienti by střídali referenční a sledovaný kmitočet pomocí librtlsdr-2freq a posílali I/Q vzorky serveru ke korelaci. Stejnou metodu s RTL-SDR vyzkoušel DC9ST v projektu tdoa-evaluation-rtlsdr, první pokusy proto počítám taky v MATLABu. Kalibraci kmitočtu ověřím přes GSM BTS, polohu stanovišť určí USB GPS.

Jestli bude společná reference použitelná a co s časováním udělá přepínání tuneru, musím teprve ověřit. Přesnost 100 až 500 metrů je zatím jen můj cíl, naměřené výsledky nemám.

Radioamatérskou licenci zatím nemám, jednou bych si ji rád udělal. Do té doby poslouchám a zkouším, co se kolem rádia dá postavit.

Server je pod licencí GPLv3.

Repozitář serveru
Repozitář klienta
TikTok @garryfreak

Ptáte se

Musím mít vlastní server?

Potřebujete dostupný GlobalScanRX server. Můžete si ho provozovat sami, klidně na stejném počítači jako klienta, nebo se připojit k serveru někoho jiného. Kdo chce jen poslouchat veřejné přijímače, vlastní SDR nepotřebuje.

Musím umět programovat?

Pro instalaci přes Docker ne. Stačí základní práce v terminálu: nastavit adresu serveru, spustit Docker Compose a na počítači s dongly pustit připravený skript, který odstaví DVB-T ovladač.

Poběží to na Raspberry Pi?

Zatím to není ověřené. Instalace přes Docker cílí na Linux amd64, Raspberry Pi a další ARM počítače autor zatím nezkoušel.

Kolik SDR a pásem můžu použít?

Na jedno SDR jdou nejvýš čtyři pásma, autor doporučuje tři. Na jeden USB řadič doporučuje nejvýš tři aktivní SDR, při větším počtu mu řadič zamrzal. Pro důležité pásmo je lepší samostatný dongle.

Umí GlobalScanRX digitální vysílání?

Částečně. Digitální hlas předává externímu dekodéru DSD, vyzkoušené je DMR. Klient ale občas digitální vysílání zamění za analogové a šifrovaný provoz samozřejmě nezpřístupní.

Je Live play živé rádio?

Ne. Live play přehrává nové nahrávky postupně poté, co skončí a dorazí na server. Dashboard kontroluje novinky každých pět sekund, nepřetržitý stream to není.

Co když vypadne síť?

Klient pokračuje s uloženou konfigurací a nahrávky odešle, až se server vrátí. Výchozí fronta má limit 512 MB a 15 minut, pro delší výpadky je potřeba limity zvýšit, jinak se starší nahrávky smažou.

Umí GlobalScanRX určit polohu vysílače?

Zatím ne. Lokalizace metodou TDOA s časovým zarovnáním přes signál DAB je v plánu jako experiment, cílová přesnost 100 až 500 metrů zatím není ověřená.
Sdílejte článek:
Tričko Chiptron s potiskem Trust me, I'm a maker
Ukaž světu,
že jsi Maker!
Koupit tričko
Kafe pro Chiptrona
Dodej energii dalšímu článku
Buy Me a Coffee

Související články

Vlastní firmware pro AVerMedia Game Capture HD II

Stará krabička AVerMedia Game Capture HD II odmítala jediné, co jsem po ní chtěl – nahrát 640×480 z herního enginu picogame. Uvnitř je přitom malý Linux a to omezení je jen softwarový whitelist. Od sériové konzole a rozšifrovaného firmwaru až…

Program Gqrx zobrazuje spektrum a vodopád FM pásma kolem 91 MHz

Letadla, rádio, vysílačky nebo třeba satelity – to vše zachytíte pomocí levného RTL-SDR dongle za pár stovek korun. V tomto praktickém tutoriálu ukážu, jak jej rozjedete na Ubuntu/Debian Linuxu krok za krokem. Žádné složité závislosti, jen terminál a pár příkazů.​ Přidám i návod na…

Terminál Linuxu zobrazený na e-paperovém displeji připojeném k desce ESP32-S3

Linux 6.11 běží přímo na Xtensa jádru ESP32-S3, bez emulace. A shell se po přihlášení zrcadlí na 9,7″ e-paperový displej ED097TC2.

Čtyři barevné robotické kachny Microduck stojí vedle sebe

Pollen Robotics představil Microducka, 25centimetrového dvounohého robota s Rockchipem RK3566, patnácti servy a natrénovanými pohyby ze simulace. Co v něm je, co umí a proč se na něj čeká 4 až 6 měsíců.

Prý Starlink ukončil éru stealth letounů. Vysvětluji, jak funguje pasivní radar, proč na něj stealth nestačí a proč to přesto není konec neviditelných stíhaček. S interaktivním simulátorem.

CH32V003 návod

Mikrokontroléry CH32V – určitě jste už o nich slyšeli. Prodávají se za naprosto směšnou cenu, ale mají velmi slušnou výbavu a navíc se prodavají v dobře pájitelném pouzdře. Mezi periferiemi najdete mimo klasických GPIO i SPI, ADC, UART, I2C, časovače…

Trendy