Audio-Normalisierung

8

Ich habe eine Aufnahme im PCM-Format und möchte eine einfache Analyse durchführen.

Ich habe einige Fragen zu Normalisierung. Soweit ich weiß, ist es, alle Amplituden zwischen einem Bereich zu erhalten, dh [-1, 1]

Der offensichtliche Weg, dies zu tun, ist:

max_amplitude = max(array_of_amplitudes)
for amplitude in array_of_amplitudes:
   amplitude = amplitude / max_amplitude

Ich habe über RMS-Normalisierung gelesen. Kann jemand erklären, wie es gemacht wird?

Könnten Sie bitte erklären, was der Vorteil der Normalisierung ist?

gosom
quelle

Antworten:

9

Ihr Normalisierungscode ist falsch. Wenn das Eingangssignal einen starken Abfall aufweist (z. B. einen negativen Wert bei -5,0), erkennt Ihr Code dies nicht und Sie haben weiterhin Werte außerhalb von [-1, 1]. Verwenden Sie stattdessen max (abs (array_of_amplitudes)). Vor der Normalisierung wird außerdem empfohlen, den DC-Offset des Signals zu entfernen.

Die RMS-Normalisierung besteht darin, den RMS-Pegel (Root-Mean-Square) über Kurzzeitfenster zu berechnen, das Maximum dieser Werte zu nehmen und das Signal durch das Maximum zu dividieren. Dies garantiert nicht, dass das Ergebnis innerhalb von [-1, 1] liegt - Sie müssen Werte außerhalb davon abschneiden. Der Vorteil ist, dass es gegenüber Ausreißern im Signal robuster ist. Angenommen, Sie haben eine relativ leise Aufnahme mit einem kurzen Spitzenwert von 1,0 irgendwo aufgrund eines Fehlers im Soundkartentreiber oder eines vorübergehenden "Knallens" am Mikrofon. Die Normalisierung hat keinen Einfluss auf den Signalpegel (sie ist bereits normalisiert, da das Maximum 1,0 beträgt). während die RMS-Normalisierung den Pegel weiterhin erhöht (und das "Pop" ein Abschneiden verursacht).

In Bezug auf Anwendungen:

  • Bei der Audioaufnahme / -wiedergabe ist die Normalisierung wichtig, da dadurch sichergestellt wird, dass der gesamte Dynamikbereich der Ausgangskonverter genutzt wird. Wenn Sie ein Signal mit einer Spitze von 0,25 über einen 16-Bit-DAC abspielen, verwenden Sie nicht die 2 oberen Bits Ihres Konverters (die immer 0 sind) und erhöhen so Ihr Quantisierungsrauschen um 12 dB.
  • Bei einigen Audioklassifizierungsaufgaben (wie der Erkennung von Emotionen, der Klassifizierung von Musikgenres oder sogar der Spracherkennung) kann Amplitude / Lautstärke als Merkmal verwendet werden. Sie möchten also wirklich, dass alle Eingabedateien in Bezug auf den Pegel ähnlich "kalibriert" werden.
Pichenettes
quelle
+1. Weitere Vorteile sind die Vermeidung eines Überlaufs (nicht allzu häufig bei Gleitkommazahlen, kann aber vorkommen) und die Analyse (Sie wissen genau, wie "stark" eine normalisierte 0,8 ist, während wer weiß, wie stark / schwach eine nicht normalisierte 1082 ist?).
Jim Clay