2012-01-26 6 views
2

私はオーディオ信号の音量を決めたいと思っています。振幅 信号の音量を最適に決めるには?

    1. 計算ルート平均二乗見つける

    は、#1または#2を使用する利点はあります最大振幅:

    私は2つのオプションを発見しましたか?

    私がやろうとしていることは次のとおりです。 マイクからの音声を分析するにはAndroidが必要です。私はデバイスに大きなノイズを検出させたい。入力は短い[]です。

  • +1

    オーディオ信号のどのような?なぜあなたのボリュームが必要ですか? (あなたを困らせるのではなく、私は本当にあなたが知りませんようにあなたの質問に答えることは難しいと信じています) – zrxq

    +0

    私は質問を調整しました。 – gregm

    答えて

    2

    最大振幅(2)を使用すると、音量レベルは1つのサンプル(音が聞こえなくても)によって決まります。 Sound Pressure LevelやSound Power Levelなどのサウンドのラウドネスの印象に相関する値を計算するときは、RMS(1)を使用する必要があります。

    あなたの耳はすべての周波数に対して等しく敏感ではないので、信号のA-weightingを使用することで、あなたの知覚のより良い相関が得られます。オクターブバンドで信号をスプリット(フィルター)し、各バンドのRMSを計算し、Aウェイティングを適用します。あなたは、音量レベルをチェックするだけでそのデシベル値を計算したい場合は

    1

    (I信号は、すなわち1 ==最大レベル正規化されていると仮定):

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

    しかし、オーディオノイズを検出することは簡単な作業ではありません。最も一般的でシンプルな手法は、基本的に信号レベルをdBと比較するNoiseGateというアルゴリズムを使用することです。しきい値 - 信号レベルがしきい値を超えると、出力はゼロになります。しかし実際には使用できません。スムーズなスレッシュホールドのためのアタックタイムとリリースタイムもなければなりません。そうしないと、実際の信号(音楽、スピーチ)にも影響し、何らかのクリッピングが発生します。

    Googleアカウントをチェックし、それはあなたのノイズゲートアルゴリズムとノイズ除去技術に関する多くのリソースを提供します:

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

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

    関連する問題