# CW-Demodulator-Erweiterungen (Stufe 3)

Baut auf [Stufe 2](/projekte/cw/cw-demodulator-gnuradio/) auf und ergänzt drei dort offen
gebliebene Punkte, plus eine Verifikation an einer echten Aufnahme:

- `cw.grc` — vollständiger Flowgraph für Audiosignale (synthetisch oder nach BFO): WAV Source →
  Throttle → Freq Xlating FIR Filter (per Nachricht nachstimmbar) → Complex to Mag → CW Noise-Floor
  Normalizer (mit Warm-up-Sperre) → Threshold (Hysterese) → CW Element Tagger (Regelkreis-basierte
  Geschwindigkeitsschätzung) → CW Decoder → Message Debug. Parallel dazu: CW AFC, das die
  Mittenfrequenz des Freq Xlating Filters per Nachrichtenport laufend nachführt.
- `cw_live.grc` — dieselbe Kette für echte, stereophone KiwiSDR-IQ-Aufnahmen (I/Q statt Audio nach
  BFO): Stereo WAV Source → Float To Complex → Freq Xlating FIR Filter (Complex→Complex) → Rest
  identisch zu `cw.grc`.
- `build_grc.py` / `build_grc_live.py` — erzeugen `cw.grc` bzw. `cw_live.grc` aus den einzelnen
  `epy_*.py`-Dateien neu (nach Änderungen an einer davon ausführen, statt die `.grc`-Dateien von
  Hand zu editieren).
- `gen_cw_testsignal.py` — Testsignal-Generator, mit `--drift-hz` (Frequenzdrift) und `--wpm-end`
  (Geschwindigkeitsrampe).
- `test_chain.py` / `test_live.py` — headless-Validierungsskripte (synthetische Testsignale bzw.
  echte Aufnahme).
- `make_plots.py` / `make_plots_live.py` — erzeugen die Artikel-Illustrationen neu.
- `cw_test_*.wav` — alle im Artikel besprochenen synthetischen Testsignale.
- `SND.kiwisdr.dynpc.net_..._7033.98_iq.wav` — echte 40-m-KiwiSDR-Aufnahme (36 s, stereo IQ).

## Ausführen

```bash
# Synthetische Testsignale:
grcc -o build cw.grc
python3 build/cw.py
python3 test_chain.py       # headless, ohne GUI

# Echte KiwiSDR-Aufnahme:
grcc -o build cw_live.grc
python3 build/cw_live.py
python3 test_live.py        # headless, ohne GUI
```
