Kysymys:
Arduino Duemilanove -näytön enimmäisnopeus?
Sketchy Fletchy
2009-11-30 09:03:54 UTC
view on stackexchange narkive permalink

G'day all!

Minulla on Arduino Duemilanove, joka roikkuu tällä hetkellä varaosassa ja ajattelin kokeilla muutamia äänirajapintaprojekteja. Mietin vain, minkä tyyppisen näytteenottotaajuuden voin saavuttaa käyttämällä yhtä analogista tuloa ja soveltamalla yksinkertaisia ​​algoritmeja sirulle ja raportoimalla sitten muutamalla digitaalisella lähdöllä, jotka on kytketty ledeihin.

Haluaisin ottaa näytteen ~ 44,1 kHz: n taajuudella, jos mahdollista.

Ensinnäkin haluan kokeilla yksinkertaista kitaraviritintä.

Hups - se on ATMega168-versio.
@Sketchy voit muokata kysymystäsi tarvittaessa, pikemminkin kuin lisätä yksityiskohtia kommenttiin.
Kitaravirittimille on useita taajuusarviointia koskevia kysymyksiä virtavirrasta. http://stackoverflow.com/questions/65268/music-how-do-you-analyse-the-fundamental-frequency-of-a-pcm-or-wac-sample/ Olen vastannut joukkoon niistä ja lähettänyt esimerkkikoodi joillekin menetelmille täällä: http://gist.github.com/255291
Kahdeksan vastused:
#1
+15
Clint Lawrence
2009-11-30 09:48:32 UTC
view on stackexchange narkive permalink

En usko, että voit kokeilla niin nopeasti täydellä tarkkuudella. ATMega168 voi ottaa näytteen vain 15 ksps: llä täydellä tarkkuudella.

Tämän sanottuasi sinun pitäisi pystyä saamaan sopiva näytetaajuus saadaksesi toimivan kitaravirittimen. 44,1 kHz on todennäköisesti melko vähän nopeampi kuin tarvitset, kun otetaan huomioon, että korkean E-kielen ja kitaran perusta on noin 330 Hz.

Loistava - se vastaa kysymykseeni kätevästi. En uskonut, että 168 kykenisi koko ihmisen äänispektrinäytteeseen, mutta jos saan vähintään 660 Hz: n näytetaajuuden, minun pitäisi pystyä tunnistamaan korkea e-merkkijono ilman aliaksia. Pidän sen kuitenkin hieman turvallisuuden ja herkkyyden vuoksi.
Puhelinjärjestelmä ottaa näytteet 8000 Hz: n taajuudella.
#2
+8
robzy
2009-11-30 11:03:26 UTC
view on stackexchange narkive permalink

Analogisen tulon lukeminen vie noin 100 meitä (0,0001 s), joten suurin lukunopeus on noin 10000 kertaa sekunnissa.

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

Rob.

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

Google for 'AVR guitar tuner', siellä on pari projektia, jotka tekevät tämän jo, ja he näyttävät pystyvän tekemään sen ilman liikaa vaivaa AVR: n nopeuden kanssa.

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

Jos käytät analogista vertailijaa (joko AVR: n sisäistä tai ulkoista opampia), joka muuttaa analogisen tulon neliöaalloksi, voit ottaa näytteitä värähtelyistä paljon suuremmilla nopeuksilla. Vaikka tämä ei ole totta ääninäytteenotto, kitaravirittimen rakentamiseen se on usein kaikki mitä tarvitset, koska kaikki koodisi tekisivät joka tapauksessa laskevan nolla risteyksiä aikayksikköä kohti.

Mielestäni huoleni on siitä, että sinun on todella suoritettava FFT, jotta voit valita perusasiat. Kitarat tuottavat kaikenlaisia ​​taajuuksia, kun merkkijono on kynitty, ja nollaristeysten laskeminen antaa sinulle vain tarpeeksi tietoa neliöaallon rakentamiseksi, mikä tekee FFT: stä melko perusteettoman.
Yhden nuotin kitara (erityisesti sähköinen) on lähellä siniaaltoa, kun olet ohittanut alkuperäisen transientin. Ei outoja yliaaltoja lähellekään amplitudia. Kaikki halpojen digitaalisten kitaran virittimet tekevät vain nollarajan. Tässä on yksi esimerkki AVR 2323: n tekniikasta (lähellä Arduinoa) http://www.myplace.nu/avr/gtuner/index.htm ja tässä on toinen Arduinon käyttö MIDI: n kanssa http://www.youtube. fi / katsella? v = oGKE1vmAWCA
En usko, että kitaravirittimet laskevat nolla ylitystä, ja tämä ei todellakaan ole hyvä menetelmä. Se ei ole edes lähellä siniaaltoa, ja syklissä voi olla monia nollaylityksiä: http://flic.kr/p/7ns9nu
Virittimissä, joita olen nähnyt, oli alipäästösuodatin, joka muuttaa tulosignaalin mahdollisimman paljon siniaalloksi.
#5
+3
wackyvorlon
2009-11-30 21:40:27 UTC
view on stackexchange narkive permalink

Saatavana on useita sarjakohtaisia ​​ADC: itä, I2S on NXP: n I2C: hen perustuva standardi. Niiden avulla voit vetää analogia melko helposti jopa paljon suuremmilla nopeuksilla. Tämän linkin avulla pääset NXP-osaan, joka on suunniteltu ääntä varten: UDA1361TS

Ilmaiset näytteet ovat ystäväsi :)

Kiitos paljon! Se tulee olemaan hieman enemmän kuin tarvitsen yksinkertaisen virittimen, mutta se siru näyttää täydelliseltä joissakin tulevissa projekteissani. Haluaisin lopulta saada yksinkertaisen sisäisen DSP-kannen kokeilemaan efektien käsittelyä. Kiitos!
#6
+1
endolith
2010-07-15 01:10:35 UTC
view on stackexchange narkive permalink

Ensinnäkin tarvitset tietylle sovelluksellesi vain noin 1 kHz: n näytteenottotaajuuden olettaen, että virität perustaajuutta etkä yhtä epäharmonisista osista...

Joka tapauksessa, mitä tulee suurimpaan mahdolliseen näytteenottotaajuuteen, Arduino-käsikirjassa sanotaan:

Analogisen tulon lukeminen vie noin 100 mikrosekuntia (0,0001 s), joten suurin lukunopeus on noin 10000 kertaa sekunnissa.

Tämä tarkoittaisi 10 kHz: n näytteenottotaajuutta. Kuitenkin. Voit saada suuremman näytteenottotaajuuden siirtymällä suoraan ADC-rekistereihin. Arduino Realtime Audio Processing -sivu käyttää esimerkiksi kahta kanavaa 15 kHz: n taajuudella. Joten 10 kHz: n enimmäismäärä on vain käytettäessä sisäänrakennettua AnalogRead () -toimintoa, koska sillä on paljon yleiskustannuksia.

ADC on optimoitu parhaaseen toimintaan kellotaajuudella 50 kHz - 200 kHz:

Oletusarvoisesti peräkkäinen approksimaatiopiiri vaatii tulokellotaajuuden [ADC-kello] välillä 50 kHz - 200 kHz maksimaalisen tarkkuuden saamiseksi.

Koska ADC-muunnos vie 13 kellosykliä, tämä olisi näytteenottotaajuus 4 kHz - 15 kHz. Mukaan AVR120: ADC: n karakterisointi ja kalibrointi AVR: llä:

Parhaan suorituskyvyn saavuttamiseksi ADC-kello ei saa ylittää 200 kHz. 1 MHz: n taajuudet eivät kuitenkaan vähennä ADC-tarkkuutta merkittävästi.

ADC: n käyttöä yli 1 MHz: n taajuuksilla ei ole ominaista.

1 MHz: n kellotaajuus = 77 kHz: n näytetaajuus, joten se on realistinen maks.

Foorumiketjussa Nopeampi analoginen lukeminen? on lisätietoja tästä.

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

Piirimuunnin toimii tässä sovelluksessa, kuten muut ovat huomauttaneet, mutta sinun pitäisi todella tutkia ulkoisen ADC: n käyttöä. Tämä säästää paljon vaivaa ja vapauttaa mikrosi näytteisiin SPI: n tai I2C: n kautta paljon, micheillä suuremmilla tiedonsiirtonopeuksilla, pienemmällä melulla mikron kellolta ja suuremmalla tarkkuudella kuin sisäisen ADC: n käyttö. Jos haluat enemmän tarkkuutta ja / tai suurempaa tiedonsiirtonopeutta, käytä jotain LTC1867: n kaltaista, jonka avulla voit ottaa näytteitä jopa 175 kHz: n taajuudella (vaikka voit kellottaa sen niin nopeasti kuin haluat) ja lukea sitten 24-bittinen data jopa 20MHz SPI: n kautta. Katso, mitä todellinen ADC voi tehdä? :) Tällaisella teholla (ja 24- tai 32-bittisellä DSP: llä) voit pakata ja tallentaa ääntäsi, suodattaa sitä, moduloida sitä, toistaa sitä ... mahdollisuudet ovat rajattomat.

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

Oletko kiinnostunut 64 kt: n näytteenottotaajuudesta? Katso täältä

Nyt nostettu 150 kHz: iin, 10 bittiä, ei lisäkomponentteja!

Katso siellä



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 2.0-lisenssistä, jolla sitä jaetaan.
Loading...