2

オーディオ信号の音量を測定したい。

私は2つのオプションを見つけました:

  1. 振幅の二乗平均平方根を計算する
  2. 最大振幅を見つける

#1 または #2 を使用する利点はありますか?

これが私がやろうとしていることです: 私の Android にマイクからのオーディオを分析させたいのです。デバイスに大きなノイズを検出させたい。入力は短い [] です。

4

2 に答える 2

2

最大振幅 (2) を使用すると、ボリューム レベルは 1 つのサンプルによって決定されます (聞こえない場合もあります)。音圧レベルや音響パワーレベルなど、音の大きさの印象と相関する値を計算する場合は、RMS (1) を使用する必要があります。

耳はすべての周波数に等しく敏感ではないため、信号にA 重み付けを使用することで、知覚のより良い相関関係を得ることができます。信号をオクターブ バンドに分割 (フィルター処理) し、各バンドの RMS を計算し、A 重み付けを適用します。

于 2012-01-26T16:31:52.773 に答える
1

音量レベルを確認したい場合は、そのdB値を計算するだけです(信号は正規化されていると思います。つまり、1 ==最大レベルです)。

level[n] = - 20 x log(1/signal[n]); 

ただし、オーディオノイズの検出は簡単な作業ではありません。最も一般的で単純な手法は、NoiseGateと呼ばれるアルゴリズムを使用することです。これは、基本的に信号レベルをいくつかのdBしきい値と比較します。信号レベルがしきい値を超えると、出力はゼロになります。しかし、実際には使用できません。スムーズなしきい値処理には、アタック時間とリリース時間も必要です。そうしないと、実際の信号(音楽、スピーチ)にも影響を与え、ある種のクリッピングが発生します。

Googleをチェックしてください、それはあなたにNoiseGateアルゴリズムとノイズ除去技術についての多くのリソースを与えるでしょう:

http://en.wikipedia.org/wiki/Noise_gate

http://www.developer.com/java/other/article.php/3599661/Adaptive-Noise-Cancellation-using-Java.htm

于 2012-01-26T16:40:04.310 に答える