2017-11-01 6 views
5

Erstes Posting, danke für die tolle Community!AudioKit FFT-Konvertierung in dB?

Ich benutze AudioKit und versuche, Frequenzgewichtung Filter an den Mikrofoneingang hinzufügen, und so versuche ich zu verstehen, die Werte, die aus der AudioKit AKFFTTap kommen.

Derzeit versuche ich nur den FFT-Puffer in dB umgewandelt drucken Werten

for i in 0..<self.bufferSize { 
    let db = 20 * log10((self.fft?.fftData[Int(i)])!) 
    print(db) 
} 

ich Werte im Bereich im Bereich von etwa -128 bis 0 erwartet, aber ich bin immer seltsame Werte von fast -200dB und wenn ich auf das Mikrophon blase, um die Messwerte zu hören, erreicht es nur ungefähr -60. Komme ich das nicht richtig an? Ich ging davon aus, dass die von der EZAudioFFT-Engine ausgegebenen Werte reine Amplitudenwerte wären und dass die normale dB-Umrechnungsmathematik funktionieren würde. Hat jemand Ideen?

Vielen Dank im Voraus für eine Diskussion zu diesem Thema!

Antwort

2

Sie müssen alle Werte von self.fft?.fftData (berücksichtigen ändernden negativen Werten positiven vor der Zugabe) addieren und dann die

+0

Ich habe Ihre Idee der Summierung der absoluten Werte in 'self.fft? .fftData' versucht und ich bekomme definitiv ein vernünftigeres Ergebnis, jedoch sind die Ergebnisse immer noch viel zu empfindlich. Um dies zu testen, füge ich einen Offset-Wert hinzu, um die Messwerte zu einem dedizierten SPL-Meter zu bekommen, den ich hier an meinem Schreibtisch habe. Und wenn ich spreche, pfeife, blase oder rosa Rauschen erzeuge und Ergebnisse vergleiche, springt meine App 40 dB +, während das SPL-Meter nur um 7-10 dB ansteigt. Ich habe mit einigen iOS-Apps verglichen, um dB-Messwerte anzuzeigen, und sie scheinen ähnliche Ergebnisse mit dem SPL-Meter zu erzielen. Irgendwelche Ideen, warum das so viel sensibler wäre? –

+0

Wie viele Proben verwenden Sie für eine Berechnung? voller Puffer? Ich benutzte Standard-Tap, ich habe keine Erfahrung mit AKFFTTap, also vielleicht fehlt mir etwas –

3

Die Werte im Array Dezibel ändern, um die Werte des Bins in der FFT entsprechen. Wenn ein einzelner Behälter einen Größenwert nahe bei 1 enthält, würde dies bedeuten, dass eine große Energiemenge in diesem engen Frequenzband liegt, z. eine sehr laute Sinuswelle (ein Signal mit einer einzigen Frequenz).

Normale Geräusche, wie die, die durch das Mikrofon verursacht werden, verteilen ihre Energie über das gesamte Spektrum, dh in vielen Bins statt nur in einem. Aus diesem Grund werden die Größen normalerweise niedriger, wenn die FFT-Größe zunimmt.

Die Größe von -40 dB auf einem einzelnen Fach ist ziemlich laut. Wenn Sie versuchen, einen Ton zu spielen, sollten Sie einen klaren Peak in einem der Bins sehen.

+0

In AudioKit sind die bin-Werte nicht in einer Skala von 0-1 sie sind Größen, die Werte von Null bis zu 700-1000 enthalten können . Wenn ich das auf eine Skala von 0-1 bringen könnte, würde das sehr helfen, aber ich sehe nicht, wie das ohne einen eindeutigen Maximalwert als Referenz gemacht wird. Ich habe am Mikrofon geblasen, um diese Referenz zu erhalten, aber es gab niemals ein beständiges oberes Ende der vom fft erzeugten Größen. –

+0

Ihre Frage vermittelt den Eindruck, dass die Werte im Bereich 0..1 liegen, nur näher bei 0 als erwartet. –