0

私はFFTで本当に失敗し、今はAndroidのヘッドフォンジャックからArduinoに通信する必要があります.現在、Arduino用のライブラリがあります(ブログ記事でそれについて話していますArduinoを搭載したリアルタイムスペクトルアナライザー)および1つアンドロイドも!

どのように始めればよいですか?最終的にFFTに変換できるオーディオ信号を構築するにはどうすればよいですか?Arduinoはライブラリを使用して同じものを分析でき、何でも作動させることができますか?

4

1 に答える 1

3

あなたは非常にあいまいな質問をしています:「最終的にFFTに変換できるオーディオ信号を構築するにはどうすればよいですか?Arduinoはライブラリを使用して同じものを分析でき、何でも作動させることができますか?」. 問題について考えるお手伝いをします。答えを得るためには、適切な質問を自問することが不可欠です。

おそらく、あなたの音声信号は「どこかから来ている」、つまり音です。これは、最初にそれらを数値のストリームに変換する必要があることを意味します。

問題 #1: 音声信号を数値のストリームに変換する

これは、次の 3 つのサブ問題に分けられます。

  1. 信号を適切な振幅にする
  2. 必要なサンプリング レートの選択
  3. 後で処理するためのデータのデジタル化と保存

適切な振幅を選択する前に、信号をデジタル化する方法を知る必要があるため、項目 (1) と (3) は関連しています。たとえば、音声入力ソースとしてマイクを使用している場合、5 V の入力範囲を持つ ADC (アナログからデジタルへのコンバーター) に信号を供給する前に、信号を増幅する必要があります (また、自動ゲイン コントロールを追加することもできます)。マイクは mV 範囲の出力を持っている可能性があるためです。使用しているハードウェアに関する詳細情報がなければ、ここに追加することはあまりありません。タグから、Androidデバイス内でそれを行おうとしているように聞こえます-その場合、デジタル信号をArduinoに(USB経由で)どのように移動するつもりですか?

2つ目の「サンプリングレートの選択」は、実は非常に重要です。音響信号にはさまざまな周波数が含まれています。ピアノの鍵盤と考えてください。高周波を検出するには、信号を「変化するよりも速く」サンプリングする必要があります。信号に存在する最高周波数の 2 倍でサンプリングする必要があることを示す「ナイキストの定理」と呼ばれる正式な定理があります。注 - それは「あなたが興味を持っていること」だけではなく、「それが存在している」ことです。低い周波数のサンプル クロックで高い周波数の信号をサンプリングすると、「エイリアス」として表示されます。まったく別のものとして出力に表示されます。したがって、信号をデジタル化する前に、関心のある周波数を決定する必要があります。フィルター付き。500 Hz (ピアノの中央 C の約 1 オクターブ上) までの周波数に関心があるとします。フィルターが機能する機会を与えるために、1 kHz を超えるすべての周波数をカットすることを選択し (フィルターは「ロールオフ」します。つまり、ある範囲の周波数で強度が増加します)、2 kHz でサンプリングします。これは、毎秒 2000 サンプルを取得することを意味し、それらを Arduino のどこに配置するかを決める必要があります (小さなボードではメモリがすぐにいっぱいになります)。

問題 2: 信号の分析 何らかの方法でデジタル信号をキャプチャしたと仮定すると、次のタスクはそれを分析することです。FFT は基本的に、特定のサウンド サンプルについて、「ピアノのどのキーがどのくらい強く打たれたか」を示す巧妙な数学です。音響信号を一連の周波数「ビン」に分割し、各ビンのエネルギー量を決定します (位相も計算しますが、単純にしておきましょう)。したがって、FFT アルゴリズムの入力がサウンド サンプルである場合、出力は、信号に存在する周波数を示す値の配列になります。これは概算です、「最も近いビン」を見つけるためです。同じ類推に固執する - 調律がずれているピアノを叩いた場合、アルゴリズムは「調律がずれている」ではなく、実際には測定できないため、「C のビットと C のシャープのビット」を返します。間に何か。FFT の精度は、サンプリング周波数 (これにより、検出できる周波数の上限が決まります) とサンプルの長さによって決まります。サンプルを「聞く」時間が長いほど、「聞く」ことができる微妙な違いが大きくなります。 . したがって、考慮すべき別のトレードオフがあります。オーディオ信号が急速に変化する場合は、(急速な変化をキャプチャするために) 短時間サンプリングする必要があります。しかし、正確な周波数が必要な場合は、長時間サンプリングする必要があります。たとえば、モールス復号器を作成している場合、サンプリングは、「短点」と「ダッシュ」の間の一時停止と比較して短くする必要があります。そうしないと、それらが一緒にスラーになります。ただし、他のトーンよりもはるかに大きい単一のトーン (FFT の 1 つのビン) が存在するため、モールス トーンが存在することを理解するのは非常に簡単です。

これらをどのように実装するかは、アプリケーションによって異なります。3 番目のステップである「それを使って何かをする」では、意味のあるシグナルとは何かを判断する必要があります。繰り返しになりますが、モールス復号器を作成している場合は、おそらく、単一のトーンが存在するときに LED をオンにし (FFT の 1 つまたは 2 つのビンが他のビンよりもはるかに大きな値を持っています)、そうでないときはオフにします (すべてのノイズ - ほぼ同じサイズの多数のビン)。しかし、あなたからもっとたくさんの情報がなければ、あなたを助けるためにこれ以上言うことはできません.

次の記事を読むと、多くのことを学ぶことができます。

http://www.arduinoos.com/2010/10/sound-capture/

http://www.arduinoos.com/2010/10/fast-fourier-transform-fft/

http://interface.khm.de/index.php/lab/experiments/frequency-measurement-library/

于 2013-06-01T13:23:39.247 に答える