Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Using the emulator (podsdr-emu)

podsdr-emu emulates an OpenHPSDR Protocol 1 radio on your LAN. Any PodSDR client (and other HPSDR software) discovers and connects to it exactly as it would to real hardware. It ships inside every server bundle next to podsdr-proxy.

Typical uses:

  • Try the PodSDR clients before you own a radio.
  • Test a proxy/web/cloud deployment end-to-end without keying real RF.
  • Host a shared virtual band where several operators hear each other (--echo-live).

Starting it

./podsdr-emu --radio hermeslite

The emulator binds UDP port 1024 on all interfaces and answers discovery broadcasts. Clients on the same LAN (or the same machine) will list it like a real radio.

Linux note: port 1024 is the last privileged port, so on some Linux systems the emulator needs either root or the bind capability: sudo setcap 'cap_net_bind_service=+ep' ./podsdr-emu

What you will see and hear

Out of the box the emulator produces a flat noise floor — no test tones or recorded signals. RX meters read the noise floor; when you transmit, the emulator synthesizes plausible power / SWR / supply-voltage meter readings (no actual RF anywhere).

To hear something, use an echo mode: the emulator records your own TX IQ and plays it back on RX, shifted to whatever frequency your receiver is tuned to (attenuated 30 dB, so it sounds like a signal, not a blast):

  • --echoloop mode. Records while PTT is down, then loops the recording forever (leading/trailing silence trimmed, a half-second gap between repeats). Successive PTT cycles within 30 seconds append to the same recording, so slow CW sent letter-by-letter accumulates into one message. Great for testing your own TX audio or CW by yourself.
  • --echo-livelive mode. Your TX appears on RX in near real-time (~21 ms delay) and plays once. Multiple simultaneous transmitters on the same frequency are mixed together like real co-channel traffic — this is the mode for hosted multi-operator “virtual band” servers.

Echo recordings are capped at 10 seconds. In loop mode, only one operator per frequency is mixed correctly; use --echo-live for concurrent operators.

Command-line reference

podsdr-emu --radio <RADIO> [options]
FlagDefaultMeaning
--radio <name>(required)Hardware to emulate: atlas, hermes, hermesii, angelia, orion, orionmkii, hermeslite, saturn, saturnmkii. (hermeslite presents as a Hermes Lite.)
--mac <hex>02:AA:BB:CC:DD:EEMAC address reported in discovery. Give each emulator its own if you run several.
--noise <f>1.26e-5Noise-floor level as a fraction of full scale.
--echooffLoop-back echo mode (see above).
--echo-liveoffLive echo mode (see above).
--bind <ip>0.0.0.0Bind a specific interface. Use when a client discovers the emulator via the wrong interface (e.g. a VPN).
--max-clients <n>32Maximum concurrent client sessions. Raise for hosted multi-user deployments.
-v, --verboseoffDebug logging.

There is no port option — the Protocol-1 port is fixed at UDP 1024, so you can run at most one emulator per IP address. To run two on one machine, bind them to different addresses with --bind.

Recipes

Emulator + desktop GUI on one machine — start the emulator, then the GUI; it appears in the radio picker:

./podsdr-emu --radio hermeslite

Emulator + proxy + web client (the emulator and proxy can share a host):

./podsdr-emu --radio hermeslite --echo-live &
./run.sh          # proxy; open https://<host>:8080, the emulator is in the device list

Shared virtual band on a public server — run podsdr-emu --echo-live and podsdr-proxy (with a cloud uplink if you like) on one server; every connected operator hears everyone transmitting on the same frequency.

Limitations

  • Protocol 1 only — no Protocol 2 emulation.
  • Everything is synthetic: no propagation, fading, AGC-capture or band effects, and TX power/SWR readings are cosmetic.
  • Sample rate follows the client (48/96/192/384 kHz; starts at 48 kHz).
  • One session per client address; additional connect attempts from the same address are ignored while a session is active.