Maximale Abtastrate von Arduino Duemilanove?

Guten Tag alle!

Ich habe im Moment einen Arduino Duemilanove übrig und dachte, ich könnte ein paar Audio-Interface-Projekte ausprobieren. Ich frage mich nur, welche Art von Abtastfrequenz ich mit einem einzigen analogen Eingang erreichen und einige einfache Algorithmen auf dem Chip anwenden und dann mit einigen an LEDs gebundenen digitalen Ausgängen berichten kann.

Ich möchte möglichst bei ~44,1 kHz einsampeln.

Als Referenz möchte ich als erstes einen einfachen Gitarrenstimmer ausprobieren.

Hoppla - es ist die ATMega168-Version.
@Sketchy Sie können Ihre Frage bei Bedarf bearbeiten, anstatt Details in einem Kommentar hinzuzufügen.
Für Gitarrentuner gibt es eine Reihe von Fragen zu Stackoverflow zur Frequenzschätzung. stackoverflow.com/questions/65268/… Ich habe einige davon beantwortet und Beispielcode für einige Methoden hier gepostet: gist.github.com/255291

Antworten (8)

Ich glaube nicht, dass Sie bei voller Auflösung so schnell sampeln können. Der ATMega168 kann bei voller Auflösung nur mit 15 ksps abtasten.

Allerdings sollten Sie in der Lage sein, eine geeignete Abtastrate zu erhalten, um einen funktionierenden Gitarrenstimmer zu erhalten. 44,1 kHz ist höchstwahrscheinlich etwas schneller als Sie benötigen, da der Grundton der hohen E-Saite einer Gitarre bei etwa 330 Hz liegt.

Genial - das beantwortet meine Frage praktisch. Ich hätte nicht gedacht, dass die 168 in der Lage wäre, das gesamte menschliche Audiospektrum abzutasten, aber wenn ich eine Abtastrate von mindestens 660 Hz erreichen kann, sollte ich in der Lage sein, die hohe e-Saite ohne Aliasing zu identifizieren. Ich werde das aber aus Sicherheitsgründen und der Sensibilität etwas erhöhen. Vielen Dank!
Das Telefonsystem tastet mit 8000 Hz ab.

Das Lesen eines Analogeingangs dauert etwa 100 us (0,0001 s), sodass die maximale Leserate etwa 10.000 Mal pro Sekunde beträgt.

http://arduino.cc/en/Reference/AnalogRead

Rauben.

Google nach 'AVR Guitar Tuner', es gibt ein paar Projekte, die dies bereits tun, und sie scheinen in der Lage zu sein, dies ohne allzu große Probleme mit der Geschwindigkeit des AVR zu tun.

Wenn Sie einen analogen Komparator verwenden (entweder den internen im AVR oder einen externen Operationsverstärker), der den analogen Eingang in eine Rechteckwelle umwandelt, können Sie Schwingungen mit viel höheren Geschwindigkeiten abtasten. Dies ist zwar kein echtes Audio-Sampling, aber für den Bau eines Gitarrentuners ist es oft alles, was Sie brauchen, da Ihr Code sowieso nur Nulldurchgänge pro Zeiteinheit zählen würde.

Ich denke, meine Sorge ist, dass Sie wirklich eine FFT ausführen müssen, um das Fundamentale herauszusuchen. Gitarren erzeugen alle Arten von Frequenzen, wenn eine Saite gezupft wird, und das Zählen der Nulldurchgänge gibt Ihnen nur genügend Informationen, um eine Rechteckwelle zu konstruieren, was eine FFT ziemlich nutzlos macht.
Die Einzelton-Gitarrenausgabe (insbesondere elektrische) ist eine enge Annäherung an eine Sinuswelle, sobald Sie den anfänglichen Transienten überwunden haben. Keine seltsamen Harmonischen irgendwo in der Nähe der Amplitude des Grundtons. Alle billigen digitalen Gitarrentuner führen nur ein Nulldurchgangs-Timing durch und tun nichts im Frequenzbereich. Hier ist ein Beispiel für die Technik auf einem AVR 2323 (nah verwandt mit Arduino) myplace.nu/avr/gtuner/index.htm und hier ist ein weiteres Beispiel, das den Arduino mit MIDI- Ausgang youtube.com/watch?v=oGKE1vmAWCA verwendet
Ich glaube nicht, dass Gitarrentuner Nulldurchgänge zählen, und das ist sicherlich keine gute Methode. Es ist nicht einmal annähernd eine Sinuswelle und es kann viele Nulldurchgänge pro Zyklus geben: flic.kr/p/7ns9nu
Die Tuner, die ich gesehen habe, hatten einen Tiefpassfilter, um das Eingangssignal so weit wie möglich in eine Sinuswelle umzuwandeln.

Es gibt eine Reihe von ADCs, die seriell sind, I2S ist der Standard von NXP, der auf I2C basiert. Sie ermöglichen es Ihnen, auch bei viel höheren Geschwindigkeiten ziemlich einfach analog zu ziehen. Dieser Link sollte Sie zu einem NXP-Teil führen, das für Audio ausgelegt ist: UDA1361TS

Kostenlose Proben sind dein Freund :)

Vielen Dank! Das wird ein bisschen mehr sein, als ich brauche, um einen einfachen Tuner zum Laufen zu bringen, aber dieser Chip sieht perfekt für einige meiner zukünftigen Projekte aus. Irgendwann würde ich gerne ein einfaches Inline-DSP-Deck bekommen, um mit der Effektverarbeitung zu experimentieren. Vielen Dank!

Erstens benötigen Sie für Ihre spezielle Anwendung wirklich nur etwa 1 kHz Abtastrate, vorausgesetzt, Sie stimmen die Grundfrequenz und nicht einen der unharmonischen Teiltöne ab ...

Wie auch immer, was die maximal mögliche Abtastrate betrifft, sagt das Arduino-Handbuch :

Das Lesen eines Analogeingangs dauert etwa 100 Mikrosekunden (0,0001 s), sodass die maximale Leserate etwa 10.000 Mal pro Sekunde beträgt.

Dies würde bedeuten, dass 10 kHz Abtastfrequenz das Maximum ist. Jedoch. Sie können höhere Abtastraten erzielen, indem Sie direkt auf die ADC-Register zugreifen . Die Seite „ Arduino Realtime Audio Processing “ verwendet beispielsweise zwei Kanäle bei 15 kHz. Das 10-kHz-Maximum ist also nur bei Verwendung der integrierten AnalogRead()-Funktion, weil es viel Overhead hat.

Der ADC ist für den besten Betrieb mit einer Taktrate zwischen 50 kHz und 200 kHz optimiert:

Standardmäßig erfordert die sukzessive Approximationsschaltung eine Eingangstaktfrequenz [ADC-Takt] zwischen 50 kHz und 200 kHz, um eine maximale Auflösung zu erhalten.

Da eine ADC-Wandlung 13 Taktzyklen dauert, wäre dies eine Abtastrate von 4 kHz bis 15 kHz. Laut AVR120: Charakterisierung und Kalibrierung des ADC auf einem AVR :

Für eine optimale Leistung sollte der ADC-Takt 200 kHz nicht überschreiten. Frequenzen bis zu 1 MHz verringern jedoch die ADC-Auflösung nicht wesentlich.

Der Betrieb des ADC mit Frequenzen über 1 MHz ist nicht gekennzeichnet.

1 MHz Taktfrequenz = 77 kHz Abtastfrequenz, das ist also die realistische max.

Der Forenthread Faster Analog Read? hat mehr darüber.

Der On-Chip-Konverter funktioniert für diese Anwendung, wie andere darauf hingewiesen haben, aber Sie sollten sich wirklich mit der Verwendung eines externen ADC befassen. Dies erspart Ihnen eine Menge Ärger und gibt Ihrem Mikro die Möglichkeit, über SPI oder I2C mit viel höheren Datenraten abzutasten, mit weniger Rauschen von der Uhr des Mikros und mit größerer Präzision als bei Verwendung des internen ADC. Wenn Sie eine höhere Auflösung und/oder eine höhere Datenrate wünschen, verwenden Sie etwas wie den LTC1867, mit dem Sie mit bis zu 175 kHz abtasten können (obwohl Sie ihn so schnell takten können, wie Sie möchten) und dann die 24-Bit-Daten auslesen bei bis zu 20 MHz über SPI. Sehen Sie, was ein echter ADC kann? :) Mit dieser Leistung (und einem 24- oder 32-Bit-DSP) können Sie Ihr Audio komprimieren und speichern, filtern, modulieren, wiedergeben ... die Möglichkeiten sind endlos.

Interessieren Sie sich für eine Abtastrate von 64K? Schau mal hier

Jetzt auf 150 kHz angehoben, 10 Bit, keine Zusatzkomponenten!

Schau mal dort nach