
An Open Platform for SDR Development
R4W Development Team
(Aida, Joe Mooney, Claude
Code)
December 2025
R4W (Rust for Waveforms) is an open platform for developing, testing, and deploying Software Defined Radio waveforms in Rust.
Enable engineers to build secure, high-performance SDR systems with modern tooling.
Replace ad-hoc C/C++ SDR code with maintainable, testable, safe Rust.
| Pain Point | Traditional Approach | R4W Solution |
|---|---|---|
| Memory bugs | Runtime crashes, sanitizers | Compile-time safety |
| Buffer overflows | Code review, fuzzing | Bounds checking |
| Data races | Mutex discipline | Ownership model |
| Dependency hell | Manual tracking | Cargo package manager |
| Testing | Often minimal | 527 tests included |
┌─────────────────────────────────────────────────────┐
│ Applications │
│ (r4w-explorer, r4w CLI, r4w-web) │
├─────────────────────────────────────────────────────┤
│ Waveforms (38+) │ Plugins (.so) │
│ LoRa, PSK, QAM, FSK, OFDM │ Dynamic loading │
│ SINCGARS, HAVEQUICK, P25 │ Hot reload │
├─────────────────────────────────────────────────────┤
│ Core DSP │
│ Chirp, FFT, Filters, FEC, Timing, RT Buffers │
├─────────────────────────────────────────────────────┤
│ Hardware Abstraction │ Waveform Sandbox │
│ USRP, RTL-SDR, Simulator │ 8 isolation levels │
│ Xilinx Zynq, Lattice FPGA │ Containers, VMs │
└─────────────────────────────────────────────────────┘
| Operation | R4W | GNU Radio | Speedup |
|---|---|---|---|
| FFT 1024-pt | 371 MS/s | 50 MS/s | 7.4x |
| FFT 4096-pt | 330 MS/s | 12 MS/s | 27x |
| BPSK roundtrip p99 | 20 µs | ~100 µs | 5x |
Zero-copy lock-free buffers + Rust optimizations
| Metric | Target | Actual |
|---|---|---|
| FFT p99 latency | < 100 µs | 18 µs |
| FHSS hop timing p99 | < 500 µs | 80-118 µs |
| Page faults (RT mode) | 0 | 0 |
| Hot-path allocations | 0 | 0 |
| Hardware | Status | Notes |
|---|---|---|
| USRP N210/B200 | UHD Driver | Full TX/RX/FD |
| RTL-SDR | FFI Bindings | RX only |
| Xilinx Zynq | IP cores + mmap | FFT, FIR, Chirp, NCO, DMA |
| Lattice iCE40/ECP5 | Open toolchain | Yosys + nextpnr |
| Digital Attenuator | Control API | PE43711, Mini-Circuits |
| Simulator | Complete | UDP transport |
pub trait Waveform {
fn modulate(&self, bits: &[bool]) -> Vec<IQSample>;
fn demodulate(&self, samples: &[IQSample]) -> Vec<bool>;
fn constellation_points(&self) -> Vec<IQSample>;
}| Objective | Target | Validation |
|---|---|---|
| LoRa interop | Decode from Semtech | Hardware test |
| BER @ 10dB SNR | < 1e-3 | Automated test |
| Sensitivity | -120 dBm | Attenuator sweep |
| Latency p99 | < 100 µs | Benchmark suite |
| Zero RT allocations | 0 malloc in hot path | Audit tool |
#include <r4w.h>
r4w_waveform_t* wf = r4w_waveform_bpsk(48000.0, 1200.0);
r4w_modulate(wf, bits, len, samples);Start with pure functions, gradually migrate.
New development in Rust, legacy maintained.
cargo doc --openworkshop/ directorycargo benchcargo test