Sisällysluettelo:

Viritin: 9 vaihetta
Viritin: 9 vaihetta

Video: Viritin: 9 vaihetta

Video: Viritin: 9 vaihetta
Video: ЧИТАЕМ ПО-ФИНСКИ. MAARITIN VIRHE. OSA 9. 2024, Marraskuu
Anonim
Image
Image
Varustelista (ota kuva taulusta ja Kevin's Comp)
Varustelista (ota kuva taulusta ja Kevin's Comp)

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

Yleiskatsaus
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

Wav -tiedosto
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ö

Python- Pylabin ja Scipyn käyttötarkoitukset
Python- Pylabin ja Scipyn käyttötarkoitukset

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)

Vivado (vertailija)
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ä

KUVIA BASYS 3 -taulusta
KUVIA BASYS 3 -taulusta

Vaihe 8: Vivado (7 segmentin dekooderi, jossa on multipleksointi)

Vivado (7 segmentin dekooderi, jossa on multipleksointi)
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: