|
|
преди 1 месец | |
|---|---|---|
| .. | ||
| Logo | преди 1 месец | |
| rds-standards | преди 1 месец | |
| API.md | преди 1 месец | |
| DSP-CHAIN.md | преди 1 месец | |
| Kim_-_Parikh_-_Distribution_of_the_Analog_or_Digital_FM_Composite.pdf | преди 1 месец | |
| NOTES.md | преди 1 месец | |
| README.md | преди 1 месец | |
| audio-ingest-implementation-plan.md | преди 1 месец | |
| audio-ingest-rework.md | преди 1 месец | |
| composite-mpx-metering-concept.json | преди 1 месец | |
| composite-mpx-metering-concept.md | преди 1 месец | |
| config.orangepi-pluto-soapy.json | преди 1 месец | |
| config.plutosdr.json | преди 1 месец | |
| config.sample.json | преди 1 месец | |
| metering-ws1-implementation-plan.md | преди 1 месец | |
| metering_telemetry_autobahn_v3.md | преди 1 месец | |
| pro-runtime-hardening-workboard.md | преди 1 месец | |
| ui-flow-view-sollmodell.md | преди 1 месец | |
| ui-rework-sollmodell.md | преди 1 месец | |
| ws-03-parameter-inventory.md | преди 1 месец | |
go test ./...go run ./cmd/fmrtx -print-configgo run ./cmd/fmrtx -config docs/config.sample.jsongo run ./cmd/fmrtx --dry-run --dry-output build/dryrun/frame.jsongo run ./cmd/fmrtx --simulate-tx --simulate-output build/sim/simulated-soapy.iqf32 --simulate-duration 250msgo run ./cmd/offline -duration 500ms -output build/offline/composite.iqf32Current no-hardware sources:
audio.inputPath (robust chunk-scanning loader)The current no-hardware source can be parameterized via config:
audio.toneLeftHzaudio.toneRightHzaudio.toneAmplitudeThe full signal chain from audio input to IQ output:
FM broadcast requires pre-emphasis to boost high frequencies before transmission. The receiver applies complementary de-emphasis to restore flat response while reducing noise.
preEmphasisUS: 50)preEmphasisUS: 75)preEmphasisUS: 0fmModulationEnabled: true — output is baseband FM-modulated IQ (I² + Q² = 1). This is what SDR transmitters expect.fmModulationEnabled: false — output is raw composite MPX (I = composite, Q = 0). Useful for analysis or composite exciters.When deviceSampleRateHz > compositeRateHz (e.g. Pluto at 2.28 MHz, composite at 228 kHz), the engine automatically activates split-rate mode:
compositeRateHz (228 kHz)FMUpsampler performs FM modulation + phase-domain interpolation to deviceSampleRateHzThis halves CPU load compared to running all DSP at device rate. Log output confirms the active mode:
engine: split-rate mode — DSP@228000Hz → upsample@2280000Hz (ratio 10.00)
When rates are equal (e.g. LimeSDR at 228 kHz), same-rate mode is used:
engine: same-rate mode — DSP@228000Hz
The MPX limiter prevents overmodulation by applying smooth gain reduction when the composite signal exceeds the configured ceiling. A hard clipper acts as a safety net after the limiter.
limiterEnabled: true/falselimiterCeiling: 1.0 (max composite level before FM modulation)Full API documentation: docs/API.md
All major TX parameters are hot-reloadable via POST /config during live transmission — frequency, stereo/mono, RDS text, output drive, pilot/RDS levels, limiter. Changes take effect within 50–88ms without stopping the stream.
Available endpoints: /healthz, /status, /runtime, /config (GET/POST), /dry-run, /tx/start, /tx/stop
Control-plane HTTP server is configured with 5s read, 10s write, and 60s idle timeouts plus a 1 MiB header limit to reduce slow-client abuse.
cd internalgo test ./...cd examplesgo test ./...go run ./soapy_simulatedThe dry-run mode generates a synthetic, hardware-free frame summary based on the current config. It reports the active source label, pre-emphasis setting, limiter state, and FM modulation mode.
The HTTP control plane also exposes GET /dry-run for quick inspection.
--simulate-tx runs the offline generator through the Soapy-oriented simulated backend path and writes an IQ-style artifact to disk.
cmd/offline generates a deterministic no-hardware IQ/composite file using the full DSP chain (pre-emphasis, stereo encoding, RDS, limiter, FM modulation).
Current honest release posture: pre-v1.
Recommended milestone tag: v0.9.0.
See CHANGELOG.md and RELEASE.md.