Maximale Abtastrate von Arduino Duemilanove?

11

Alles Gute!

Ich habe gerade einen Arduino Duemilanove in der Nähe und dachte, ich könnte ein paar Audio-Schnittstellenprojekte ausprobieren. Ich frage mich nur, welche Art von Abtastfrequenz ich mit einem einzigen analogen Eingang erreichen kann, indem ich einige einfache Algorithmen auf dem Chip anwende und dann mit ein paar an LEDs gebundenen digitalen Ausgängen berichte.

Ich würde wenn möglich bei ~ 44,1 kHz eintasten.

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

Sketchy Fletchy
quelle
Ups - es ist die ATMega168-Version.
Sketchy Fletchy
4
@Sketchy Sie können Ihre Frage bei Bedarf bearbeiten, anstatt Details in einen Kommentar einzufügen.
Clint Lawrence
1
Für Gitarrentuner gibt es eine Reihe von Fragen zum Stackoverflow zur Frequenzschätzung. stackoverflow.com/questions/65268/… Ich habe einige von ihnen beantwortet und hier Beispielcode für einige Methoden veröffentlicht: gist.github.com/255291
Endolith

Antworten:

15

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

Allerdings sollten Sie in der Lage sein, eine geeignete Samplerate zu erhalten, um einen funktionierenden Gitarrentuner zu erhalten. 44,1 kHz sind höchstwahrscheinlich ein gutes Stück schneller als Sie benötigen, da die Grundwelle der hohen E-Saite und einer Gitarre bei 330 Hz liegt.

Clint Lawrence
quelle
Genial - das beantwortet meine Frage leicht. Ich hätte nicht gedacht, dass der 168 in der Lage sein würde, 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 aus Sicherheits- und Sensibilitätsgründen ein wenig verbessern. Vielen Dank!
Sketchy Fletchy
Das Telefonsystem tastet mit 8000 Hz ab.
Joeforker
8

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

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

Rauben.

robzy
quelle
4

Google für 'AVR-Gitarrentuner', es gibt bereits einige Projekte, die dies tun, und sie scheinen in der Lage zu sein, dies ohne allzu große Probleme mit der Geschwindigkeit des AVR zu tun.

davr
quelle
3

Wenn Sie einen analogen Komparator verwenden (entweder den internen im AVR oder einen externen Operationsverstärker), der den analogen Eingang in eine Rechteckwelle verwandelt, 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 gesamter Code ohnehin Nulldurchgänge pro Zeiteinheit zählen würde.

todbot
quelle
1
Ich denke, ich mache mir Sorgen, dass Sie wirklich eine FFT durchführen müssen, um die Grundlagen herauszufinden. Gitarren erzeugen alle Arten von Frequenzen, wenn eine Saite gezupft wird. Wenn Sie die Nulldurchgänge zählen, erhalten Sie nur genügend Informationen, um eine Rechteckwelle zu konstruieren, was eine FFT ziemlich unbrauchbar macht.
Wackyvorlon
Der Single-Note-Gitarrenausgang (insbesondere elektrisch) ist eine enge Annäherung an eine Sinuswelle, sobald Sie den anfänglichen Übergang überwunden haben. Keine seltsamen Harmonischen in der Nähe der Amplitude der Grundwelle. Alle billigen Digitalgitarrentuner machen nur ein Nulldurchgangs-Timing und machen nichts im Frequenzbereich. Hier ist ein Beispiel für die Technik auf einem AVR 2323 (in der Nähe von Arduino) myplace.nu/avr/gtuner/index.htm und hier ist ein anderes Beispiel für die Verwendung des Arduino mit MIDI über youtube.com/watch?v=oGKE1vmAWCA
todbot
Ich glaube nicht, dass Gitarrentuner Nulldurchgänge zählen, und dies ist sicherlich keine gute Methode. Es ist nicht einmal in der Nähe einer Sinuswelle, und es kann viele Nulldurchgänge pro Zyklus geben: flic.kr/p/7ns9nu
Endolith
Die Tuner, die ich gesehen habe, hatten einen Tiefpassfilter, um das Eingangssignal so weit wie möglich in eine Sinuswelle umzuwandeln.
Todbot
3

Es gibt eine Reihe von ADCs, die seriell sind. I2S ist der auf I2C basierende NXP-Standard. Sie ermöglichen es Ihnen, auch bei viel höheren Geschwindigkeiten ganz einfach analog zu ziehen. Über diesen Link gelangen Sie zu einem NXP-Teil, der für Audio ausgelegt ist: UDA1361TS

Kostenlose Proben sind dein Freund :)

Wackyvorlon
quelle
1
Vielen Dank! Das wird ein bisschen mehr sein, als ich brauche, um einen einfachen Tuner zum Laufen zu bringen, aber dieser Chip sieht für einige meiner zukünftigen Projekte perfekt aus. Ich möchte schließlich ein einfaches Inline-DSP-Deck erhalten, das mit der Effektverarbeitung experimentiert. Vielen Dank!
Sketchy Fletchy
1

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

Wie auch immer, was die maximal mögliche Abtastrate betrifft, heißt es im Arduino-Handbuch :

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

Dies würde bedeuten, dass die Abtastfrequenz von 10 kHz die max. Jedoch. Sie können höhere Abtastraten erzielen, indem Sie direkt auf die ADC-Register zugreifen . Die Arduino Realtime Audio Processing- Seite verwendet beispielsweise zwei Kanäle mit 15 kHz. Das Maximum von 10 kHz ist also nur bei Verwendung der integrierten AnalogRead () -Funktion möglich, da 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-Umwandlung 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 reduzieren die ADC-Auflösung jedoch nicht wesentlich.

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

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

Der Forenthread Schneller analog lesen? hat mehr darüber.

Endolith
quelle
0

Der On-Chip-Konverter funktioniert für diese Anwendung, wie andere bereits betont haben. Sie sollten jedoch unbedingt einen externen ADC verwenden. Dies erspart Ihnen viel Ä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 mit dem internen ADC. Wenn Sie mehr 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 es so schnell takten können, wie Sie möchten) und dann die 24-Bit-Daten auslesen können 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 Ihre Audiodaten komprimieren und speichern, filtern, modulieren, wiedergeben ... die Möglichkeiten sind endlos.

Kevin Vermeer
quelle
0

Interessieren Sie sich für eine 64K-Abtastrate? Schauen Sie hier

Jetzt auf 150 kHz, 10 Bit, keine zusätzlichen Komponenten erhöht!

Schau mal dort hin

Gemeinschaft
quelle