Vraag:
Maximale sample rate van Arduino Duemilanove?
Sketchy Fletchy
2009-11-30 09:03:54 UTC
view on stackexchange narkive permalink

G'day all!

Ik heb op dit moment een Arduino Duemilanove als reserve en dacht dat ik misschien een paar audio-interfaceprojecten zou proberen. Ik vraag me gewoon af wat voor soort bemonsteringsfrequentie ik kan bereiken door een enkele analoge ingang toe te passen en enkele eenvoudige algoritmen op de chip toe te passen, en vervolgens te rapporteren met behulp van een paar digitale uitgangen die zijn gekoppeld aan LED's.

Ik zou graag willen samplen in op ~ 44,1 kHz indien mogelijk.

Ter referentie, het eerste dat ik wil proberen is een eenvoudige gitaartuner.

Oeps - het is de ATMega168-versie.
@Sketchy u kunt uw vraag bewerken als dat nodig is, in plaats van details toe te voegen aan een opmerking.
Voor gitaartuners zijn er een aantal vragen over stackoverflow over frequentieschatting. http://stackoverflow.com/questions/65268/music-how-do-you-analyse-the-fundamental-frequency-of-a-pcm-or-wac-sample/ Ik heb er een aantal beantwoord en gepost voorbeeldcode voor enkele methoden hier: http://gist.github.com/255291
Acht antwoorden:
#1
+15
Clint Lawrence
2009-11-30 09:48:32 UTC
view on stackexchange narkive permalink

Ik denk niet dat je zo snel kunt samplen met volledige resolutie. De ATMega168 kan alleen samplen met 15 ksps met zijn volledige resolutie.

Dat gezegd hebbende, zou je in staat moeten zijn om een ​​geschikte samplefrequentie te krijgen om een ​​functionerende gitaartuner te krijgen. 44,1 kHz is hoogstwaarschijnlijk een stuk sneller dan je nodig hebt, aangezien de grondtoon van de hoge E-snaar en een gitaar ongeveer 330 Hz is.

Briljant - dat beantwoordt mijn vraag handig. Ik dacht niet dat de 168 in staat zou zijn om volledig menselijk audiospectrum te samplen, maar als ik een samplefrequentie van ten minste 660 Hz kan krijgen, zou ik de hoge e-snaar zonder aliasing moeten kunnen identificeren. Ik zal dat een beetje opheffen voor veiligheid en gevoeligheid. Bedankt!
Het telefoonsysteem bemonstert op 8000 Hz.
#2
+8
robzy
2009-11-30 11:03:26 UTC
view on stackexchange narkive permalink

Het duurt ongeveer 100 us (0,0001 s) om een ​​analoge ingang te lezen, dus de maximale leessnelheid is ongeveer 10.000 keer per seconde.

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

Rob.

#3
+4
davr
2009-12-01 08:41:23 UTC
view on stackexchange narkive permalink

Google voor 'AVR-gitaartuner', er zijn een paar projecten die dit al doen, en ze lijken dit te kunnen doen zonder al te veel moeite met de snelheid van de AVR.

#4
+3
todbot
2009-11-30 12:11:54 UTC
view on stackexchange narkive permalink

Als u een analoge comparator gebruikt (ofwel de interne in de AVR of een externe opamp) die de analoge ingang in een blokgolf verandert, kunt u oscillaties met veel hogere snelheden samplen. Hoewel dit geen echte audiosampling is, is het voor het bouwen van een gitaartuner vaak alles wat je nodig hebt, aangezien al je code hoe dan ook zou doen, het tellen van nuldoorgangen per tijdseenheid.

Mijn zorg is, denk ik, dat je echt een FFT moet draaien om de fundamentele te kiezen. Gitaren produceren allerlei frequenties wanneer een snaar wordt getokkeld, en het tellen van de nuldoorgangen geeft je alleen voldoende informatie om een ​​blokgolf te construeren, waardoor een FFT behoorlijk onbruikbaar wordt.
Gitaaruitvoer met enkele noot (vooral elektrisch) is een goede benadering van een sinusgolf, als je eenmaal voorbij de initiële transiënt bent. Geen rare harmonischen in de buurt van de amplitude van de grondtoon. Alle goedkope digitale gitaartuners doen gewoon zero-crossing timing en doen niets in het frequentiedomein. Hier is een voorbeeld van de techniek op een AVR 2323 (verwant aan Arduino) http://www.myplace.nu/avr/gtuner/index.htm en hier is een ander met de Arduino met MIDI out http://www.youtube. com / watch? v = oGKE1vmAWCA
Ik denk niet dat gitaartuners nuldoorgangen tellen, en dit is zeker geen goede methode. Het is niet eens in de buurt van een sinusgolf, en er kunnen veel nuldoorgangen per cyclus zijn: http://flic.kr/p/7ns9nu
De tuners die ik heb gezien, hadden een laagdoorlaatfilter om het ingangssignaal zoveel mogelijk in een sinusgolf om te zetten.
#5
+3
wackyvorlon
2009-11-30 21:40:27 UTC
view on stackexchange narkive permalink

Er zijn een aantal ADC's beschikbaar die serieel zijn, I2S is de standaard van NXP gebaseerd op I2C. Ze stellen je in staat om vrij gemakkelijk analoog in te voeren, zelfs bij veel hogere snelheden. Deze link zou je naar een NXP-gedeelte moeten leiden dat is ontworpen voor audio: UDA1361TS

Gratis samples zijn je vriend :)

Heel erg bedankt! Dat is iets meer dan ik nodig heb om een ​​eenvoudige tuner aan de gang te krijgen, maar die chip ziet er perfect uit voor sommige van mijn toekomstige projecten. Ik zou uiteindelijk graag een eenvoudig inline DSP-deck willen hebben dat gaat experimenteren met effectverwerking. Bedankt!
#6
+1
endolith
2010-07-15 01:10:35 UTC
view on stackexchange narkive permalink

Ten eerste heb je voor je specifieke toepassing eigenlijk maar 1 kHz of zo bemonsteringsfrequentie nodig, ervan uitgaande dat je de fundamentele frequentie afstemt en niet een van de inharmonische delen...

Hoe dan ook, wat betreft de maximaal mogelijke bemonsteringsfrequentie zegt de Arduino-handleiding:

Het duurt ongeveer 100 microseconden (0,0001 s) om een ​​analoge ingang te lezen, dus de maximale leessnelheid is ongeveer 10.000 keer per seconde.

Dit zou betekenen dat de bemonsteringsfrequentie van 10 kHz de max. Echter. U kunt hogere bemonsteringsfrequenties krijgen door rechtstreeks toegang te krijgen tot de ADC-registers. De pagina Arduino Realtime Audio Processing gebruikt bijvoorbeeld twee kanalen van 15 kHz. Dus de 10 kHz max is alleen bij gebruik van de ingebouwde AnalogRead () -functie, omdat deze veel overhead heeft.

De ADC is geoptimaliseerd voor de beste werking met een kloksnelheid tussen 50 kHz en 200 kHz:

Standaard vereist de opeenvolgende benaderingscircuits een ingangsklokfrequentie [ADC-klok] tussen 50 kHz en 200 kHz om een ​​maximale resolutie te krijgen.

Aangezien een ADC-conversie 13 klokcycli kost, zou dit een bemonsteringsfrequentie zijn van 4 kHz tot 15 kHz. Volgens AVR120: Characterization and Calibration of the ADC on a AVR:

Voor optimale prestaties mag de ADC-klok niet hoger zijn dan 200 kHz. Frequenties tot 1 MHz verminderen de ADC-resolutie echter niet significant.

Het gebruik van de ADC met frequenties hoger dan 1 MHz wordt niet gekenmerkt.

1 MHz klokfrequentie = 77 kHz bemonsteringsfrequentie, dus dat is de realistische max.

De forumthread Faster Analog Read? heeft hier meer over.

#7
  0
Kevin Vermeer
2010-07-15 06:38:31 UTC
view on stackexchange narkive permalink

De on-chip converter werkt voor deze applicatie zoals anderen al hebben opgemerkt, maar je zou echt moeten kijken naar het gebruik van een externe ADC. Dit bespaart u veel moeite en geeft uw micro vrij om te samplen via SPI of I2C met veel hogere gegevenssnelheden, met minder ruis van de microklok en met grotere precisie dan bij gebruik van de interne ADC. Als je meer resolutie en / of een hogere datasnelheid wilt, gebruik dan zoiets als de LTC1867, waarmee je tot 175 kHz kunt samplen (hoewel je het zo snel kunt klokken als je wilt) en vervolgens de 24-bits data uitlezen tot 20 MHz via SPI. Ziet u wat een echte ADC kan doen? :) Met dat soort vermogen (en een 24- of 32-bit DSP) kun je je audio comprimeren en opslaan, filteren, moduleren, afspelen ... de mogelijkheden zijn eindeloos.

#8
  0
user3057
2011-02-17 14:14:29 UTC
view on stackexchange narkive permalink

Bent u geïnteresseerd in een samplefrequentie van 64K? Kijk hier

Nu verhoogd tot 150 kHz, 10 bits, geen extra componenten!

Kijk daar



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 2.0-licentie waaronder het wordt gedistribueerd.
Loading...