2010-11-24 3 views
2

これまでかなりの時間を探していましたが、実際にアンドロイドのマイクからSPL/db値を取得する方法を見つけることができませんでした。私が見つけたいくつかのスレッドや記事では、誰もがそれを行うことができるはずであることは明らかで、変換アルゴリズムを正しく理解することにもっと関心がありました。誰もこれを行う方法を知っていますか?アンドロイドマイクからデシベルを取得する

+0

Whoa APIと番号がほしいと思っていました。あなたは本当に情報を得るために記録する必要がありますか?私はただ聞くことを望んでいた。 –

+0

私がこれを研究して読んだ限り、そうです。サンプルは数ミリ秒のように非常に短くても構いませんが、サンプルが必要です。ただし、計算を完了するとすぐにファイルを削除することができます。私は間違っているかもしれません。私はまだ学んでいない、それを行う他の方法があるかもしれませんが、私はまだそれについて何も読んでいません。 – Brandon

+0

ええ、私はちょうど周りを見て、それが簡単だろうと思っていた。私は本質的に、その周りの音の音量に基づいて音を聞き、再生するだけです。 – Nicholas

答えて

5

まず、自動レベルコントロールを無効にする必要があります。私はあなたがどちらかを知っているか、ALCなしでマイクからサンプルを録音する方法を調べる場所を知っていると思います。

その後、基本的に較正とログの大きさに関するすべてです。本質的には、周波数に依存した較正によって掛け算または畳み込みを行い、周波数範囲の全部または一部に対して10 *ログの大きさを取ることになります。

次に、制御された既知のスプライスのラボソースを周波数掃引し、その結果の振幅と周波数を記録するなど、いくつかの校正測定を行う必要があります(ゆっくりと掃引すれば振幅対時間は本質的に同じです)またはあなたは広範囲の疑似インパルス(電気スパーク、スターターピストルなど)を使用して、放射対称の位置で良好な実験装置で周波数を測定しているか、最後の手段として既知のものを使用しますSPLを推定するためにソースの物理的特性を評価し、それが関心のある周波数にわたって十分に平坦であることを望みます。

次に、補正を適用する方法は2つあります。

1つの選択肢は、伝達関数を反転し、時間領域のインパルス応答を計算し、それを入力信号と畳み込むことによってデジタルフィルタとして使用して周波数平坦性補正を適用することです。その後、単位時間あたりの結果のログの大きさを取って、広帯域スプラインを決定することができます。

入力データに対してFFTを実行して周波数スペクトルを生成し、それに周波数応答の逆数を掛けて、何らかの(合計の)binが興味深いもののログの大きさを取ることができます。

残念ながら、同じモデルであっても、デバイス間での一貫性のある整合性以上を想定する理由はほとんどありません。

+0

ありがとう!残念ながら、私は実際のデシベル値を得る必要はないということを知りました。それは私が推測するあなたのためのプログラミングです。とにかくありがとう! – Brandon

+0

あなたはあなたが最後にした声明に非常に納得しています。私のアプリは現在「完成」しており、いくつかの異なるデバイスでテストしています。返された値は他のデバイスの値の10倍になります。したがって、相対的な無音の値を私たちの無音のベースラインと比較する較正機能を組み込む必要がありました。それを含めてくれてありがとう! – Brandon

9

他の関連するアプリを研究して研究しているうちに、私はこのようなものを探している人には役立つ情報を見つけました。 Android携帯のマイクは、0〜+ 32,400の値を返します。ほとんどの場合、コンサート、クラブ、または機械的なノイズなど、2,000を超えるものは本当に大音量です。 「相対的な沈黙」は約30です。しかし、これらの値の意味は相対的であり、電話と電話では異なるでしょう。互いのすぐ隣に座っているいくつかのデバイスは、その中のマイクのために異なる値を返します。値は多少異なる場合もありますが、多くの場合は異なります。私のオフィスでいくつかの異なるアンドロイド携帯電話をテストするだけで、いくつかのデバイスが同じ状況で他のデバイスの10倍の値を返すことがわかった。これが、「ええ、デシベル値を得ることができます。ここにいくつかのサンプルコードがあります」と言った人はいませんでした。本当に信頼できる(簡単な)方法がないからです。 1つのデバイスにアップロードした場合、たとえば30 dBになりますが、もう1つは300 dBになります。明らかに、耳の保護が大したことなく300dBの環境にいる人間はいません。値は相対値として取られなければならない。彼らがお互いにどのように関係しているか。ダイナミックであろうとなかろうと、「キャリブレーション」は、使用できる値を取得したい場合には必須です。あなたから来ることはできない確立されたベースラインがなければならず、それはあなたからの価値と比較されなければなりません。例えば、前に述べたように、相対的沈黙は約30であるべきである。電話が相対的な無音環境で456を返す場合は、自分の電話番号(30)を電話番号(456)で分けるだけで、電話機から返された値を調整して、見たいものと一致するようになりますこれらの値はある程度の信頼性のために使用することができます。

これは私が過去数ヶ月にわたって見つけたもので、誰かを助けることを願っています。

+0

こんにちは、あなたの仕事は本当に私を助けています。しかし、私は質問があります。計算されたデシベル値、または読み込み関数から得られた短いデータを較正しますか?よろしく – smoothumut

1

オープンソースアプリNoiseTubeはこれを行います。デバイス固有の校正のサポートも含まれています。ソースコードはhttps://code.google.com/p/noisetube/にあります。あなたがそれにアクセスできるなら、私は彼らの記事を読むことを強くお勧めします参加型ノイズマッピングが機能します!環境モニタリングのための標準技術の代替としての参加型感知の評価available for pay)。

ソースからのいくつかのハイライト:

関連する問題