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.
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.
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.
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 :)
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.
Skizzenhaft Fletchy
Clint Lawrence
Endolith