--- orphan: true --- (why_12m_looks_noisy)= # Why 12m Looks "Noisy" on the Raspberry Pi > NOTE: This document was split out of the main FAQ for readability. (1-observations)= ## 1. Observations - **Test tone at 24.926 MHz (12m)** looks _clean_ on the scope. - **WSPR transmission on 12m** appears to be _noise_ or "hash". - Other bands (10 m, 15 m, etc.) appear cleaner under similar conditions. - The effect is much stronger on **Raspberry Pi 4** than on older Pis. - No LPF or passive filtering is present; probing is directly on **GPIO 4**. This behavior is **expected** given how the signal is generated and the differences in Pi 4 hardware. (2-why-testtone-is-clean-but-wspr-looks-noisy)= ## 2. Why Test‑Tone Is Clean but WSPR Looks Noisy (testtone-mode)= ### Test‑Tone Mode - Generates a **single, constant frequency**. - No fractional scheduling. - No rapid switching between tones. - GPIO outputs a steady divider → narrow spectrum (aside from harmonics). (wspr-mode)= ### WSPR Mode - Uses **four closely spaced tones**. - Each symbol duration is generated by **fractional switching** between two adjacent divider values (f0 / f1) to hit the exact desired frequency. - This results in _many rapid GPIO transitions_ within each symbol. Without filtering, these transitions appear as: - Broadband energy on a scope - "Noise‑like" waveform instead of a clean sinusoid (3-why-12m-is-worse-than-other-bands)= ## 3. Why 12m is Worse Than Other Bands 12m sits in a **bad corner case**: - High enough frequency that GPIO edges are extremely sharp in phase terms. - Small divider differences → **fine‑grained fractional dithering**. - Fractional scheduling creates very short segments: - A few PWM clocks of f0 - Followed by a few PWM clocks of f1 - These tiny segments behave like **phase noise / wideband FM**. Other bands: - Larger divider gaps or different ratios. - Fractional error spreads more benignly. - Less visible broadband hash on a scope. (4-why-raspberry-pi-4-is-much-worse-than-pi-123)= ## 4. Why Raspberry Pi 4 Is Much Worse Than Pi 1/2/3 (gpio-hardware)= ### GPIO Hardware - Pi 4 GPIO edges are **much faster** (sub‑2 ns rise time). - Faster edges → more high‑frequency content → more visible noise. (clocking-architecture)= ### Clocking Architecture - Pi 4 uses multiple high‑speed PLL domains: - PLLD_PER - PWM clock - Core / VPU clocks - Fractional scheduling errors are no longer "blurred" by slow hardware. (pwm-clock-rate)= ### PWM Clock Rate - Pi 4 PWM clock ≈ **500 MHz** domain. - Tiny timing errors become real RF events. - Older Pis had slower clocks and unintentionally smoothed things out. **Net effect:** Pi 4 exposes exactly what the math is doing. (5-what-was-changed-in-the-software)= ## 5. What Was Changed in the Software The original scheduler: - Used round() each iteration. - Produced unpredictable tiny segments. - Randomized iteration length. - Generated high‑rate, irregular tone switching. (improvements-made)= ### Improvements Made - **Fixed‑Point Bresenham Scheduler** - Error‑accumulator style scheduling. - Exact long‑term frequency ratio. - Deterministic behavior. - **Predictable Toggle Cadence** - Fixed block size (PWM_CLOCKS_PER_ITER_NOMINAL). - No random jitter. - **Tail Clamp** - If the remaining clocks are small, send only **one tone**. - Prevents end‑of‑symbol micro‑toggles. - **Tiny‑Segment Merge** - If n_f0 or n_f1 < threshold: - Merge the entire block into one tone. - Eliminates 2-10‑clock fragments. - **Extensive Debug Instrumentation** - Counts actual switches. - Logs tiny / zero‑length segments. - Proves why 12m is noisy before. These changes **significantly reduce broadband hash**, especially on Pi 4. (6-is-this-fixed-without-an-lpf)= ## 6. Is This "Fixed" Without an LPF? No - and that's expected. (important-reality-check)= ### Important Reality Check - GPIO RF output is **not a DAC**. - It is a fast square‑wave source. - Software can reduce _unnecessary modulation artifacts_, but cannot remove harmonics. A **low‑pass filter is mandatory** for: - Legal operation - Spectral cleanliness - Making Pi 4 look as good as Pi 1/2/3 did "bare." With a proper LPF: - The 12m WSPR signal will look clean. - The remaining differences between bands largely disappear. (7-final-takeaway)= ## 7. Final Takeaway - 12m looks noisy because **fractional dithering + fast GPIO edges** were fully exposed on Pi 4. - The issue is **not** a bad frequency, band bug, or calibration error. - Software changes addressed _avoidable_ noise: - Tiny segments - Randomized timing - Unpredictable switching - Pi 4 is simply more honest - and less forgiving - than older Pis. - With the current scheduler **and** a proper LPF, the signal is correct. **In short:** Nothing is "wrong" with 12m. The Pi 4 just stopped hiding the physics.