Skip to content

N8SDR1/Lyra-SDR

Repository files navigation

Lyra — Qt6 SDR Transceiver for Hermes Lite 2 / 2+

Current version: 0.1.0-pre2 — "RX2 Dual Receiver"

Modern PySide6 desktop SDR for Steve Haynal's Hermes Lite 2 and HL2+. Native Python HPSDR Protocol 1, TCI v1.9 server, glassy UI with lit-arc and LED-bar meters, a band-plan overlay with landmark click-to-tune, GPU-accelerated panadapter + waterfall, dual-receive (RX2) with focused-VFO operator model and SUB stereo split, a CW-focused audio toolkit (APF audio peaking filter + BIN binaural pseudo-stereo), and a deep WDSP-cffi noise toolkit drawing on Warren Pratt's WDSP — EMNR mode 1-4 noise reduction, adaptive line enhancer (ANF), all-mode squelch. Built-in weather alerts watch the operator's local conditions across multiple data sources (Blitzortung, NWS, Ambient, Ecowitt) and raise toolbar + toast notifications for lightning and high-wind events.

Lyra

Status

Pre-alpha — RX is functional; TX is in progress. Developed and tested against a Hermes Lite 2+ board.

The version string above is the single source of truth maintained in lyra/__init__.py and surfaces in:

  • The window title bar
  • The Help → About Lyra dialog
  • A permanent label on the right side of the status bar
  • The User Guide's About section (rendered live from package metadata)

Bumping the version is a one-line edit in lyra/__init__.py; every display surface follows automatically.

Latest release — see CHANGELOG.md

The current release is 0.1.0-pre2 — "RX2 Dual Receiver" (2026-05-12). Pre-release for tester bench-flight with Brent (N9BC), Timmy (KC8TYK), and N8SDR. The headline change is full RX2 dual receive on the HL2 — two independent receivers running side-by-side under a focused-VFO operator model.

  • RX2 dual receiver — second receiver on DDC1 with its own VFO, mode, filter, AGC, and NR state. Both receivers run continuously whenever RX2 is enabled — no muting tricks or quick-toggles.
  • Focused VFO model — exactly one VFO is "focused" at any time; panadapter, tuning knob, mode picker, band buttons, and GEN/TIME/ Mem recalls all act on the focused VFO. Green border on the focused VFO's frequency display marks where input goes. Swap focus by clicking the other VFO's LED, Ctrl+1 / Ctrl+2, or middle-click anywhere on the panadapter.
  • SUB stereo split — single-button toggle on the TUNING panel. SUB off = mono on focused VFO. SUB on = RX1-left / RX2-right stereo split. Vol-A / Vol-B / Mute-A / Mute-B sliders are always visible (Phase 3.E.1 hotfix — predictable layout beats conditional widgets). Balance + AF Gain remain single shared controls.
  • VFO B always-visible — the second frequency display (previously hidden) now sits permanently below VFO A. Click to give it focus; double-click to type a frequency.
  • Persistence across sessionsrx2_enabled, focused_rx, per-RX vol / mute, and per-RX mode all round-trip through the Lyra session file. Open Lyra exactly how you left it.
  • Audio-path latency reduction (post-pre2 polish, §15.7) — rmatch ring 400 → 150 ms, HL2 TX-latency register 40 → 15 ms. ~275 ms shaved off the RX path vs pre-§15.7. See the User Guide Troubleshooting topic for the tester-diagnostic env vars (LYRA_RMATCH_RING_MS, LYRA_HL2_TXLATENCY_MS, LYRA_TIMING_DEBUG).

For the previous v0.0.9.3 release ("WDSP AGC" — Warren Pratt wcpAGC engine, APF moved post-AGC, sounddevice device-info diagnostic), v0.0.9.2 (host → radio EP2 cadence rewrite, band-change fixes, 48 k IQ rate retirement), and the v0.0.9 / v0.0.9.1 batch (Memory & Stations, TIME button, EiBi overlay, etc.):

  • TIME button (HF time-station cycle). Press TIME on the BANDS panel to jump to WWV / WWVH / CHU. Press again to step through 9 time-signal frequencies (2.5, 3.330, 5, 7.850, 10, 14.670, 15, 20, 25 MHz) in country-aware order — closest stations to your callsign first. Mode + filter set automatically.
  • GEN1 / GEN2 / GEN3 customization. Right-click a GEN slot to save your current frequency / mode / filter. Confirm dialog prevents accidental overwrites. Defaults are sensible (40m / 20m SSTV / 10m), but every slot is yours to remap.
  • Memory bank — 20 named presets. New Mem button next to GEN3 opens a dropdown of named operator memories (e.g. "OMISS Net 7.185", "30m beacon"). Add from the dropdown, manage from Settings → Bands → Memory: rename, reorder, delete, CSV import / export.
  • Shortwave broadcaster overlay (EiBi). Lyra now paints station IDs on the panadapter — name + language + target region — for the broadcaster currently on-air at any visible frequency inside the SW broadcast bands (49m through 11m). Auto-suppressed inside your region's amateur allocations so it doesn't clutter ham bands. Pulled from the EiBi seasonal CSV with a one-click background updater (auto-update + manual install paths both supported). Multi-row label stacking when bands get crowded.

Plus: tooltip font bumped to 13 pt for readability, Settings dialog gained a Bands tab containing all of the above.

For the full version history (0.0.3 → 0.0.9), see CHANGELOG.md.

See docs/help/getting-started.md for the full guided tour or press F1 inside the app for the in-app User Guide.

Features so far

RX signal chain

  • Native HPSDR P1 discovery + streaming (UDP, port 1024)
  • Dual-receive (RX2) on DDC1 — independent VFO / mode / filter / AGC / NR per RX
  • Spectrum-correct panadapter (HL2 baseband mirror correction applied)
  • AGC with Fast / Medium / Slow / Long / Auto / Custom profiles (WDSP wcpAGC engine via cffi)
  • Auto LNA back-off + opt-in pull-up (overload protection, range -12 to +48 dB)
  • Manual notch filters — multi-notch, per-notch Q, live cut-depth visualization on the spectrum
  • WDSP EMNR noise reduction (Mode 1-4 picker, AEPF post-filter, NPE noise estimator)
  • Captured noise-profile library (snapshot the band's noise, recall later)
  • Noise-floor reference line with auto-threshold feeding AGC
  • Passband overlay with draggable edges for live RX BW tweaks
  • Peak markers (Line / Dots / Triangles, in-passband only)

Bands and modes

  • IARU regional band plans (US / R1 / R3 / NONE)
  • Colored sub-band segments + FT8 / FT4 / WSPR / PSK landmark triangles — click a triangle to tune and switch modes
  • SSB (USB/LSB), CW, AM, FM, DIGU / DIGL

UI

  • Docked-panel workspace (drag to float / tab / reset layout)
  • Lit-Arc S-meter with LED-bar alternative (click the chip-row in the Meters panel header to switch styles)
  • Focused-VFO indicator (green border) + middle-click-to-swap on the panadapter
  • Waterfall with eight palettes (Classic / Inferno / Viridis / Plasma / Rainbow / Ocean / Night / Grayscale)
  • Click-label color picker in Settings → Visuals (text of each field painted in that field's current color + bolded for at-a-glance configuration view)
  • Optional OpenGL rasterization backend so resize/fullscreen doesn't pause audio
  • Y-axis drag-to-rescale on the spectrum's right edge
  • Two-way sync between front-panel View sliders and Settings

Integration

  • TCI v1.9 server — drives SDRLogger+, DX clusters, CAT clients
  • DX spot rendering with age fade and multi-row collision packing
  • Per-session notch bank, per-band frequency memory

Audio out

  • HL2 audio jack (EP2 → AK4951 onboard codec, default for HL2 hardware) or PC Soundcard (WASAPI via PortAudio with adaptive rmatch resampler)
  • Automatic fallback when the IQ stream rate exceeds AK4951's 48 kHz
  • Per-RX Vol-A / Vol-B / Mute-A / Mute-B sliders always visible (SUB-aware)

Stack

  • UI: PySide6 (Qt6)
  • Protocol: Native Python HPSDR Protocol 1 (UDP, port 1024)
  • DSP: WDSP via cffi (bundled GPL DLLs in lyra/dsp/_native/)
    • NumPy / SciPy glue for non-DSP signal handling
  • Control: TCI v1.9 server
  • Audio: HL2 audio jack (EP2 codec) by default; sounddevice / PortAudio (WASAPI) for the PC Soundcard output path
  • Target OS: Windows-first

Running from source

Requires Python 3.11+ on Windows.

Quickstart:

pip install -r requirements.txt
python -m lyra.ui.app

Or double-click LYRA.bat.

Step-by-step install for non-developer testers: see INSTALL.md — covers Python installation, Git setup, dependency install, common gotchas, and feedback channels. A printable Word version is also at docs/Lyra-SDR-Install-Guide.docx.

On first launch, Lyra tries to discover an HL2 on the local network. If the board is reachable it'll show up in the connection panel; if not, check firewall, cabling, and that the HL2 has power. Full troubleshooting guide in the in-app User Guide (press F1).

Hardware references

Relationship to Thetis / WDSP / openHPSDR

Lyra v0.0.5 and earlier (under MIT) were a clean-room implementation referencing only protocol documentation and operator-visible UI behavior — no Thetis source was incorporated.

Starting with v0.0.6 (under GPL v3 or later), Lyra is in full license compatibility with the openHPSDR ecosystem. Future releases may directly incorporate or link with GPL'd ham-radio libraries (notably WDSP for PureSignal, CESSB, and advanced TX). All such incorporations preserve upstream copyright + GPL terms; see NOTICE.md for ongoing third-party disclosures.

ExpertSDR3 is closed-source commercial software from Expert Electronics — referenced from published manuals as a design inspiration only, no code involvement.

Backlog

Tracked in docs/backlog.md. High-priority open items: TX path, per-band notch memory, expose bundled RNNoise / SpectralBleach NR via UI (DLLs already shipped, no front-end yet), installer for beta testers.

License

GNU General Public License v3.0 or later — see LICENSE.

Lyra was originally released under the MIT License up through v0.0.5 ("Listening Tools"). Starting with v0.0.6, Lyra is relicensed under GPL v3 or later to match the licensing of the broader openHPSDR / WDSP ecosystem and to enable future integration with WDSP-based features (PureSignal, CESSB, advanced TX). Past releases (≤ v0.0.5) remain under their original MIT terms; the relicense applies only to v0.0.6 and later.

What this means in practice:

  • You can use Lyra for any purpose, including commercial use
  • You can modify Lyra freely
  • You can redistribute Lyra and your modifications — but the result must also be GPL v3 (or later), and you must make source available

What it does NOT change:

  • Donations are still welcome (PayPal, etc.) — GPL doesn't restrict receiving payment for the project
  • Operators can run Lyra free of charge, no strings attached
  • The complete source remains public on GitHub

For the canonical GPL v3 text, see LICENSE in this repository or https://www.gnu.org/licenses/gpl-3.0.html.

© 2026 Rick Langford (N8SDR), Brent Crier (N9BC), Timmy Davis (KC8TYK), and Lyra-SDR contributors — see CONTRIBUTORS.md

About

Qt6/PySide6 desktop SDR transceiver for Steve Haynal's Hermes Lite 2 / 2+. Native Python HPSDR Protocol 1, TCI v1.9 server, modern glassy UI with analog meters, band-plan overlay, GPU panadapter, and CW-focused audio toolkit (APF + BIN). Windows-first. GPL v3 or later.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages