menschliches Sprachrauschenfilter

  • Kennt jemand einen Filter, um Nicht-Sprache zu dämpfen? Ich schreibe Spracherkennungssoftware und möchte alles außer menschlicher Sprache herausfiltern. Dies umfasst Hintergrundgeräusche, Geräusche, die von einem beschissenen Mikrofon erzeugt werden, oder sogar Hintergrundmusik. Ich habe bereits einen Filter erster Ordnung implementiert, der die 6 dB-Abnahme des Leistungsspektrums kompensiert, aber ich höre immer noch Rauschen (obwohl die Sprache viel klarer klingt). Ich habe daran gedacht, einen Tiefpassfilter zu verwenden, aber ich kann das aus zwei Gründen nicht tun:

    1. Ich weiß nicht, ob oder nicht ein Tiefpass-Vorfilter wird den Rest der Sprachverarbeitung stören. Obwohl das menschliche Ohr nur Töne unter 20 kHz erkennen kann, möchte ich nicht riskieren, dass die zur Verarbeitung der Sprache erforderlichen Oberschwingungen höherer Ordnung beseitigt werden (obwohl ich nicht weiß, ob dies der Fall ist oder nicht. Aber Ich möchte kein Risiko eingehen).

    2. Ich verstehe, dass die Erregung bestimmter Konsonanten (wie f, h und s) fast vollständig weiß ist Lärm. Ich möchte keinen Rauschfilter implementieren, der sozusagen gutes Rauschen eliminiert.

    Im Idealfall möchte ich nur noch die Sprache der Person sprechen, die ins Mikrofon spricht. Wenn Sie irgendwelche Ideen haben oder etwas fehlt, lass es mich wissen. Sehr geschätzt!

    30 July 2012
    Zetta Suro
3 answers
  • Ein Sprachkommunikationskanal, wie er in der Telefonie verwendet wird, hat typischerweise eine Frequenzantwort von 300 Hz bis 3 kHz. Obwohl dies einen großen Teil der Energie in normaler Sprache ablehnt, ist die Verständlichkeit immer noch recht gut - das Hauptproblem scheint das gewisse Problem zu sein. explosive Konsonanten , z "p" und "t" können ohne die Komponenten mit höherer Frequenz etwas schwer zu unterscheiden sein.

    Sie suchen also wahrscheinlich nach einem "Sweet Spot" irgendwo zwischen der Verwendung des volle Bandbreite von 20 Hz - 20 kHz, die normalerweise in Consumer-Audio zu finden ist, und die aggressivste Filterung für die Sprachkommunikation (siehe oben). Ich würde vorschlagen, mit einem Bandpassfilter von etwa 50 Hz bis 8 kHz zu beginnen. Es wird wahrscheinlich das SNR im besten Fall nur um einige dB verbessern, es kann jedoch hilfreich sein, insbesondere wenn Sie viel Hintergrundrauschen mit hoher Frequenz haben.

    31 July 2012
    GillesTimeless
  • Die Verwendung eines Passbandfilters, der auf die Sprachbandbreite abgestimmt ist, hilft.

    Wenn Sie mehrere Mikrofone haben (wie es jetzt bei Mobiltelefonen der Fall ist), gibt es ein Es gibt viele ICA-ähnliche Methoden, die davon profitieren können - aber Ihre Frage weist mich darauf hin, dass Sie nur eine Eingabe haben.

    Was Sie tun möchten, ist "Einmikrofonquellentrennung" "(Name aus Roweis bahnbrechendem Papier), auch" Single-Sensor "genannt. Warnung: Dies ist bei weitem nicht ein gelöstes Problem, und alle Forschungen auf diesem Gebiet sind sehr neu, wobei kein Algorithmus oder Ansatz ein "klarer Gewinner" ist (im Gegensatz zu Gaußschen Mischungsmodellen + FST wurden Spracherkennungen durchgeführt)

    Ein guter Rahmen dafür ist die Wiener-Filterung. Siehe Benaroya et al. "Einzelsensor Quellentrennung basierend auf Wiener Filterung und STFT mit mehreren Fenstern" (Lesen Sie Abschnitt 1 und 2, kümmern Sie sich nicht um die Multiresolution-Sache, es sei denn, Sie benötigen sie wirklich). Kurz gesagt, Sie berechnen die STFT Ihres Signals, und Sie versuchen für jeden STFT-Frame, Schätzungen des Stimmspektrums und des Rauschspektrums zu erhalten, und Sie verwenden die Wiener-Filterung, um die beste Schätzung des Stimmspektrums (dieses.) Zu ermitteln ist wie eine "weiche Maskierung" des Spektrums).

    Ihr Problem ist nun das folgende: Schätzen Sie bei einem STFT-Rahmen die Sprache und die Rauschkomponente davon ab. Der einfachere Ansatz, der in dem Artikel von Benaroya beschrieben wird, ist die Vektorquantisierung - nehmen Sie sich mehrere Stunden Redezeit, berechnen Sie die STFT, und führen Sie LBG darauf aus, um ein Codebuch mit 512 oder 1024 typischen Sprachrahmen zu finden. Machen Sie dasselbe für Lärm. Projizieren Sie dieses Bild nun mit einem Frame Ihres Eingangssignals nicht negativ auf die Sprach- und Geräuschbasis, und Sie erhalten eine Abschätzung Ihrer Sprach- und Geräuschentwicklung. Wenn Sie sich nicht mit der nicht-negativen Projektionssache befassen möchten, verwenden Sie einfach den nächsten Nachbarn. Dies ist wirklich das einfachste, was möglich wäre

    01 August 2012
    RodeoClown
  • Sie sollten wahrscheinlich die unabhängige Komponentenanalyse (Independent Component Analysis, ICA) durchführen, da Ihr Problem dem "Cocktailparty" -Problem sehr ähnlich ist, das häufig zur Beschreibung von ICA verwendet wird. Kurz gesagt, ICA findet die Komponenten Ihres Signals, die voneinander unabhängig sind. Dies setzt voraus, dass andere Geräusche in der Umgebung (Geschirrspüler, weißes Geräusch, Lüfterrauschen) unabhängig von der Signalquelle der Stimme sind und getrennt werden können.

    ICA ähnelt PCA (Hauptkomponentenanalyse), aber anstatt die Varianz der Hauptachsen zu maximieren, wird die Unabhängigkeit maximiert. Es gibt viele Implementierungen von ICA, die in die von Ihnen verwendete Codierungsumgebung integriert werden sollten.

    01 August 2012
    gallamine