# Changelog ## v0.4.0-pre Full DSP chain implementation, pre-hardware milestone. ### Added - RDS encoder rewrite: standards-grade group framing (0A for PS, 2A for RadioText), CRC-10 per IEC 62106 with offset words, differential encoding, group scheduler with PS/RT cycling and A/B flag toggle - Stereo encoder: stateful 38 kHz DSB-SC subcarrier oscillator (phase-coherent across block boundaries), replaces fragile sample-indexed sin() in generator - Pre-emphasis filter: first-order IIR high-shelf, configurable τ (50 µs EU, 75 µs US, 0=off), with complementary de-emphasis for verification - FM modulator: composite-to-IQ via phase integration, configurable ±75 kHz deviation, unit-magnitude output guaranteed - MPX limiter: smooth attack/release peak limiter with hard-clip safety net - Linear-interpolation audio resampler (replaces nearest-neighbor) - Robust WAV loader with RIFF chunk scanning (handles LIST, INFO, bext, etc.) - New config fields: preEmphasisUS, maxDeviationHz, limiterEnabled, limiterCeiling, fmModulationEnabled - New patchable runtime fields via HTTP: preEmphasisUS, limiterEnabled, limiterCeiling - Comprehensive tests for all new DSP blocks ### Changed - Config defaults: pre-emphasis 50µs, limiter on, FM modulation on, deviation ±75kHz, RDS injection 0.05 - Offline generator wires full DSP chain: pre-emphasis → stereo encode → RDS → MPX combine → limiter → FM modulate - Dry-run output includes all new config fields - Status endpoint reports pre-emphasis, limiter, and FM modulation state ### Fixed - Stereo subcarrier phase discontinuity at block boundaries - WAV loader breaking on files with extra metadata chunks before data - Resampler aliasing artifacts from zero-order hold ## v0.3.0-pre Initial pre-v1 milestone for the licensed short-term FM/RDS transmitter project. ### Included - Windows-first Go project scaffold - validated JSON config schema - HTTP status/control surface with dry-run endpoint - deterministic dry-run output - offline composite/IQ-style file generation - simulated transmit path in main CLI via Soapy-oriented backend abstraction - automated no-hardware tests and smoke scripts ### Not yet included - real SoapySDR hardware driver integration - full RDS group framing/CRC/timing correctness - real audio ingestion pipeline - release CI / packaged distribution