Normalisasi audio

8

Saya memiliki rekaman dalam format PCM dan saya ingin melakukan beberapa analisis sederhana.

Saya punya beberapa pertanyaan tentang apa itu normalisasi. Sejauh yang saya pahami adalah untuk mendapatkan semua amplitudo antara rentang yaitu [-1, 1]

Cara yang jelas untuk melakukan itu adalah:

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

Saya membaca tentang normalisasi RMS. Adakah yang bisa menjelaskan bagaimana ini dilakukan?

Selain itu, bisakah Anda menjelaskan apa manfaat normalisasi?

gosom
sumber

Jawaban:

9

Kode normalisasi Anda salah. Jika sinyal input memiliki penurunan besar (misalkan nilai negatif pada -5,0), kode Anda tidak akan mendeteksinya, dan Anda masih memiliki nilai di luar [-1, 1]. Gunakan maks (abs (array_of_amplitudes)) sebagai gantinya. Sebelum normalisasi, disarankan untuk menghapus DC offset yang mungkin dimiliki sinyal.

Normalisasi RMS terdiri dalam menghitung tingkat RMS (root-mean-square) di atas jendela jangka pendek, mengambil nilai-nilai maksimum, dan membagi sinyal dengan maksimum. Ini tidak akan menjamin bahwa hasilnya akan berada dalam [-1, 1] - Anda harus menjepret nilai di luar ini. Manfaatnya adalah lebih kuat untuk pencilan sinyal. Katakanlah Anda memiliki rekaman yang relatif tenang, dengan hanya puncak pendek di 1,0 di suatu tempat karena kesalahan driver kartu suara atau "pop" sementara pada mikrofon. Normalisasi tidak akan mempengaruhi level sinyal (sudah dinormalisasi karena maksimum adalah 1,0); sedangkan normalisasi RMS masih akan meningkatkan levelnya (dan "pop" akan menyebabkan kliping).

Mengenai aplikasi:

  • Dalam perekaman / reproduksi audio, normalisasi penting karena memastikan bahwa rentang dinamis penuh dari konverter output digunakan. Jika Anda memainkan sinyal memuncak pada 0,25 hingga 16-bit DAC Anda tidak menggunakan 2 bit atas konverter Anda (yang akan selalu menjadi 0) dan dengan demikian meningkatkan kebisingan kuantisasi Anda sebesar 12dB.
  • Dalam beberapa tugas klasifikasi audio (seperti pengenalan emosi; klasifikasi genre musik; atau bahkan pengenalan suara), amplitudo / kenyaringan mungkin digunakan sebagai fitur. Dengan demikian, Anda benar-benar ingin semua file input sama "dikalibrasi" dalam hal level.
pichenettes
sumber
+1. Manfaat lainnya adalah menghindari overflow (tidak terlalu umum dengan floating point, tetapi bisa terjadi), dan analisis (Anda tahu persis seberapa "kuat" 0,8 yang dinormalisasi, sedangkan siapa yang tahu seberapa kuat / lemah 1082 yang tidak dinormalkan?).
Jim Clay