Ich berechne die FFT aus dem Mikrofoneingang. Ich bemerke, dass niedrigere Frequenzen immer mehr Leistung (höhere dB) als höhere Frequenzen zu haben scheinen.
- Ich schneide die Daten in Frames von 24576 Bytes (4096 * 6).
- Hamming-Fenster anwenden:
input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/fs));
- Führen Sie es durch FFTW
Process1D()
. - Konvertieren von komplexen Zahlen:
output[i] = 10.0 * Math.Log10((fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1]));
- Aus 6 Werten einen Durchschnitt bilden, um eine vollständige FFT von 4096 Bytes zu erhalten.
- Malen Sie ein hübsches Bild (Farben, die einer Palette zugeordnet sind).
Die Mittelung (Punkt 5) wird durchgeführt, um das FFT-Rauschen zu verringern.
Da das Bild sowohl bei Ton als auch bei ausgeschaltetem Mikrofon angezeigt wird, ist in den niedrigeren Frequenzen mehr Energie (und mehr Rauschen) vorhanden. Dies deutet darauf hin, dass es sich nicht nur um ein Mikrofon- / Subproblem handelt.
Meine Fragen:
1. Wird das erwartet? Warum?
2. Irgendeine Standardmethode, um dies zu beheben? Sieht fast so aus, als ob ein bisschen Math.Tan () -Magie es dort anheben könnte, wo es hingehört.
Mein Ziel ist es, die Top 5 Frequenzen zu identifizieren, ohne dass die unteren Frequenzen standardmäßig gewinnen.
Antworten:
Ja, das wird sehr erwartet. Was Sie sehen, ist ein " rosa " Spektrum, dh konstante Energie pro relativer Bandbreite im Vergleich zu " weiß ", was konstante Energie pro absoluter Bandbreite ist. Bei rosa Signalen ist die Energie zwischen 1 und 2 kHz dieselbe wie bei 2 bis 4 kHz (jede repräsentiert eine Verdoppelung der Bandbreite oder eine "Oktave").
Die meisten natürlichen Audiosignale (Sprache, Musik, Filme usw.) haben ein pinkfarbenes Spektrum. Auch die meisten akustischen Hintergrundgeräusche (Mikrofongeräusche, HLK-Geräusche, Luftdruckschwankungen, allgemeine Hintergrundgeräusche) neigen dazu, rosa zu sein oder zu niedrigeren Frequenzen zu tendieren.
Auch das menschliche Hörsystem funktioniert so. Im Innenohr werden die Audiosignale in Bänder mit konstanter relativer Bandbreite (als "kritische Bänder" bezeichnet) zerlegt, die in etwa dem Spektrum einer dritten Oktave entsprechen.
Die beste Möglichkeit, Audiospektrumdaten anzuzeigen, besteht darin, sie auf einer logarithmischen Frequenzskala zu zeichnen.
quelle
In Schritt 2 sollte die Formel lauten
input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/N));
, woN
in Ihrem Fall die Anzahl der Proben im Puffer ist24576
.In den Schritten 4 und 5 würde ich die bin-weise Mittelung der quadrierten Größenwerte durchführen, nicht der dB-Werte. Angenommen, Sie haben die quadratischen Größen
[4,6]
. Ihre durchschnittliche ist5
,10*log10(5) ~= 6.99
. Der Durchschnitt von10*log10(4)
und10*log10(6)
ist6.90
.Das erste Problem könnte die Ursache der Vorspannung in Richtung niedriger Frequenzen sein, da dies zu spektralen Leckströmen führt und die niedrigen Frequenzen mehr Verschmutzung von der Gleichstromleitung erhalten (was unvermeidlich eine schlechte Schätzung ist). Das zweite Problem wird sich wahrscheinlich nicht auf die tiefen Frequenzen auswirken, aber ich denke, es kommt der Absicht Ihrer Messung näher.
quelle
fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1]
1 / f-Lärm tritt in vielen physikalischen, biologischen und wirtschaftlichen Systemen auf. Einige Forscher beschreiben es als allgegenwärtig.
Rosa Rauschen (links) und weißes Rauschen (rechts) in einem FFT-Spektrogramm mit linearer vertikaler Frequenzachse (in einem typischen Audio- oder ähnlichen Spektrumanalysator wäre das rosa Rauschen flach, nicht abfallend, und das weiße Rauschen steigt an)
quelle
Viele natürliche Klänge haben Harmonische , daher gibt es niedrigere Grundfrequenzen und dann weniger Energie in höheren Vielfachen der Grundfrequenz. Möglicherweise liegt eine Gleichstromvorspannung vor, die ganz links viel Energie bedeuten würde. Ein weiterer Einfluss ist Ihre Fensterfunktion , die den Frequenzgang verzerrt.
Sie können mit der Gleichstromvorspannung umgehen, indem Sie einen Hochpassfilter verwenden. Eine einfache Implementierung besteht darin, den Langzeitdurchschnitt von jedem Sample zu subtrahieren (EDIT: oder noch einfacher, die niedrigeren Frequenzen, z. B. <50 Hz, von Ihrem FFT-Ergebnis zu verwerfen). Sie können auch mit verschiedenen Fensterfunktionen experimentieren. Stellen Sie sicher (wie @mtrw darauf hinweist), dass Sie das Fenster richtig anwenden. Alle anderen Nichtlinearitäten in der Antwort können korrigiert werden, indem eine ideale Eingabe gemessen und auf diese Kurve normiert wird.
quelle