Arduino Duemilanoveの最大サンプルレート?


11

G'day all!

現在、Arduino Duemilanoveをスペアにぶら下げて、オーディオインターフェイスプロジェクトをいくつか試してみようと思いました。単一のアナログ入力を使用して、チップにいくつかの単純なアルゴリズムを適用して、LEDに接続されたいくつかのデジタル出力を使用して報告できるサンプリング周波数の種類を知りたいだけです。

できれば〜44.1 kHzでサンプリングしたい。

参考までに、最初に試してみたいのはシンプルなギターチューナーです。


おっと-それはATMega168バージョンです。
Sketchy Fletchy 2009年

4
@Sketchyコメントに詳細を追加するのではなく、必要に応じて質問を編集できます。
クリントローレンス、

1
ギターチューナーの場合、周波数推定に関するスタックオーバーフローに関する質問がいくつかあります。 stackoverflow.com/questions/65268/...私はそれらの束に答えてここにいくつかの方法のためのサンプルコードを掲載しました:gist.github.com/255291
endolithを

回答:


15

フル解像度で高速にサンプリングできるとは思いません。ATMega168は、最大解像度で15 kspsでのみサンプリングできます。

とは言っても、適切なサンプルレートを取得して、機能するギターチューナーを取得できるはずです。ギターのハイEストリングの基本が約330 Hzであることを考えると、44.1 kHzはおそらく必要な速度よりもかなり高速です。


素晴らしい-それは私の質問に簡単に答えます。168が人間のオーディオスペクトルを完全にサンプリングできるとは思いませんでしたが、少なくとも660 Hzのサンプルレートを取得できれば、エイリアシングのない高e文字列を識別できるはずです。安全性と感性のために少し上げます。ありがとう!
Sketchy Fletchy 2009年

電話システムは8000 Hzでサンプリングします。
joeforker


4

Googleは「AVRギターチューナー」を提供しています。すでにこれを行っているプロジェクトがいくつかありますが、AVRの速度にあまり問題なくそれを行うことができるようです。


3

アナログ入力を方形波に変換するアナログコンパレータ(AVRの内部コンパレータまたは外部オペアンプのコンパレータ)を使用すると、はるかに高速で発振をサンプリングできます。これは本当のオーディオサンプリングではありませんが、ギターチューナーを構築する場合、コードが実行するすべてのコードが単位時間あたりのゼロクロッシングをカウントすることになるため、必要なのはそれだけです。


1
私の懸念は、ファンダメンタルズを選択するためにFFTを実行する必要があることだと思います。ギターは弦を弾くとあらゆる種類の周波数を生成します。ゼロクロッシングをカウントすると、方形波を作成するのに十分な情報しか得られないため、FFTはまったく役に立ちません。
wackyvorlon 2009年

単音のギター出力(特にエレクトリック)は、最初のトランジェントを通過すると、正弦波に非常に近くなります。基本波の振幅の近くに奇妙な高調波はありません。すべての安価なデジタルギターチューナーは、ゼロクロッシングタイミングを実行するだけで、周波数領域では何も実行しません。ここではAVR 2323の技術(アルドゥイーノに近い相対)の一例ですmyplace.nu/avr/gtuner/index.htm とここをMIDIでのArduinoを使用して別だyoutube.com/watch?v=oGKE1vmAWCA
todbot

私はギターのチューナーがゼロクロッシングを数えるとは思わない、そしてこれは確かに良い方法ではない。それも、近い正弦波にではなく、サイクルごとに多数のゼロ交差があることができます: flic.kr/p/7ns9nu
endolith

私が見たチューナーには、入力信号をできるだけ正弦波に変換するローパスフィルターがありました。
todbot 2010

3

シリアルで利用可能なADCは多数あり、I2SはI2Cに基づくNXPの標準です。これにより、はるかに高速でもアナログを簡単に取り込むことができます。このリンクをクリックすると、オーディオ用に設計されたNXPパーツUDA1361TSが表示されます。

無料サンプルはあなたの友達です:)


1
どうもありがとう!これは、単純なチューナーを実現するために必要な量より少し多いですが、そのチップは、私の将来のプロジェクトのいくつかに最適に見えます。最終的には、シンプルなインラインDSPデッキでエフェクト処理を試してみたいと思います。ありがとう!
Sketchy Fletchy、2009

1

まず、特定のアプリケーションでは、基本周波数を調整しており、非調和部分の1つを調整していない場合、実際に必要なのは1 kHz程度のサンプリングレートだけです...

とにかく、可能な最大のサンプリングレートについては、Arduinoのマニュアルには次のように書かれています。

アナログ入力の読み取りには約100マイクロ秒(0.0001秒)かかるため、最大読み取り速度は1秒あたり約10,000倍です。

これは、10 kHzのサンプリング周波数が最大であることを意味します。 しかしながら。ADCレジスタに直接アクセスして、 より高いサンプリングレートを得ることができます。Arduinoのリアルタイムオーディオ処理のページは、例えば、15 kHzで2つのチャネルを使用しています。したがって、10 kHzの最大値は、組み込みのAnalogRead()関数を使用しているときのみです。オーバーヘッドが多いためです。

ADCは、50 kHz〜200 kHzのクロック速度で最適な動作をするように最適化されています。

デフォルトでは、逐次比較回路は、最大の解像度を得るために50 kHzから200 kHzの入力クロック周波数[ADCクロック]を必要とします。

ADC変換には13クロックサイクルかかるため、これは4 kHz〜15 kHzのサンプリングレートになります。AVR120によると:AVR上のADCの特性評価とキャリブレーション

最適なパフォーマンスを得るには、ADCクロックが200 kHzを超えないようにする必要があります。ただし、1 MHzまでの周波数では、ADCの分解能が大幅に低下することはありません。

1 MHzを超える周波数でADCを動作させることは特徴付けられていません。

1 MHzのクロック周波数= 77 kHzのサンプリング周波数なので、これが現実的な最大値です。

フォーラムのスレッドFaster Analog Read?これについての詳細があります。


0

他の人が指摘したように、オンチップコンバータはこのアプリケーションで機能しますが、実際には外部ADCの使用を検討する必要があります。これにより、多くの問題を回避し、マイクロを解放してSPIまたはI2Cでサンプリングし、データレートを高くし、マイクロのクロックからのノイズを減らし、内部ADCを使用するよりも高い精度でサンプリングできます。より高い解像度またはより高いデータレート、あるいはその両方が必要な場合は、LTC1867のようなものを使用します。これにより、最大175kHzでサンプリングでき(ただし、必要に応じてすばやくクロックを供給できます)、24ビットデータを読み取ります。 SPIで最大20MHz。実際のADCで何ができるか確認してください。:)この種のパワー(および24ビットまたは32ビットDSP)を使用すると、オーディオを圧縮して保存し、フィルターし、変調し、再生することができます...可能性は無限です。


0

64Kのサンプリングレートに興味がありますか?見ているこちら

150 kHz、10ビットに引き上げられました。追加のコンポーネントはありません。

そちらをご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.