Sisällysluettelo:
- Vaihe 1: Varustelista (ota kuva taulusta ja Kevin's Compista)
- Vaihe 2: Yleiskatsaus
- Vaihe 3: Wav -tiedosto
- Vaihe 4: Python- Pylabin ja Scipyn käyttö
- Vaihe 5: Python-näytteenotto ja FFT (Näytä koodi ja sen tulokset)
- Vaihe 6: Vivado (vertailija)
- Vaihe 7: KUVIA BASYS 3 -levystä
- Vaihe 8: Vivado (7 segmentin dekooderi, jossa on multipleksointi)
- Vaihe 9: Vivado (komponenttien yhdistäminen)
Video: Viritin: 9 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
Tämä projekti on suunniteltu tekemään kitaraviritin käyttäen Vivadoa ja 7-segmenttistä näyttöä. Kun viritin on löytänyt syötetyn äänen taajuuden, viritin vertaa tätä arvoa luetteloon kovakoodatuista arvoista tarkkoja taajuuksia varten, jotka tunnetaan normaalin taajuuden mukaisesti nuotin oikealle korkeudelle. Sitten viritin näyttää, kuinka lähellä tai kaukana syöttämäsi ääni on halutusta nuotista. Mielenkiintoista on, että ääniaalto on useiden sinimuotoisten aaltomuotojen yhdistelmä todellisten ja kuvitteellisten komponenttien kanssa. Vaikka tämä voi tuntua vaikealta työskennellä tuntemattomille, on olemassa muutamia tapoja analysoida aaltoa todellisilla ja kuvitteellisilla arvoilla.
Esittely:
Vaihe 1: Varustelista (ota kuva taulusta ja Kevin's Compista)
Ensin tarvitsemme Basys 3 -kortin ja tietokoneen, joka tukee seuraavia ohjelmia: Garageband/Audacity tai muu DAW - tallentaa mikrofonin kautta ja viedä wav -tiedostoja
Python - pystyy käyttämään pylabia ja scipyä näytteenotossa ja fft: ssä
Vivado - muodostaa yhteyden Basys 3 -levyyn ja nähdä tulokset visuaalisesti
Vaihe 2: Yleiskatsaus
Viritin koostuu muutamista tärkeistä komponenteista: mikrofoni, näytteenotin, FFT (Fast Fourier Transform), vertailija, dekooderi ja näyttö. Mikrofonin tarkoitus on kaapata tuloaaltomuoto. Näytteenotin vastaanottaa mikrofonin lähtösignaalin ja muuntaa signaalin FFT: n avulla taajuuksien suuruiseksi ulostuloksi. Sitten käyttämällä FFT: n lähtöä ja etsimällä sen suuruusluokka ja siihen liittyvä taajuus jaettuna 2: lla, voidaan löytää aaltomuodon nousuun liittyvä taajuus. Tämä arvo voi sitten mennä vertailuun. Sitä verrataan sitten hakutaulukkoon, jossa on jo asetettu taajuusarvot kaikkien nuottien täydellisille korkeuksille. Vertailija saa syötteen halutulle nuotille, jonka se voi sitten sovittaa halutun nuotin oikeaan taajuuteen hakutaulukosta. Sitten vertailija valitsee nuotin, jonka taajuus on lähimpänä maksimitaajuutta. Vertailija vertaa kahta arvoa ja näkee, että taajuuden arvo on lähellä haluttua arvoa, ja laittaa sitten tiedot signaaliksi. Vertailija lähettää signaalin dekooderille, jossa dekooderi valitsee tulot 7-segmentin näytön anodeille nuotin tarkkuuden osoittamiseksi.
Vaihe 3: Wav -tiedosto
Tässä vaiheessa otamme sävelkorkeuden wav -tiedoston ja yritämme tuoda sen taajuuden.
Ensin tarvitset muistiinpanon wav -tiedoston. Tässä esimerkissä käytämme 16 -bittistä stereo -wav -tiedostoa, jonka näytteenottotaajuus on 44,1 kHz. Tämä voidaan joko luoda DAW: ssä, kuten Garagebandissa, tai ladata. Tässä esimerkissä Garagebandilla luomamme A4 440 Hz: n siniaalto voidaan ladata täältä.
Vaihe 4: Python- Pylabin ja Scipyn käyttö
Käytimme Python -kirjastoa "Fast Fourier -muunnoksen" tekemiseen. Verkkoresurssin avulla voimme jäljitellä ja nähdä, mikä on hyödyllistä pylabissa ja scipyssä.
1. Jos et ole asentanut pylabia tai scipyä, sinun on tehtävä se. Tai Pycharmilla on erittäin hyvä ominaisuus, kun pylabin tai scipyn tuontia yritettiin tuoda esiin, ja siinä on vino alleviivaus, joka kertoo, ettet ole vielä asentanut kirjastoa. Voit asentaa ne suoraan painamalla punaista lamppua (se tulee näkyviin, kun asetat kohdistimen lähelle alaviivaa).
2. Lue scipy.io.wavfile.read -funktiolla ja poista tiedot wav -mallitiedostosta. Suorita pylab.fft tiedot läpi, se palauttaa sinulle teholuokan suuruusluettelon.
3. Etsi sitten luettelosta lähetetyn tehon enimmäismäärä. Etsi luetteloluettelo, jossa suurin teho esiintyy, koska nopein tapa löytää taajuus, joka liittyy kyseiseen tehoon. Palauta lopuksi maksimi taajuus. Koska meidän on myöhemmin syötettävä binääritaajuussignaali VHDL -koodiin, voimme muuntaa float -taajuuden binaariksi ja palauttaa sen.
Vaihe 5: Python-näytteenotto ja FFT (Näytä koodi ja sen tulokset)
Tässä vaiheessa kaikki hyvitykset menevät alla olevaan linkkiin näytteenottoa ja FFT: tä varten.
samcarcagno.altervista.org/blog/basic-sound… Koodimme:
Kun pylab ja scipy on asennettu, wav -tiedostot voidaan tuoda ja lukea.
pylab tuonnista*scipy.io import wavfilestä
sampFreq, snd = wavfile.read ('440_sine.wav')
Sitten snd.shape edustaa näytepisteitä ja kanavien lukumäärää. Meidän tapauksessamme näytepisteet riippuvat siitä, kuinka kauan wavfile on ja kanavien # on 2, koska se on stereo.
Sitten snd = snd / (2. ** 15) …… xlabel ('Aika (ms)')
järjestää aikasignaalin matriisiksi.
Sitten FFT luo taulukon taajuuden ja suuruuden (teho)
Sitten hetken silmukan kautta löydetään suurin suuruus ja siihen liittyvä taajuus, joka taajuus/2 edustaa wav -tiedoston korkeutta.
Sitten käyttämällä omaa koodiamme taajuutta edustava kokonaisluku muutettiin 12 -bittiseksi binääriluvuksi ja luotiin tekstitiedosto, jossa oli kyseinen numero.
Vaihe 6: Vivado (vertailija)
Tässä prosessin osassa tarvitsemme vertailua kahden tulotaajuuden vertaamiseksi.
1. Luo vertailun vertaamaan, onko tulo- (vastaanotin) taajuus korkeampi, matalampi vai 2 Hz: n marginaalialueella määritelty. (tyypillinen kitaraviritin vaihtelee välillä e2 - g5, 82 Hz - 784 Hz).
2. Kun luotiin 2 Hz: n marginaali, lisäsimme RCA: lla "000000000010" vastaanottimen taajuuteen ja tarkistimme, missä se on edelleen liian alhainen käyttäjän syöttämistä varten. Jos näin on, yksibittinen signaali "korkea" <= '0', "matala" <= '1'. Sitten lisätään "000000000010" käyttäjän syötteeseen ja tarkistetaan, onko vastaanottimen tulo vielä suurempi. Jos näin on, "korkea" <= "1", "matala" <= '0'. Kumpikaan tapaus ei palauta "0".
3. Koska moduulin seuraava osa tarvitsee tietyn 4-bittisen datan kertomaan, mitä vastaanotin on, ei vain kahden vertailulähdön (matala ja korkea) palauttamisen, meidän on palautettava koodiliitännäinen muistiinpanoon, joka yhdistää taajuus. Katso alla oleva kaavio:
C | 0011
C# | 1011
D | 0100
D# | 1100
E | 0101
F | 0110
F# | 1110
G | 0111
G# | 1111
A | 0001
A# | 1001
B | 0010
Käyttämällä useita if -lausekkeita luokitella ne muistiinpanoiksi ja koodata ne seitsemän segmentin dekooderin tarpeisiin.
Vaihe 7: KUVIA BASYS 3 -levystä
Vaihe 8: Vivado (7 segmentin dekooderi, jossa on multipleksointi)
Kaikki tarvitsee näytön. Se on tärkeä tekijä, joka määrittää suunnittelun arvon. Siksi meidän on luotava näyttö käyttämällä seitsemän segmentin dekooderia, jonka avulla voimme osoittaa kykymme suunnitella viritin B-levylle. Lisäksi se auttaisi meitä testauksessa ja virheenkorjauksessa.
Seitsemän segmentin dekooderi sisältää sisääntuloja nimeltä Note, low, high ja CLK. Yllä oleva kuva lohkokaaviosta auttaa meitä ymmärtämään suunnittelua.
Kahden erillisen matalan ja korkean sisääntulon tarkoituksena on antaa vertailijan suunnittelijalle vapaus manipuloida, onko äänen (aallon) taajuus suurempi tai pienempi kuin tulotaajuus (Fix_Hz), jota käyttäjä haluaa verrata. Lisäksi ulostulo SSEG edustaa seitsemän segmentin näyttöä ja vieressä olevaa pistettä, kun taas AN edustaa anodeja, joille seitsemän segmentin näyttö syttyy.
Tässä seitsemän segmentin dekooderissa kellolla (CLK) on tärkeä rooli kahden eri arvon näyttämisessä kahdessa tai useammassa eri anodissa. Koska Board ei salli meidän näyttää kahta eri arvoa samanaikaisesti, meidän on käytettävä multipleksointia arvon näyttämiseksi yksi kerrallaan, kun taas vaihdetaan toiseen arvoon riittävän nopeasti, jotta silmämme eivät pysty sieppaamaan sitä. Tässä kohtaa tulee CLK -tulo.
Lisätietoja saat lähdekoodista.
Vaihe 9: Vivado (komponenttien yhdistäminen)
Kun kaikki moduulit (python -vastaanotin, vertailija, seitsemän segmentin dekooderi jne.) On saatu valmiiksi, kootaan sitten isompaa moduulia käyttäen. Aivan kuten esillä olevan "Over view" -osion kuvan yhteydessä, yhdistämme jokainen signaali vastaavasti. Tarkista lähdekoodimme "SW_Hz.vhd".
Kiitos. Toivottavasti nautit.
Suositeltava:
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: 3 vaihetta
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: Seuraava opas auttaa sinua saamaan live-HD-videovirtoja lähes mistä tahansa DJI-dronesta. FlytOS -mobiilisovelluksen ja FlytNow -verkkosovelluksen avulla voit aloittaa videon suoratoiston droonilta
Pultti - DIY -langaton latauskello (6 vaihetta): 6 vaihetta (kuvilla)
Pultti - DIY -langaton latausyökello (6 vaihetta): Induktiiviset lataukset (tunnetaan myös nimellä langaton lataus tai langaton lataus) on langattoman voimansiirron tyyppi. Se käyttää sähkömagneettista induktiota sähkön tuottamiseen kannettaville laitteille. Yleisin sovellus on langaton Qi -latauslaite
Ukelele-viritin LabView'n ja NI USB-6008: n avulla: 5 vaihetta
Ukelele-viritin LabView'n ja NI USB-6008: n avulla: Ongelmapohjaisena oppimisprojektina LabVIEW & Instrumentaatiokurssilla Humber Collegessa (elektroniikkatekniikka) loin ukulele -virittimen, joka ottaisi analogisen tulon (ukulele -merkkijonoääni), löytää perustaajuuden
Kuinka tehdä slayer -viritin (samanlainen kuin Tesla -kela): 4 vaihetta
Slayer -virittimen tekeminen (samanlainen kuin Tesla -kela): Hei, Täällä aiomme tehdä tappaja -virittimen. Se on yksinkertainen piiri ja erittäin helppo tehdä