Gibt es eine Möglichkeit, das Geräusch des Luftblasens vom normalen Ton über das Telefonmikrofon zu unterscheiden?

Ich habe an einer Android-App gearbeitet, die Eingaben vom Mikrofon entgegennimmt, wenn der Benutzer hineinbläst. Ich verwende eine FFT-basierte Schallanalyse und wandle die Werte in Frequenz um, indem ich eine Nulldurchgangsmethode verwende.

Mit den Ergebnissen bin ich immer noch unzufrieden. Was ich will, ist, es sollte nur den "Luftstoß" erkennen und einen eindeutigen Wert generieren, damit ich alle anderen Geräusche ignorieren kann. Ich habe bei Google viel danach gesucht, aber keine eindeutigen Antworten erhalten. Ich hoffe ich bekomme hier eine Lösung.

EDIT: Jetzt hatte ich nicht wirklich genug Zeit, um die bereitgestellten Lösungen zu recherchieren. Außerdem denke ich, dass ich die Formeln nehmen und meine eigenen Klassen in JAVA erstellen muss, und das wird einige Zeit dauern. Aber ich möchte den Link für die von mir veröffentlichte Anwendung teilen. Es ist nicht das effizienteste, wie ich in meiner Frage erwähnt habe, aber es funktioniert. Der Link zu meiner App lautet:

Appy-Geburtstag im Play Store

Ich möchte, dass Android-Benutzer es ausprobieren und mir auch Feedback geben.

Im Allgemeinen sollten Windgeräusche an der Quelle eliminiert werden, sind aber kontinuierlich. Das Anblasen eines Mikrofons erfolgt in kurzen Impulsen von wenigen Sekunden. Suchen Sie nach sehr niederfrequenten Impulsen (0,2 Hz)
Oh okay Jim, und was ist mit den Methoden, die ich verwende? Ich meine FFT und Nulldurchgang. Gibt es eine bestimmte Methode, die mir eine genaue Frequenz geben würde?
Keine, die ich kenne. Sie haben es im Wesentlichen mit Geräuschausbrüchen zu tun.
Der Ton, der von einem Mikrofon aufgenommen wird, weil Luft darauf geblasen wird, ist definitiv keine bestimmte Frequenz oder ein Frequenzbereich: Der Bereich würde durch die nativen Parameter des Mikrofons sowie die der Verstärkungsstufen variieren. Was Sie möglicherweise erkennen möchten, ist ein relativ breites Band von weißem Rauschen, das höher als das kontinuierliche Grundrauschen ist und für eine Dauer von mindestens einer Sekunde konsistent ist. Wenn es einen bestimmten Satz vorherrschender Frequenzen gibt, handelt es sich wahrscheinlich nicht um das Luftblasgeräusch, sondern eher um eine Stimme, Musik oder andere Geräusche. Kurzes weißes Rauschen könnte Auswirkungen usw. sein.
Okay, noch eine Frage, wäre es besser, einen Tiefpassfilter anzuwenden, damit ich eine genaue Frequenz bekomme und dann diesen bestimmten Frequenzbereich jedes Mal nehmen kann, wenn ich in das Mikrofon blase? Danke auch, dass Sie die Dinge für mich geklärt haben, Jim und Anindo. Ich habe viel darüber gesucht. Ich werde jetzt auch mehr über weißes Rauschen studieren.
Nein. Das Blasen deckt einen großen Teil des Frequenzbands ab und überlappt sich mit den Sprachdaten. Es ist unwahrscheinlich, dass ein einfacher linearer Filter Windgeräusche entfernt – sonst wäre dies in der Telekommunikation bereits geschehen!
Die Erkennung der Frequenz durch Nulldurchgänge ist nicht ideal, da Geräusche in der realen Welt keine Sinuswelle mit einer einzigen Frequenz und regelmäßigen Nulldurchgängen sind. Suchen Sie sich ein Oszilloskop oder sehen Sie sich einfach Tonaufzeichnungswellenformen in Audacity mit maximalem Zoom an, um zu sehen, was Sie tatsächlich zu erfassen versuchen.

Antworten (2)

Die meisten Kommentare konzentrieren sich auf das häufigere Problem des Entfernens/Ignorierens des Rauschens, damit der andere Ton extrahiert werden kann. Sie möchten das Gegenteil tun: Luftblasgeräusche erkennen und alle anderen Geräusche zurückweisen.

Erstens wird Ihre Nulldurchgangsmethode dafür nicht sehr nützlich sein. Air-Blow ist in der Signalform nahe an rosa Rauschen, mit einer gewissen "Tönung" des Spektrums, abhängig von der Position des Gebläses, der Position des Mikrofons, der Herstellung des Telefons usw.

Da Sie sagen, dass Sie bereits FFT haben, würde ich wiederholte Frames von etwa 50 ms ausführen und nach der Signatur suchen, in das Mikrofon zu blasen. Es wird wahrscheinlich eine sehr breite Spektrumsverteilung ohne scharfe Spitzen sein. Außerdem wird es eine Dauer haben, die größer ist als ein einzelnes Bild.

Andere Signale haben oft deutlichere Spitzen innerhalb des Spektrums. Auf diese Weise können Sie berechnen, wie gut das erhaltene Spektrum im Vergleich zu einer breiten, rosa Rauschen-ähnlichen Verteilung ist. Beachten Sie, dass die Ausgabe der FFT die Frequenzbins nicht in aufsteigender Reihenfolge hält, sondern in der "Schmetterlings" -Reihenfolge, und jeder andere Datenwert aus der FFT eher Phase als Amplitude ist und daher für diese Analyse nicht interessant ist.

Wenn Sie sowohl ein „Schlag“-Geräusch als auch ein „Hintergrund“-Geräusch hören, haben Sie ein „Grundrauschen“ des Schlaggeräuschs und einzelne Spitzen von den anderen Geräuschen. Sie müssen die Spitzen entfernen und das Blasgeräusch auf der Grundlage eines beliebigen Profils erkennen, das Sie Ihrem Spektrum "unterlegen" können, und trotzdem das Blasgeräusch anpassen. Es gibt verschiedene Kurvenanpassungs-/Regressionsfunktionen, die Sie hier verwenden können.

Letztendlich denke ich, dass Sie mit diesem Ansatz immer noch Probleme haben werden, da verschiedene Telefone unterschiedliche Klangeigenschaften haben. Möglicherweise müssen Sie die Anwendung auf dem jeweiligen Telefon, das der Benutzer verwendet, „trainieren“, um das beste Ergebnis zu erzielen.

Nun, du hast Recht, ich muss es definitiv andersherum wissen. Aber indem ich meine Frage hier gepostet habe, habe ich ziemlich viele Informationen und Ideen bekommen. Sich auf ein einzelnes Gerät zu konzentrieren, ist in Android wirklich schwierig. Es gibt mehrere Anbieter und eine große Auswahl an Geräten, auf denen Android läuft. Ich kann es nur auf mehreren Geräten testen und das Beste hoffen. Aber es ist eine gute Idee, die Sie gegeben haben, und ich werde eine Funktion suchen und implementieren, um das "Grundrauschen" zu berechnen. Wenn es mir gelingt, lasse ich es alle hier wissen.

Dies ist eher ein guter Ratschlag, aber es gibt einige Hinweise, also seien Sie geduldig.

Ich werde dies vom Standpunkt eines Sängers (der ich angeblich bin) angreifen. Phrasen, die mit P, B und T beginnen (wobei zum Beispiel P am schlechtesten ist), senden einen Luftstoß aus dem Mund zum Mikrofon, der einem kurzen Luftblasen ähnelt.

Halten Sie Ihre Hand vor Ihren Mund und sagen Sie POP. Du sollst fühlen, was ich meine.

Warum sage ich das? Eine Standardanforderung für ein Studiomikrofon ist ein POP-Filter, und dies ist eine dünne Gaze, die auf einen Rahmen gespannt ist, der das Auftreffen von Knallgeräuschen auf das Mikrofon weitgehend verhindert. Sie dämpfen keine echte Sprache oder Gesang; Sie stoppen nur den Luftstrom, der auf die Mikrofonmembran trifft und einen Unsinn darüber macht, was Sie aufnehmen möchten.

Bei anderen Mikrofonen sind sie in das schwarze, runde, schaumige Ding eingebettet, in das die Leute hineinsingen. Sie sind nicht so gut, funktionieren aber für Live-Auftritte.

Ich habe also festgestellt, dass normale Sprache in ein Mikrofon Luftstöße enthalten kann, und das macht es für Sie schwieriger, etwas zu entwerfen, das normale Sprache und jemanden, der bläst, unterscheiden kann.

Am Mikrofon eines Android-Telefons befindet sich ein Poppfilter, der Ihre App erschwert. Es sieht aus wie ein kleines rundes schwarzes Stück Material, das das Elektretmikrofon bedeckt.

Was ich sagen kann, ist, dass es definitiv einen niederfrequenten Inhalt (unter 100 Hz) geben wird, wenn jemand in ein Mikrofon bläst, und ich würde empfehlen, Ihren PC, eine Soundkarte und ein Programm zu verwenden, das WAV-Dateien öffnen und bearbeiten kann. Ich benutze Wavelab, aber es gibt einige kostenlose Programme. Nehmen Sie einige "Schläge" auf und analysieren Sie die Ergebnisse. Wenn Sie etwas finden können, das POPs erkennt, interessiert mich, was Sie finden, da mir bekannt ist, dass es keine Hardware- oder Softwarefilter gibt, die dem mechanischen Poppfilter nahe kommen.

Ich habe ein paar ausprobiert und sogar versucht, einige der Filter zu modifizieren, um die Pops zu entfernen. Am Ende habe ich neu aufgenommen oder bin mit einem Messer in die Wave-Datei gegangen und habe die Abschnitte, die knallten, abgeschlachtet, weil Sie sie visuell (in der Wave-Datei) so klar wie den Tag sehen können.

Klingt nach einem Wavelet-Filter, oder vielleicht wäre ein Pattern Matcher ein guter Ansatz für einen Pop-Filter.
ok, das werde ich mal anprobieren. Ich werde die Recherchen dazu am Wochenende durchführen, da ich mit der Entwicklung meiner Anwendung fortfahren muss. Aber ich möchte das wirklich knacken und würde Sie auf jeden Fall wissen lassen, wenn ich eine Methode zum Erkennen von POP herausfinde.