|
|
@@ -2,14 +2,15 @@ |
|
|
|
|
|
|
|
|
## 1. Mission |
|
|
## 1. Mission |
|
|
|
|
|
|
|
|
Create a Go-based UKW/FM stereo transmitter with RDS that can run on standard Linux systems and, where feasible, on Raspberry Pi / SBC-class hardware. |
|
|
|
|
|
|
|
|
Create a Go-based UKW/FM stereo transmitter with RDS that can run on Windows, Linux, and, where feasible, on Raspberry Pi / SBC-class hardware. |
|
|
|
|
|
|
|
|
Primary design goals: |
|
|
Primary design goals: |
|
|
- reliable CPU implementation first |
|
|
- reliable CPU implementation first |
|
|
|
|
|
- Windows-first bring-up and development ergonomics |
|
|
- clean architecture for real-time DSP |
|
|
- clean architecture for real-time DSP |
|
|
- optional CUDA path for selected heavy DSP blocks |
|
|
- optional CUDA path for selected heavy DSP blocks |
|
|
- practical control interfaces for audio, RDS, frequency, and TX settings |
|
|
- practical control interfaces for audio, RDS, frequency, and TX settings |
|
|
- portability across x86_64 Linux and ARM Linux |
|
|
|
|
|
|
|
|
- portability across Windows x86_64, Linux x86_64, and ARM Linux |
|
|
|
|
|
|
|
|
--- |
|
|
--- |
|
|
|
|
|
|
|
|
@@ -23,7 +24,8 @@ Primary design goals: |
|
|
|
|
|
|
|
|
### Technical |
|
|
### Technical |
|
|
- Go as the primary implementation language. |
|
|
- Go as the primary implementation language. |
|
|
- Linux is the primary target. |
|
|
|
|
|
|
|
|
- Windows is the initial bring-up target. |
|
|
|
|
|
- Cross-platform portability must be preserved from day one. |
|
|
- Raspberry Pi / ARM compatibility must be preserved for the CPU path. |
|
|
- Raspberry Pi / ARM compatibility must be preserved for the CPU path. |
|
|
- CUDA is optional and must be runtime-detectable, never mandatory. |
|
|
- CUDA is optional and must be runtime-detectable, never mandatory. |
|
|
|
|
|
|
|
|
@@ -87,7 +89,11 @@ Tasks: |
|
|
- SDR IQ output |
|
|
- SDR IQ output |
|
|
- direct MPX/composite output |
|
|
- direct MPX/composite output |
|
|
- both |
|
|
- both |
|
|
|
|
|
- freeze first backend direction: |
|
|
|
|
|
- SoapySDR as preferred abstraction for hardware flexibility |
|
|
|
|
|
- optional vendor-native backend later if required for performance/features |
|
|
- shortlist hardware targets: |
|
|
- shortlist hardware targets: |
|
|
|
|
|
- Windows PC + SDR |
|
|
- Linux PC + SDR |
|
|
- Linux PC + SDR |
|
|
- Raspberry Pi 4/5 + SDR |
|
|
- Raspberry Pi 4/5 + SDR |
|
|
- other ARM SBC |
|
|
- other ARM SBC |
|
|
@@ -162,7 +168,7 @@ Tasks: |
|
|
Acceptance criteria: |
|
|
Acceptance criteria: |
|
|
- generated composite can be decoded by reference analysis tools |
|
|
- generated composite can be decoded by reference analysis tools |
|
|
- RDS PS and RadioText can be recovered reliably from recorded output |
|
|
- RDS PS and RadioText can be recovered reliably from recorded output |
|
|
- CPU use acceptable on x86 Linux for real-time operation |
|
|
|
|
|
|
|
|
- CPU use acceptable on Windows x86 and Linux x86 for real-time operation |
|
|
|
|
|
|
|
|
--- |
|
|
--- |
|
|
|
|
|
|
|
|
@@ -177,7 +183,7 @@ Deliverables: |
|
|
- underrun/overrun telemetry |
|
|
- underrun/overrun telemetry |
|
|
|
|
|
|
|
|
Backend options to evaluate: |
|
|
Backend options to evaluate: |
|
|
1. **SoapySDR backend** for broad SDR support |
|
|
|
|
|
|
|
|
1. **SoapySDR backend** as the preferred first backend for broad SDR support and flexibility |
|
|
2. **Vendor-native backend** for selected hardware where latency/control is better |
|
|
2. **Vendor-native backend** for selected hardware where latency/control is better |
|
|
3. **Composite audio backend** for hardware exciters that accept MPX input |
|
|
3. **Composite audio backend** for hardware exciters that accept MPX input |
|
|
|
|
|
|
|
|
@@ -319,7 +325,7 @@ Be careful with naming: |
|
|
## 7. Recommended MVP definition |
|
|
## 7. Recommended MVP definition |
|
|
|
|
|
|
|
|
Ship this first: |
|
|
Ship this first: |
|
|
- Linux CLI daemon in Go |
|
|
|
|
|
|
|
|
- Windows-first CLI daemon in Go, kept cross-platform from the start |
|
|
- CPU-only path |
|
|
- CPU-only path |
|
|
- stereo MPX generation |
|
|
- stereo MPX generation |
|
|
- basic RDS (PS + RT + PI + PTY) |
|
|
- basic RDS (PS + RT + PI + PTY) |
|
|
|