2009-08-17 10 views
3

Ich versuche, einen qualitativen Überblick über die Menge an Rauschen oder Rauschen in einem Audiostream zu bekommen. Der normale Inhalt des Streams ist Sprache oder Musik.Geräuschpegel messen

Ich habe mit der Einnahme des stddev der Proben experiementing, und dass mir auf dem Vorhandensein von Stimme gegen leeres Kanalrauschen etwas Griff nicht geben (dh. Ein hoher stddev zeigt in der Regel Sprache oder Musik)

Ich fragte mich, ob noch jemand ein paar Hinweise dazu hatte.

Antwort

3

Gibt der Spitzenwert nicht die Antwort? Wenn Sie auf ein Signal von einem guten ADC schauen, sollte der Umgebungslevel in den 1 oder 10 Zählern liegen, während Stimme oder Musik in die Tausende von Zählimpulsen aufsteigen. Gibt es eine Art automatische Verstärkungsregelung, die diese Strategie nicht funktioniert?

Wenn Sie etwas komplexeres benötigen, ist das Verhältnis Spitze zu RMS möglicherweise etwas zuverlässiger als RMS (RMS = stddev). Pures Rauschen wird ein Verhältnis von etwa 3-5 haben, während Sinusoide zum Beispiel ein Verhältnis von Spitze zu RMS von 1,4 haben. Sie können jedoch mehr Diskriminierung erhalten, wenn Sie sich die spectrum des Signals ansehen. Statik ist meist spektral glatt oder eben, während Stimme und Musik spektral strukturiert sind. Eine Fourier-Transformation könnte also das sein, wonach Sie suchen. Unter der Annahme eines Signals x, die, sagen wir 0,5 Sekunden im Wert von Daten enthält, hier einige Matlab-Code:

Sx = fft(x .* hann(length(x), 'periodic')) 

Die HANN Funktion gilt ein Hann-Fenster Spektralleckage zu reduzieren, während die FFT Funktion schnell berechnet die Fourier-Transformation. Jetzt haben Sie ein paar Möglichkeiten. Wenn Sie, ob das Signal x statisch aus, um bestimmen wollen oder Sprach-/Musik, nehmen Sie die Spitze zu RMS-Verhältnis des Spektrums:

pk2rms = max(abs(Sx))/sqrt(sum(abs(Sx).^2)/length(Sx)) 

ich rein erwarten würde statisch eine Spitze zu RMS-Verhältnis zu haben, um 3- 5 (wieder), während Sprache/Musik mindestens eine Größenordnung höher wäre. Dies nutzt die Tatsache aus, dass reines weißes Rauschen die gleiche "Struktur" in Zeit- und Frequenzbereichen aufweist.

Wenn Sie eine numerische Schätzung des Rauschpegels zu erhalten, können Sie die Leistung in Sx im Laufe der Zeit berechnen kann, mit einer durchschnittlichen Verwendung:

Gxx = ((k-1)*Gxx + Sx.*conj(Sx))/k 

Im Laufe der Zeit sollten die Spitzen in Gxx kommen und gehen, aber Sie sollten einen konstanten Mindestwert sehen, der dem Grundrauschen entspricht. Im Allgemeinen sind Audio-Spektren auf einer dB-Skala (logarithmisch vertikal) einfacher zu betrachten.

Einige Anmerkungen:
1. Ich wählte 0,5 Sekunden für die Länge von x, aber ich bin mir nicht sicher, was ein optimaler Wert hier ist. Wenn Sie einen zu kurzen Wert auswählen, hat x keine Struktur. In diesem Fall wird die DC-Komponente des Signals viel Energie haben. Ich erwarte, dass Sie immer noch den Peak-zu-RMS-Diskriminator verwenden können, wenn Sie zuerst das Bin in Sx, das DC entspricht, wegwerfen.
2. Ich bin mir nicht sicher, was ein guter Wert für k ist, aber diese Gleichung entspricht exponential averaging. Sie können wahrscheinlich mit k experimentieren, um einen optimalen Wert herauszufinden. Dies funktioniert am besten mit einem kurzen x.

0

Es gibt verschiedene Arten von Rauschen. Weiß, Rosa, Braun. Lärm kann von vielen Orten kommen. Ist ein 60 Hertz Brummen oder Signal?

Für weißes Rauschen, würde ich auf die fft schauen und den niedrigsten Wert finden, um zu sehen, was Ihr Grundrauschen ist.