Pulseaudio echo cancelation: geht das überhaupt?

  • Hallo zusammen,


    ich bin neu hier und finde es super, was ihr für ein tolles Projekt geschaffen habt.


    Ich habe hier auch schon einen Testaufbau für einen doorpi auf dem Schreibtisch liegen. Über reines ALSA Audio funktioniert der Sound insofern, dass ich die Gegenstelle höre und mein gesprochenes auch dort ankommt. Allerdings kämpfe ich mit starken Echo Effekten. Hier im Forum habe ich gelesen, dass man das echo cancelation von pulseaudio nutzen könnte.
    Ich habe es nach der Anleitung eingebaut und habe nun das Problem, dass der Pi wohl zu langsam ist, um echo cancelation machen zu können. Audio ist sehr zerhackt und die Meldung von pulseaudio ist:


    Code
    I: [pulseaudio] protocol-native.c: Requested tlength=256.00 ms, minreq=32.00 ms
    I: [pulseaudio] protocol-native.c: Final latency 399.81 ms = 100.12 ms + 2*99.88 ms + 99.94 ms
    E: [alsa-source-USB Audio] module-echo-cancel.c: Doing resync
    E: [alsa-source-USB Audio] module-echo-cancel.c: Playback after capture (-1328462), drop sink 21274
    I: [pulseaudio] sink-input.c: Freeing input 331 "ALSA Playback"
    I: [pulseaudio] sink-input.c: Created input 332 "ALSA Playback" on noecho.sound_out with sample spec s16le 1ch 8000Hz and channel map mono


    Verwendet wird ein Raspberry Pi 3 Model B.


    Meine Frage an euch ist: Hat das mit dem pulseaudio schon mal jemand erfolgreich ans Laufen bekommen? Oder was tut ihr gegen das Echo? Könnte mir Asterisk vielleicht helfen, dass ich lieber dort einen Filter einbaue?


    Danke für eure Antworten
    Michael

  • Du könntest statt einer normalen Soundkarte eine per Bluetooth angebundene Freisprecheinrichtung für Autos nehmen. Schon die billigsten um die 7€ mit Versand aus China haben DSP-Rückkopplungssperren drin. Nachteil bei den Teilen ist, dass an der Freisprecheinrichtung immer der Rufannahmeknopf zu drücken ist - GPIO-Pin mit Widerstand und Optokoppler sollten das lösen.


    Was Rückkopplung angeht, so sollte die Priorität bei der Reduktion immer so aussehen:
    1. Vermeidung durch Entkoppeln und Ausrichten von LS und Mic
    2. Vermeidung des Übersprechens (kurze Kabelwege! Mic-Vorverstärker und LS-Endstufe gehören in die Sprechstelle)
    3. DSP oder Frequenzshifter vor oder im Soundchip
    4. Rückkopplungsunterdrückung im Treiber des Soundchips
    5. Rückkopplungsunterdrückung auf höheren Treiberebenen
    6. Alles noch weiter hinten kann man fast vergessen...
    Je "weiter weg" eine Rückkopplungsunterdrückung liegt, um so schwerer hat sie es - unbekannte Latenzen des Signalweges und unbekannte Rauschanteile erschweren es ungemein, Nutzsignal und störendes Rückkopplungssignal zu trennen.


    Neben der Bluetooth-Card-Freisprecheinrichtung als Billiglösung kommt natürlich am oberen Preisende (falls man es nicht gebraucht günstig schießt) ein professionelles Konferenzfreisprechsystem wie der Sennheiser SP10/SP20 in Frage.


    Eine von mir erprobte Lösung, die klanglich Meisterklasse ist: Ein schnurloses AVM DECT-Mobilteil (gestestet: Speedphone 300), Abhebentaste mittels Optokoppler an den Lautsprecher, Anschluss der Hörkapsel über einen Vorverstärker und Endstufe an Lautsprecher, Originalmicrofonkapsel durch größere einer alten Siedle-TFE ersetzt.
    Absolut keine Rückkopplung, selbst bei nicht mehr nachbartauglicher Lautstärke. Als Konzertqualität kann man es nur deshalb nicht bezeichnen, weil ich nicht singen kann...
    Warum das so ist: Bei DECT-Handsets ist eine physikalische Entkopplung schwer. Um Freisprechen zu unterstützen, ist in vernünftigen Handsets ein ziemlich guter DSP verbaut...
    Natürlich kann man diese Variante auch mit DoorPi nutzen. Man stellt eben nicht mit Asterisk ein Gespräch zwischen dem Ziel und Linphone her, sondern zwischen dem Ziel und einem zweitem Ziel, nämlich einem z.B. an einer FBF angemeldeten DECT-Mobilteil (das durch den Optokoppler automatisch rangeht).


    Auch die Bluetooth-Car-Freisprechanlagenlösung kommt ohne extra Sip-Client aus (sofern man nicht Sip-Video braucht). Chan_mobile im Asterisk kann diese direkt ansprechen.


    Manchmal hilft auch ein Flohmarkt: Aldi hatte 2006 mal ein Freisprechtelephon für Skype und irgendeinen seltsamen VoIP-Dienst im Angebot. Treiber für Tastatur und Display liefen nur unzer XP, aber selbst unter Win10 lief die Soundkarte (ohne bemerkbare Rückkopplung). Der USB-Soundkartentreiber war C-Media, sollte also auch unter Linux erkannt werden. Auf dem Flohmarkt habe ich 6€ dafür bezahlt, muss ich nur noch wiederfinden...

  • Hallo,


    danke für die ausführliche Antwort!


    Ich habe mir auch bereits die USB Soundkarte Soundblaster X-Fi GO besorgt, die hier oder anderswo erwähnt wurde, weil sie das Feature AEC wohl unterstützt. Das war mein Ansatz, um die Echounterdrückung wie du schreibst möglichst weit vorne zu machen. Leider finde ich so ganz und gar nichts darüber, wie man dieses Feature unter Linux zum laufen bekommt. Bin kurz davor in die Sourcen der Treiber zu sehen...


    Die anderen Basteleien mit Aldi Skype Telefonen klingen auch interessant. Möglicherweise ist das dann der nächste Versuch wenn ich dann weiss, dass die Soundblaster das Feature unter Linux nicht unterstützt...


    Schöne Grüße
    Michael