github gbozo/no-sdr v1.2.1
v1.2.1 — FFT performance regression fix (Final Node.js release)

latest releases: v2.10.5, v2.10.4, v2.10.3...
5 months ago

Fix

Reverts the custom radix-2 FFT back to fft.js (radix-4) and removes the unnecessary Buffer.from(rawData) copy introduced in v1.2.0.

Root cause: At N=2048 (the common production FFT size), radix-2 has 2× more butterfly iterations than radix-4 (11,264 vs 5,632). The Float32Array memory layout advantage does not compensate at small sizes. Additionally, Buffer.from(rawData) was copying the entire dongle IQ buffer (~65 KB × 73 times/sec = 4.8 MB/sec) on every chunk, even though both IQ extraction and FFT ring buffer ingestion run synchronously before the first await.

Result: CPU usage returns from ~50% to the original ~23–25% baseline for 1 WFM client. All other v1.2.0 optimizations (NCO tables, fastAtan2, Float32 SimpleFir, async deflate, ADPCM pre-alloc, audio pop fixes) remain in place.


⚠️ Final Node.js Backend Release

This is the last release of the Node.js (Hono/TypeScript) backend.

Active development has moved to a new Go backend (serverng/) which brings:

  • Native concurrency — goroutines replace async/await throughout the hot path
  • Lower CPU usage and single-binary deployment
  • Same WebSocket binary protocol and REST API — client is unchanged
  • Full feature parity: all demodulators (WFM/NFM/AM/SSB/SAM/CW), all codecs (ADPCM/Opus/deflate), bandwidth control, RDS, noise blanker

The Go backend will be released as v2.0.0. The Node.js server code remains in the server/ directory as a reference implementation.

Don't miss a new no-sdr release

NewReleases is sending notifications on new releases.