回答:
正規化コードが正しくありません。入力信号に大きなディップがある(たとえば、-5.0で負の値を示す)場合、コードはそれを検出せず、[-1、1]以外の値が残ります。代わりにmax(abs(array_of_amplitudes))を使用してください。正規化の前に、信号のDCオフセットを削除することもお勧めします。
RMS正規化は、短期ウィンドウでRMS(二乗平均)レベルを計算し、それらの値の最大値を取り、信号を最大値で割ることで構成されます。これは、結果が[-1、1]内にあることを保証するものではありません。これ以外の値をクリップする必要があります。利点は、信号の外れ値に対してより堅牢であることです。録音が比較的静かで、サウンドカードドライバーの不具合またはマイクの一時的な「ポップ」が原因で、1.0の短いピークがどこかにあるとします。正規化は信号のレベルには影響しません(最大値は1.0であるため、既に正規化されています)。一方、RMS正規化はそのレベルを押し上げます(「ポップ」はクリッピングの原因になります)。
アプリケーションについて: