RTL-SDR dongel · üks antenn aknal · kõik, mis eetris liigub

2026-09-18 FM 88–108

Silmad ja kõrvad: kuidas skript raadiot kuulab

#rtl-sdr #sdrpp #rigctl #powershell #python #tooriistad

Käsitsi klõpsamine on tore esimesed kümme minutit. Siis tahad, et arvuti teeks ise: käiks ala läbi, ütleks, kus on jaamad, kui tugevad, ja kas seal on muusika või jutt. Selleks pidi arvuti saama kolm asja: käed (tuunida), silmad (spektrit näha) ja kõrvad (heli hinnata).

Kõik skriptid on Tarkvara lehel. Windows + PowerShell 5.1 + Python 3.12, sest see oli see, mis käepärast oli.

Käed: rigctl

SDR++-il on kaasas Rigctl Server moodul. See avab TCP-pordi 4532 ja räägib Hamlibi rigctl-protokolli – sama, millega juhitakse päris transiivereid. Käsud on üherealised:

F 101600000    sea sagedus (Hz)
f              loe sagedus
M WFM 0        režiim
AOS / LOS      salvestus algab / lõpeb

Konfis (rigctl_server_config.json) panin autoStart: true ja sidusin salvestaja külge (recorder: "Recorder", recording: true). Siis piisab PowerShellist:

.\rig.ps1 "F 97800000" "f"
# F 97800000 -> RPRT 0
# f -> 97800000

Üks üllatus: m (loe režiim) vastab kahe reaga – režiim ja ribalaius. Kui loed ainult ühe rea, nihkuvad kõik järgmised vastused paigast. Skript loeb nüüd kõik saadaolevad read.

Silmad: ekraanipilt

Kõige lihtsam viis "näha" on teha SDR++ aknast pilt. shot.ps1 leiab akna (user32.dllGetWindowRect), kopeerib ekraanilt (Graphics.CopyFromScreen) ja lõikab välja spektri + vesijoa. Sealt loeb tipu kõrguse dB-des maha nagu inimene.

Sama user32 kaudu saab ka klõpsata – click.ps1 84 58 vajutab Play-nuppu. See on ainus koht, kus ma UI-d "käsitsi" puudutan; kõik muu käib rigctl ja konfifailide kaudu.

sweep.ps1 seob need kokku: tuunib 2,2 MHz sammuga, ootab 4 s, et vesijugu täituks, pildistab. 88–108 MHz = 9 pilti, minut aega.

Spekter 88–90 MHz: neli jaama, nõrgim 89.6

Kõrvad: numpy

Pildilt näeb, et midagi on. Kuulda, mis seal on, on teine asi. Esimene versioon oli lihtne: SDR++ salvestab 4 s heli WAV-i, listen.py arvutab:

  • RMS ja dünaamika (95. ja 10. protsentiili vahe 50 ms kaadrites) – kahin on ühtlane, kõne hüppab
  • spektraalne lamedus 300–8000 Hz – valge müra ≈ 1, muusika ≈ 0,1–0,2
  • bassi osakaal alla 300 Hz – popmuusika on bassirikas

Kalibreering kolme salvestisega:

99.5 MHz (tühi)     flatness 0.446  dynamics 0.7 dB   -> KAHIN
97.8 MHz            flatness 0.147  bass 0.68         -> MUUSIKA
101.6 MHz           flatness 0.291  bass 0.53         -> MUUSIKA

Kõne tuvastamine vajab veel tööd – uudised tulid "ebaselgena" välja, sest uudistelugeja räägib ilma pausideta ja kompressor teeb dünaamika lamedaks.

Mida läbikäik andis

24 küüru. Tugevaimad 101.6, 97.8, 91.5, 102.1, 103.1. Ja siis kaks kohta, kus ma eksisin: 104.1 ja 106.6 peal olid kitsad teravad piigid, mitte laiad küürud. Ma märkisin need "dongli enda spuurideks". Valesti – aga sellest järgmises loos, sest selle selgitas välja RDS.

Õppetunnid

  • Center tuning peab olema sees, muidu rigctl liigutab ainult VFO-d ja pilt jääb samaks.
  • PowerShell 5.1 loeb .ps1 faile ANSI-na. Täpitähed kommentaarides = parseri viga. Salvesta UTF-8 BOM-iga.
  • SDR++ kirjutab moodulite konfi ainult siis, kui UI-s midagi muudetakse. Kui käsitsi kirjutad, on võtmenimed tõsised: "sampleType": "int16" kukutab programmi käivitusel, "Int16" töötab.

73, Tõnu

Kommentaarid

Laen…