2010-11-24 9 views
2

Ich habe schon seit einiger Zeit gesucht, und ich war nicht in der Lage, einen Weg zu finden, um tatsächlich einen SPL/Db-Wert von einem Mikrofon auf Android zu bekommen. Die wenigen Threads und Artikel, die ich gefunden habe und die es besprochen haben, behandelten es als etwas so Offensichtliches, dass es irgendjemandem möglich sein sollte, und waren mehr daran interessiert, ihre Konvertierungsalgorithmen richtig zu machen. Weiß jemand, wie man das macht?Dezibel von einem Android-Mikrofon bekommen

+0

Whoa ich hatte nur auf eine API und eine Nummer gehofft. Müssen Sie wirklich aufnehmen, um die Informationen zu bekommen? Ich hatte gehofft, nur zuzuhören. –

+0

Soweit ich das durchforscht habe, tun Sie das ja. Die Samples können sehr kurz sein, wie z. B. ein paar Millisekunden, aber es muss ein Sample sein. Sie können die Datei jedoch löschen, sobald Sie Ihre Berechnung durchgeführt haben. Ich mag mich irren, und vielleicht gibt es einen anderen Weg, es zu tun, den ich noch nicht gelernt habe, aber ich habe noch nichts darüber gelesen. – Brandon

+0

Ja, ich sah mich nur um und hoffte, es wäre einfach. Ich im Wesentlichen, was nur zu hören und einen Sound basierend auf der Lautstärke des Sounds um ihn herum zu spielen. – Nicholas

Antwort

5

Sie müssten zuerst eine automatische Niveauregelung deaktivieren. Ich nehme an, Sie wissen entweder oder wissen, wo Sie suchen müssen, um herauszufinden, wie Sie Samples vom Mikrofon ohne ALC aufnehmen können.

Von da an geht es hauptsächlich um die Kalibrierung und Logarithmus. Im Wesentlichen multiplizieren oder falten Sie sich mit einer frequenzabhängigen Kalibrierung und nehmen dann 10 * die logarithmische Größe über den ganzen oder einen Teil des Frequenzbereichs.

Dann müssten Sie einige Kalibrierungsmessungen durchführen, zum Beispiel Frequenzwobbeln einer Laborquelle von kontrolliertem, bekanntem spl und Aufzeichnen der resultierenden Amplitude vs Frequenz (was, wenn Sie langsam wischen, ist im Wesentlichen das gleiche wie Amplitude vs. Zeit) oder Sie würden es mit einem Breitband-Pseudoimpuls (wie einem elektrischen Funken, einer Startpistole, was auch immer) treffen, den Sie auch mit guter Laborausrüstung in einer strahlungssymmetrischen Position über die Frequenz messen, oder als letzten Ausweg ein bekanntes verwenden physikalische Eigenschaft der Quelle, um die SPL zu schätzen und nur zu hoffen, dass es über Frequenzen von Interesse flach genug ist.

Sie haben dann zwei Möglichkeiten, wie Sie die Korrektur anwenden können.

Eine Option besteht darin, die Übertragungsfunktion zu invertieren, die Impulsantwort im Zeitbereich zu berechnen und diese dann als digitales Filter zu verwenden, indem sie mit einem Eingangssignal gefaltet wird, um eine Frequenzflachheitskorrektur anzuwenden. Sie können dann die logarithmische Größe des Ergebnisses pro Zeiteinheit bestimmen, um den Breitband-Spl zu bestimmen.

Oder Sie können eine FFT auf die Eingabedaten tun, um ein Frequenzspektrum zu erzeugen, und multiplizieren Sie das mit der Umkehrung Ihrer Frequenzantwort, und nehmen Sie die Log-Größe von was auch immer (Summe von) bin interessant ist.

Leider gibt es wenig Grund, mehr als grobe Konsistenz von Gerät zu Gerät, sogar des gleichen Modells, anzunehmen.

+0

Danke dafür! Leider fand ich nach all dieser Arbeit heraus, dass ich nicht einmal den tatsächlichen Dezibelwert bekommen musste. Das ist Programmieren für dich, denke ich. Danke trotzdem! – Brandon

+0

Sie sind sehr richtig bei dieser letzten Aussage, die Sie getroffen haben. Meine App ist jetzt "fertig" und ich habe es auf einigen verschiedenen Geräten getestet, und die Messwerte, die sie zurückgeben, können Werte haben, die denen anderer Geräte um das Zehnfache entsprechen. Daher musste ich eine Kalibrierungsfunktion einbauen, die Werte der relativen Stille mit unserer Grundlinie für Stille vergleicht. Danke für die Aufnahme! – Brandon

9

Während ich an anderen verwandten Apps arbeitete und Recherchen anstellte, bin ich auf einige Informationen gestoßen, die für jeden nützlich sein könnten, der sich mit so etwas beschäftigt. Sie sehen, das Mikrofon auf einem Android-Telefon gibt einen Wert zwischen 0 und + 32.400 zurück. In den meisten Fällen ist alles, was über 2.000 ist, wirklich laut, wie ein Konzert, ein Club oder mechanischer Lärm. "Relative Silence" ist etwa 30. Die Bedeutungen dieser Werte sind jedoch relativ und unterscheiden sich von Telefon zu Telefon. Mehrere Geräte, die direkt nebeneinander sitzen, geben aufgrund der Mikrofone unterschiedliche Werte zurück. Die Werte können ein wenig abweichen, oder eine Menge. Ich habe gerade mehrere Android-Handys in meinem Büro getestet, ich habe festgestellt, dass einige Geräte Werte 10X von anderen Geräten in der gleichen Situation zurückgeben würde. Aus diesem Grund gab es niemanden, der gerade gesagt hat "Ja, du kannst den Dezibelwert bekommen, hier ist ein Beispielcode:" weil es NICHT wirklich einen zuverlässigen (und einfachen) Weg gibt, es realistisch zu machen. Wenn Sie es auf ein Gerät hochladen, könnten Sie sagen, 30 dB, aber ein anderes würde 300 dB zurückgeben. Natürlich würde kein Mensch mit 300 dB ohne MASSIVE Gehörschutz in einer Umgebung sein. Die Werte müssen als relative Werte genommen werden; wie sie zueinander stehen. "Kalibrierung", ob dynamisch oder nicht, ist ein Muss, wenn Sie Werte erhalten möchten, die Sie verwenden können. Es muss eine festgelegte Basislinie geben, die nicht von Ihnen kommen kann, die mit einem Wert von Ihnen verglichen werden muss. Zum Beispiel sollte relative Stille, wie zuvor erwähnt, etwa 30 sein.Wenn das Telefon in einer Umgebung mit relativer Stille 456 zurückgibt, teilen Sie einfach Ihre (30) durch ihre (456) und Sie haben einen Faktor, der dazu dient, die vom Telefon zurückgegebenen Werte so anzupassen, dass sie dem entsprechen, was Sie erwarten und diese Werte können für ein gewisses Maß an Zuverlässigkeit verwendet werden.

Dies ist genau das, was ich in den letzten Monaten gefunden habe, ich hoffe es hilft jemandem.

+0

Hallo, deine Arbeit hilft mir wirklich. aber ich habe eine Frage. Kalibrieren Sie die berechneten Dezibelwerte oder die kurzen Daten, die von der Lesefunktion erhalten wurden? Grüße – smoothumut

1

Die Open-Source-App NoiseTube unterstützt dies, einschließlich der Unterstützung für die gerätespezifische Kalibrierung. Der Quellcode ist unter https://code.google.com/p/noisetube/ verfügbar. Wenn Sie darauf zugreifen können, empfehle ich dringend, ihren Artikel zu lesen Participatory Noise Mapping funktioniert! Eine Bewertung der partizipativen Wahrnehmung als Alternative zu Standardtechniken für die Umweltüberwachung (available for pay).

Einige Highlights aus der Quelle:

Verwandte Themen