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):
--echo— loop 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-live— live 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]
| Flag | Default | Meaning |
|---|---|---|
--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:EE | MAC address reported in discovery. Give each emulator its own if you run several. |
--noise <f> | 1.26e-5 | Noise-floor level as a fraction of full scale. |
--echo | off | Loop-back echo mode (see above). |
--echo-live | off | Live echo mode (see above). |
--bind <ip> | 0.0.0.0 | Bind a specific interface. Use when a client discovers the emulator via the wrong interface (e.g. a VPN). |
--max-clients <n> | 32 | Maximum concurrent client sessions. Raise for hosted multi-user deployments. |
-v, --verbose | off | Debug 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.