Normalização de áudio

8

Tenho uma gravação no formato pcm e quero fazer algumas análises simples.

Eu tenho algumas perguntas sobre o que é normalização. Até onde eu entendo, é obter todas as amplitudes entre um intervalo, ou seja, [-1, 1]

A maneira óbvia de fazer isso é:

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

Eu li sobre a normalização do RMS. Alguém pode explicar como isso é feito?

Além disso, você poderia explicar qual é o benefício da normalização?

gosom
fonte

Respostas:

9

Seu código de normalização está incorreto. Se o sinal de entrada apresentar uma grande queda (digamos um valor negativo em -5,0), seu código não o detectará e você ainda terá valores fora de [-1, 1]. Use max (abs (array_of_amplitudes)) em vez disso. Antes da normalização, também é recomendável remover qualquer deslocamento DC que o sinal possa ter.

A normalização do RMS consiste em calcular o nível do RMS (raiz quadrada média) em janelas de curto prazo, obtendo o máximo desses valores e dividindo o sinal pelo máximo. Isso não garante que o resultado esteja dentro de [-1, 1] - você terá que cortar valores fora disso. O benefício é que é mais robusto para discrepantes no sinal. Digamos que você tenha uma gravação relativamente silenciosa, com apenas um pico curto em 1,0 em algum lugar devido a uma falha no driver da placa de som ou um "pop" temporário no microfone. A normalização não afetará o nível do sinal (já está normalizado, já que o máximo é 1,0); enquanto a normalização do RMS ainda aumentará seu nível (e o "pop" causará recorte).

Em relação às aplicações:

  • Na gravação / reprodução de áudio, a normalização é importante porque garante que toda a faixa dinâmica dos conversores de saída seja usada. Se você reproduzir um sinal atingindo um pico de 0,25 a um DAC de 16 bits, não estará usando os 2 bits superiores do seu conversor (que sempre será 0) e, assim, aumentará o ruído de quantização em 12dB.
  • Em algumas tarefas de classificação de áudio (como reconhecimento de emoções; classificação de gênero musical ou mesmo reconhecimento de fala), a amplitude / intensidade pode ser usada como um recurso. Portanto, você realmente deseja que todos os arquivos de entrada sejam similarmente "calibrados" em termos de nível.
pichenettes
fonte
+1. Outros benefícios são evitar transbordamento (não muito comum com ponto flutuante, mas pode acontecer) e análise (você sabe exatamente quão forte é um 0,8 normalizado, enquanto quem sabe quão forte / fraco é um 1082 não normalizado?).
11133 Jim Clay