2015-09-01 14 views
5

Ich verwende die nAudio Library, um Mikrofoneingaben zu erfassen. Aber ich bin auf ein Problem gestoßen. Ich verwende den Code (den ich leicht modifiziert habe) aus einer nAudio-Beispiel-App. Der Code generiert eine WAV-Datei basierend auf der Mikrofoneingabe und rendert sie als Wave. Hier ist der Code dafür.C# - Mikrofonrauscherkennung

Unten ist ein kleiner Brocken aus einem Ergebnis einer 2 Sekunden WAV-Datei mit keinem Ton, sondern nur Mikrofonrauschen.

-54,089102453893 in dB
-51,9171950072361 in dB
-53,3478098666891 in dB
-53,1845794096928 in dB
-53,8851764055102 in dB
-57,5541358628342 in dB
-54,0121140454216 in dB
-55,5204248291508 in dB
-54.9in dB
-53,6831017096011 in dB
-52,8728852678309 in dB
-55.7021600863786 in dB

Wie wir sehen können, schwebt die dB-Ebene um -55, wenn es keinen Eingangston gibt, nur Stille. Wenn ich "Hello" im Mikrofon in einem normalen Ton aufzeichne, wird der dB-Wert auf -20 oder so gehen. Ich habe irgendwo gelesen, dass durchschnittliche menschliche Gespräche um 20 dB und -3 dB bis -6 dB der ZERO-Wertebereich für Mikrofon sind.

Frage: Berechne ich den dB-Wert korrekt? (Ich habe eine Formel verwendet, die hier von jemand anderem vorgeschlagen wurde) ... Warum dB immer negativ wird? Fehle ich ein entscheidendes Konzept oder einen Mechanismus?

Ich suchte nAudio Dokumentation bei Codeplex und fand keine Antwort. In meiner Beobachtung, die Dokumentation gibt es mehr erläutern als nur eine Reihe von Q & A [nichts für ungut nAudio :)]

Antwort

3

Wenn ich die Formel richtig verstanden, ist der tatsächliche Wert, den Sie berechnen, dBm, und das ist absolut in Ordnung, da dB nur eine Einheit zur Messung der Verstärkung ist und nicht zur Messung der Signalstärke/Amplitude verwendet werden kann (dh Sie können sagen, dass ich das Signal um 3 db verstärkt habe, aber nicht sagen kann, dass meine Signalstärke 6 dB ist).

Die negativen Werte sind nur wegen des logarithmischen Umwandlungsteils der Formel (Umwandeln von Watt/Milliwatt in dB) und da die Signale, mit denen Sie zu tun haben, relativ schwach sind.

Also zum Schluss, sieht aus, als ob Sie alles richtig gemacht haben. Hoffe es hilft.

EDIT: BTW, wie man sehen kann, gibt es wirklich ~ 23-25dbm Unterschied zwischen Stille und die menschliche Sprache

+2

https://en.wikipedia.org/wiki/DBFS –

+0

Dank für die schnelle Antwort. @Felix Av, mein Auftrag sagt, dass, wenn mic noise <10db, eine "low noise" Nachricht anzeigen, und wenn höher als 10db, "high noise" Nachricht anzeigen. nur eine dumme Frage, ist der Aufgabenbereich aus einer menschlichen Perspektive gegeben ??? .... da ich alle Werte negativ aus meinem Programm (mic's Perspektive) bekomme, wie sollte ich die beiden dB-Bereiche, dh mein Programm korrelieren Generieren Bereich und Zuordnung Bereich? ... Vielen Dank – imran2155

+0

Ich denke, wenn die Stille ist X (sagen wir, Mikrofon nicht angeschlossen und das Signal ist -80db, sollten Sie wahrscheinlich überprüfen Sie den Pegel), dann ist low noise alles < X + 10, hohes Rauschen> X + 10. –