Normalisation audio

8

J'ai un enregistrement au format pcm et je veux faire une analyse simple.

J'ai quelques questions sur ce qu'est la normalisation. Pour autant que je sache, il s'agit d'obtenir toutes les amplitudes entre une plage, c'est-à-dire [-1, 1]

La façon évidente de le faire est:

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

J'ai lu sur la normalisation RMS. Quelqu'un peut-il expliquer comment cela se fait?

De plus, pourriez-vous expliquer quels sont les avantages de la normalisation?

gosom
la source

Réponses:

9

Votre code de normalisation est incorrect. Si le signal d'entrée a un grand creux (disons une valeur négative à -5,0), votre code ne le détectera pas et vous aurez toujours des valeurs en dehors de [-1, 1]. Utilisez plutôt max (abs (array_of_amplitudes)). Avant la normalisation, il est également recommandé de supprimer tout décalage CC que le signal pourrait avoir.

La normalisation RMS consiste à calculer le niveau RMS (root-mean-square) sur des fenêtres à court terme, en prenant le maximum de ces valeurs et en divisant le signal par le maximum. Cela ne garantit pas que le résultat se situera entre [-1, 1] - vous devrez découper les valeurs en dehors de cela. L'avantage est qu'il est plus robuste aux valeurs aberrantes du signal. Disons que vous avez un enregistrement relativement silencieux, avec juste un petit pic à 1,0 quelque part en raison d'un problème de pilote de carte son ou d'un "pop" temporaire sur le microphone. La normalisation n'affectera pas le niveau du signal (elle est déjà normalisée puisque le maximum est 1,0); tandis que la normalisation RMS augmentera toujours son niveau (et le "pop" provoquera un écrêtage).

Concernant les applications:

  • Dans l'enregistrement / la reproduction audio, la normalisation est importante car elle garantit que la plage dynamique complète des convertisseurs de sortie est utilisée. Si vous jouez un signal culminant à 0,25 via un DAC 16 bits, vous n'utilisez pas les 2 bits supérieurs de votre convertisseur (qui seront toujours 0) et augmentez ainsi votre bruit de quantification de 12 dB.
  • Dans certaines tâches de classification audio (telles que la reconnaissance des émotions, la classification des genres musicaux ou même la reconnaissance vocale), l'amplitude / l'intensité sonore peut être utilisée comme fonctionnalité. Ainsi, vous voulez vraiment que tous les fichiers d'entrée soient "calibrés" de la même manière en termes de niveau.
pichenettes
la source
+1. Les autres avantages sont d'éviter le débordement (pas trop fréquent avec la virgule flottante, mais cela peut arriver) et l'analyse (vous savez exactement à quel point un 0,8 normalisé est "fort", alors qui sait à quel point un 1082 non normalisé est fort / faible?).
Jim Clay