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.