オーディオの正規化


8

pcm形式のレコーディングがあり、簡単な分析を行いたい。

正規化とは何かについていくつか質問があります。これまでのところ、範囲[1、1]の間のすべての振幅を取得することは理解しています。

これを行う明白な方法は次のとおりです。

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

RMSの正規化について読みました。誰かがそれがどのように行われるか説明できますか?

さらに、正規化の利点は何ですか?

回答:


9

正規化コードが正しくありません。入力信号に大きなディップがある(たとえば、-5.0で負の値を示す)場合、コードはそれを検出せず、[-1、1]以外の値が残ります。代わりにmax(abs(array_of_amplitudes))を使用してください。正規化の前に、信号のDCオフセットを削除することもお勧めします。

RMS正規化は、短期ウィンドウでRMS(二乗平均)レベルを計算し、それらの値の最大値を取り、信号を最大値で割ることで構成されます。これは、結果が[-1、1]内にあることを保証するものではありません。これ以外の値をクリップする必要があります。利点は、信号の外れ値に対してより堅牢であることです。録音が比較的静かで、サウンドカードドライバーの不具合またはマイクの一時的な「ポップ」が原因で、1.0の短いピークがどこかにあるとします。正規化は信号のレベルには影響しません(最大値は1.0であるため、既に正規化されています)。一方、RMS正規化はそのレベルを押し上げます(「ポップ」はクリッピングの原因になります)。

アプリケーションについて:

  • オーディオの録音/再生では、出力コンバーターのフルダイナミックレンジが確実に使用されるため、正規化は重要です。16ビットDACを介して0.25でピークの信号を再生する場合、コンバーターの上位2ビット(これは常に0になります)を利用していないため、量子化ノイズが12dB増加します。
  • 一部のオーディオ分類タスク(感情認識、音楽ジャンル分類、または音声認識など)では、振幅/音量が機能として使用される場合があります。したがって、すべての入力ファイルをレベルに関して同様に「調整」する必要があります。

+1。他の利点は、オーバーフローの回避(浮動小数点ではあまり一般的ではありませんが、発生する可能性があります)、および分析(正規化された0.8がどの程度「強い」か、正規化されていない1082がどれほど強い/弱いかを誰が知っているか)です。
Jim Clay
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.