Frequenza di campionamento massima di Arduino Duemilanove?


11

Buongiorno a tutti!

Al momento ho un Arduino Duemilanove in giro e ho pensato che avrei potuto provare alcuni progetti di interfaccia audio. Mi sto solo chiedendo che tipo di frequenza di campionamento posso ottenere usando un singolo ingresso analogico e applicando alcuni semplici algoritmi su chip, quindi riferendo usando alcune uscite digitali legate ai LED.

Mi piacerebbe campionare a ~ 44.1 kHz se possibile.

Per riferimento, la prima cosa che voglio provare è un semplice accordatore per chitarra.


Oops - è la versione ATMega168.
Sketchy Fletchy,

4
@Sketchy puoi modificare la tua domanda se necessario, piuttosto che aggiungere dettagli in un commento.
Clint Lawrence,

1
Per i sintonizzatori per chitarra, ci sono una serie di domande su StackOverflow sulla stima della frequenza. stackoverflow.com/questions/65268/...~~V~~aux~~singular~~1st Ho risposto un po 'di loro e postato codice di esempio per alcuni metodi qui: gist.github.com/255291
endolith

Risposte:


15

Non credo che tu possa campionare così velocemente alla massima risoluzione. ATMega168 può campionare solo a 15 ksps alla sua massima risoluzione.

Detto questo, dovresti essere in grado di ottenere una frequenza di campionamento adeguata per ottenere un accordatore per chitarra funzionante. 44,1 kHz è molto probabilmente un po 'più veloce di quanto sia necessario, dato che il fondamentale della stringa E alta di una chitarra è di circa 330 Hz.


Fantastico - questo risponde facilmente alla mia domanda. Non pensavo che il 168 sarebbe stato in grado di campionare completamente lo spettro audio umano, ma se potessi ottenere una frequenza di campionamento di almeno 660 Hz dovrei essere in grado di identificare la stringa high e senza aliasing. Lo aumenterò un po 'per sicurezza e sensibilità però. Grazie!
Sketchy Fletchy,

Il sistema telefonico esegue il campionamento a 8000 Hz.
joeforker,


4

Google per "Accordatore per chitarra AVR", ci sono un paio di progetti là fuori che lo fanno già e sembrano essere in grado di farlo senza troppi problemi con la velocità dell'AVR.


3

Se si utilizza un comparatore analogico (uno interno nell'AVR o uno esterno) che trasforma l'ingresso analogico in un'onda quadra, è possibile campionare le oscillazioni a velocità molto più elevate. Anche se questo non è un vero campionamento audio, per costruire un accordatore per chitarra è spesso tutto ciò di cui hai bisogno poiché tutto il tuo codice sarebbe comunque conteggiare zero incroci per unità di tempo.


1
La mia preoccupazione, penso, è che hai davvero bisogno di gestire una FFT per scegliere il fondamentale. Le chitarre producono tutti i tipi di frequenze quando viene pizzicata una corda e il conteggio dei passaggi per lo zero fornisce informazioni sufficienti per costruire un'onda quadra, rendendo una FFT abbastanza completamente inutile.
Wackyvorlon,

L'uscita di chitarra a nota singola (specialmente elettrica) è un'approssimazione ravvicinata di un'onda sinusoidale, una volta superato il transitorio iniziale. Nessuna strana armonica da nessuna parte vicino all'ampiezza del fondamentale. Tutti i sintonizzatori di chitarre digitali a buon mercato eseguono semplicemente tempi di zero-crossing e non fanno nulla nel dominio della frequenza. Ecco un esempio della tecnica su un AVR 2323 (vicino ad Arduino) myplace.nu/avr/gtuner/index.htm ed eccone un altro usando Arduino con MIDI out youtube.com/watch?v=oGKE1vmAWCA
todbot

Non penso che i chitarristi contino zero incroci, e questo certamente non è un buon metodo. Non è neppure vicino ad un'onda sinusoidale, e ci possono essere molti passaggi per lo zero per ciclo: flic.kr/p/7ns9nu
endolith

I sintonizzatori che ho visto avevano un filtro passa-basso per trasformare il segnale di ingresso il più possibile in un'onda sinusoidale.
todbot,

3

Ci sono un certo numero di ADC disponibili che sono seriali, I2S è lo standard di NXP basato su I2C. Ti permettono di tirare abbastanza facilmente in analogico anche a velocità molto più elevate. Questo collegamento dovrebbe accedere a una parte NXP progettata per l'audio: UDA1361TS

I campioni gratuiti sono tuoi amici :)


1
Grazie mille! Sarà un po 'più di quello di cui ho bisogno per avviare un semplice sintonizzatore, ma quel chip sembra perfetto per alcuni dei miei progetti futuri. Alla fine mi piacerebbe avere un semplice DSP inline che sperimentasse l'elaborazione degli effetti. Grazie!
Sketchy Fletchy,

1

Innanzitutto, per la tua particolare applicazione, hai davvero bisogno solo di 1 kHz o giù di lì, supponendo che stai sintonizzando la frequenza fondamentale e non uno dei parziali inarmonici ...

Ad ogni modo, come per la massima frequenza di campionamento possibile, il manuale di Arduino dice:

Sono necessari circa 100 microsecondi (0,0001 s) per leggere un ingresso analogico, quindi la velocità di lettura massima è di circa 10.000 volte al secondo.

Ciò implicherebbe che la frequenza di campionamento di 10 kHz è il massimo. Tuttavia. È possibile ottenere frequenze di campionamento più elevate accedendo direttamente ai registri ADC . La pagina di elaborazione audio in tempo reale di Arduino utilizza, ad esempio, due canali a 15 kHz. Quindi il massimo di 10 kHz è solo quando si utilizza la funzione AnalogRead () incorporata, perché ha un sacco di sovraccarico.

L'ADC è ottimizzato per il miglior funzionamento con una velocità di clock compresa tra 50 kHz e 200 kHz:

Per impostazione predefinita, i circuiti di approssimazione successivi richiedono una frequenza di clock di ingresso [clock ADC] tra 50 kHz e 200 kHz per ottenere la massima risoluzione.

Poiché una conversione ADC richiede 13 cicli di clock, si tratterebbe di una frequenza di campionamento da 4 kHz a 15 kHz. Secondo AVR120: Caratterizzazione e calibrazione dell'ADC su un AVR :

Per prestazioni ottimali, l'orologio ADC non deve superare i 200 kHz. Tuttavia, le frequenze fino a 1 MHz non riducono significativamente la risoluzione ADC.

Il funzionamento dell'ADC con frequenze superiori a 1 MHz non è caratterizzato.

Frequenza di clock 1 MHz = frequenza di campionamento 77 kHz, quindi questo è il massimo realistico.

La discussione sul forum Faster Analog Read? ha di più su questo.


0

Il convertitore on-chip funzionerà per questa applicazione come altri hanno sottolineato, ma dovresti davvero cercare di utilizzare un ADC esterno. Questo ti farà risparmiare un sacco di problemi e libererà il tuo micro per campionare su SPI o I2C a velocità molto più elevate, con meno rumore dall'orologio del micro e con maggiore precisione rispetto all'utilizzo dell'ADC interno. Se si desidera una maggiore risoluzione e / o una velocità di trasmissione dati superiore, utilizzare qualcosa come LTC1867, che consente di campionare fino a 175kHz (sebbene sia possibile eseguirne il clock nel modo desiderato) e quindi leggere i dati a 24 bit fino a 20 MHz su SPI. Vedi cosa può fare un vero ADC? :) Con quel tipo di potenza (e un DSP a 24 o 32 bit), puoi comprimere e archiviare il tuo audio, filtrarlo, modularlo, riprodurlo ... le possibilità sono infinite.


0

Sei interessato a una frequenza di campionamento di 64 KB? Dai un'occhiata qui

Ora elevato a 150 kHz, 10 bit, nessun componente aggiuntivo!

Dai un'occhiata

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.