0005 – Mehrschichtige Echo-Behandlung mit eigener Bulk-Delay-Kompensation
Status: angenommen
Kontext
Abschnitt betitelt „Kontext“Der Assistent darf nie auf seine eigene Stimme reagieren. Bei Netzwerkkameras als Mikrofon und Lautsprecher kommt die eigene Ausgabe mit 1–2 s Verzögerung zurück (C200: ~1,8 s), schwankend mit der Netzlast. Manche Geräte schalten ihr Mikrofon während der Wiedergabe stumm.
Messung (scripts/measure_aec.py): WebRTC AEC3 dämpft bis ~0,4 s Verzögerung
32–40 dB, ab 0,6 s nur noch ~10 dB. Mit vorgeschalteter Bulk-Delay-Kompensation
bleiben es ~40 dB auch bei 1,8 s.
Entscheidung
Abschnitt betitelt „Entscheidung“Mehrere unabhängige Schichten statt eines einzelnen Echo-Cancellers (AUDIO.md):
- AEC3 (über livekit) mit Referenz, die um die per GCC-PHAT gemessene Verzögerung verschoben ist,
- deterministisches Echo-Fenster mit Half-Duplex-Gate (Standard), Full Duplex nur nach gemessener Echodämpfung ≥ 18 dB,
- Wakeword-Unterdrückung während der eigenen Wiedergabe,
- Transkript-Echo-Filter gegen kürzlich Gesagtes,
- Ignorieren des Wakeword-Nachlaufs, Inaktivitäts-Timer erst nach dem Echo-Fenster.
Die Kalibrierung misst die Verzögerung mit Sweeps und erkennt Geräte, die ihr Mikrofon stummschalten.
Alternativen
Abschnitt betitelt „Alternativen“- Nur AEC3 / Speex: versagt bei Netzwerklatenz (Messung oben).
- Immer Half Duplex ohne AEC: sicher, aber kein Barge-in auf geeigneten Geräten.
- Nur Transkript-Vergleich: reagiert erst nach STT, also zu spät für das Wakeword.
Konsequenzen
Abschnitt betitelt „Konsequenzen“- Sicher auch auf Geräten mit unbekannter, schwankender Latenz.
- Barge-in nur auf Geräten mit echtem Full Duplex und gemessener Echodämpfung; mit der C200 nicht möglich.