Tartalomjegyzék:

Tuner: 9 lépés
Tuner: 9 lépés

Videó: Tuner: 9 lépés

Videó: Tuner: 9 lépés
Videó: Тюнинг лодочного мотора Yamaha 9,9 в 15 л.с. с лепестками Boyesen) 2024, Július
Anonim
Image
Image
Felszerelési lista (készítsen egy képet a tábláról és Kevin Comp -ról)
Felszerelési lista (készítsen egy képet a tábláról és Kevin Comp -ról)

A projekt célja, hogy gitárhangolót készítsen Vivado és 7 szegmenses kijelző segítségével. Amint a tuner megtalálja a bevitt hang frekvenciáját, a tuner összehasonlítja ezt az értéket a kemény frekvenciájú értékek listájával a pontos frekvenciákhoz, amelyeket szabványos frekvenciának neveznek a hang megfelelő hangmagasságához. Ezután a tuner megjeleníti, hogy a bevitt hang milyen közel vagy távol van a kívánt hangtól. Érdekes, hogy a hanghullám több szinuszos hullámforma kombinációja valós és képzeletbeli komponensekkel. Bár ez ismeretlenek számára nehezen használható, néhány módszerrel mégis elemezhetjük a hullámot valós és képzelt értékekkel.

Demó:

1. lépés: Felszerelési lista (készítsen egy képet a tábláról és Kevin Comp -ról)

Először is szükségünk van egy Basys 3 kártyára és egy számítógépre, amely támogatja a következő programokat. Garageband/Audacity vagy más DAW - mikrofonon keresztül történő rögzítéshez és wav fájlok exportálásához

Python - képes a pylab és a scipy használatára mintavételre és fft -re

Vivado - csatlakozni a Basys 3 táblához, és vizuálisan látni az eredményeket

2. lépés: Áttekintés

Áttekintés
Áttekintés

A tuner néhány fontos összetevőből áll: mikrofonból, mintavevőből, FFT (Fast Fourier Transform), összehasonlítóból, dekódolóból és kijelzőből. A mikrofon célja a bemeneti hullámforma rögzítése. A mintavevő fogadja a mikrofon kimeneti jelét, és az FFT segítségével átalakítja a jelet nagyságrendű kimenetre a frekvenciákban. Ezután az FFT kimenetét felhasználva és a maximális nagyságot és a hozzá tartozó frekvenciát 2 -vel osztva megtalálható a hullámforma hangmagasságához tartozó frekvencia. Ez az érték akkor kerülhet az összehasonlítóba. Ezt követően összehasonlítjuk egy keresőtáblával, amely már beállította a frekvenciaértékeket az összes hang tökéletes hangmagasságához. Az összehasonlító egy bemenetet kap a kívánt hangjegyhez, amelyet ezután a keresési táblázatból a kívánt hangnak megfelelő frekvenciájához tud igazítani. Ezután az összehasonlító kiválasztja a maximális frekvenciához legközelebb eső hangot. Az összehasonlító összehasonlítja a két értéket, és látja, hogy a frekvencia értéke közel van a kívánt értékhez, majd ezeket az adatokat egy jelbe helyezi. A komparátor elküldi ezt a jelet a dekódolónak, ahol a dekóder kiválasztja a bemeneteket a 7 szegmenses kijelző anódjaihoz, hogy megmutassa a hang pontosságát.

3. lépés: Wav fájl

Wav fájl
Wav fájl

Ebben a lépésben egy hangmagot tartalmazó wav fájlt veszünk, és megpróbáljuk kiadni a hangmagasság frekvenciáját.

Először egy jegyzet wav fájljára van szüksége. Ebben a példában egy 16 bites sztereó wav fájlt fogunk használni, mintavételi gyakorisága 44,1 kHz. Ez létrehozható DAW -ban, például Garageband -ben, vagy letölthető. Ebben a példában letölthető innen a Garageband által generált A4 -es 440 Hz -es szinuszhullám.

4. lépés: Python- A Pylab és a Scipy használata

Python- A Pylab és a Scipy felhasználása
Python- A Pylab és a Scipy felhasználása

A Python könyvtárat használtuk a „Fast Fourier transzformáció” elvégzéséhez. Az online erőforrás lehetővé tette számunkra, hogy utánozzuk és megnézzük, mi hasznos a pylab és a scipy alkalmazásban.

1. Ha még nem telepítette a pylab vagy a scipy programot, akkor ezt meg kell tennie. Vagy a Pycharmnak van egy nagyon jó tulajdonsága, amikor a pylab vagy a scipy importálásával próbálkozik, akkor egy csípős aláhúzás jelzi, hogy még nem telepítette a könyvtárat. Ezután közvetlenül telepítheti őket, ha megnyomja a piros izzót (ez akkor jelenik meg, ha a kurzort az egyenes aláhúzás közelébe helyezi).

2. A scipy.io.wavfile.read funkció használatával olvassa el és húzza ki az adatokat a minta wav fájlból. Futtassa az adatokat a pylab.fft segítségével, és visszaadja a teljesítmény nagyságrendjét.

3. Ezután keresse meg a listából kibocsátott maximális teljesítményt. Keresse meg a listaindexet, ahol a maximális teljesítmény fordul elő, mert a leggyorsabb módja annak, hogy megtalálja az adott teljesítményhez tartozó frekvenciát. Végül adja vissza a maximális frekvenciát. Mivel később bináris frekvenciajelet kell bevinni a VHDL kódba, a floatban lévő frekvenciát binárisra konvertálhatjuk, és visszaadhatjuk.

5. lépés: Python-Sampling és FFT (Kód és eredményeinek megjelenítése)

Ebben a lépésben a teljes jóváírást az alábbi linkre kattintva tekintheti meg a mintavételhez és az FFT -hez.

samcarcagno.altervista.org/blog/basic-sound…Kódunk:

A pylab és a scipy telepítése után a wav fájlok importálhatók és olvashatók.

a pylab importból*a scipy.io import wavfile -ből

sampFreq, snd = wavfile.read ('440_sine.wav')

Ekkor az snd.shape képviseli a mintapontokat és a csatornák számát. Esetünkben a mintapontok attól függnek, hogy milyen hosszú a wavfile, és a csatornák száma 2, mert sztereó.

Ekkor snd = snd / (2. ** 15) …… xlabel ('Idő (ms)')

tömbbe rendezi az időjelet.

Ezután az FFT létrehoz egy tömböt frekvenciában és nagyságrendben (teljesítmény)

Ezután egy cikluson keresztül megtalálható a maximális nagyság és a hozzá tartozó frekvencia. Ez a frekvencia/2 a wavfile hangmagasságát jelenti.

Ezután saját kódunk segítségével a frekvenciát reprezentáló egész számot 12 bites bináris számmá alakítottuk át, és egy szöveges fájlt hoztunk létre, amelyben ez a szám szerepel.

6. lépés: Vivado (összehasonlító)

Vivado (összehasonlító)
Vivado (összehasonlító)

A folyamat ezen részében összehasonlítóra van szükségünk két bemeneti frekvencia összehasonlításához.

1. Létrehozott egy összehasonlítót annak összehasonlítására, hogy a bemeneti (vevő) frekvencia magasabb, alacsonyabb vagy a 2 Hz -es határtartományban meghatározott megjegyzés. (a tipikus gitárhangoló az e2 -től a g5 -ig terjed, 82 Hz és 784 Hz között).

2. A 2 Hz -es margó létrehozásakor egy RCA segítségével „000000000010” értéket adtunk a vevő frekvenciájához, és ellenőriztük, hol van még túl alacsony a felhasználói bevitelhez. Ebben az esetben az egybites jel „magas” <= ‘0’, “alacsony” <= ‘1’. Ezután hozzáadjuk a „000000000010” értéket a felhasználói bemenethez, hogy lássuk, hogy a vevő bemenete még ennél is magasabb -e. Ha ez a helyzet, akkor „magas” <= ‘1’, „alacsony” <=’0’. Egyik eset sem ad vissza 0 -t.

3. Mivel a modul következő részének speciális 4 bites adatokra van szüksége ahhoz, hogy megmondja, mi a vevőjegyzet, és nem csak a két összehasonlító kimenetet (alacsony és magas), hanem vissza kell adnunk a kódhoz társított megjegyzést, amely a frekvencia. Kérjük, nézze meg az alábbi táblázatot:

C | 0011

C# | 1011

D | 0100

D# | 1100

E | 0101

F | 0110

F# | 1110

G | 0111

G# | 1111

A | 0001

A# | 1001

B | 0010

Több if utasítás használata jegyzetbe soroláshoz és a hét szegmenses dekódolóhoz szükséges kódolásához.

7. lépés: BASYS KÉPEK 3 Tábla

KÉPEK BASYS 3 Tábla
KÉPEK BASYS 3 Tábla

8. lépés: Vivado (7 szegmenses dekódoló multiplexeléssel)

Vivado (7 szegmenses dekódoló multiplexeléssel)
Vivado (7 szegmenses dekódoló multiplexeléssel)

Mindennek szüksége van egy kijelzőre. Ez egy fontos tényező, amely meghatározza a design értékét. Ezért létre kell hoznunk egy kijelzőt hét szegmensű dekóder használatával, amely lehetővé tenné számunkra, hogy bemutassuk azon képességünket, hogy tunert tervezzünk a B táblán. Ezenkívül segítene a tesztelésben és a hibakeresésben.

A hét szegmensből álló dekóder Note, low, high és CLK nevű bemeneteket tartalmaz, miközben SSEG, AN és Fiz_Hz kimenetet ad ki. A fenti tömbvázlat képe segít megérteni a tervezést.

A két különálló alacsony és magas bemenet célja, hogy az összehasonlító tervezőjének szabadon manipulálhassa, hogy a hang (hullám) frekvenciája magasabb vagy alacsonyabb -e, mint a felhasználó által összehasonlítani kívánt bemeneti frekvencia (Fix_Hz). Ezenkívül a kimeneti SSEG a hét szegmens kijelzőjét és a mellette lévő pontot jelöli, míg az AN azt az anódot jelöli, amelyhez a hét szegmens kijelzése világít.

Ebben a hét szegmenses dekódolóban az óra (CLK) fontos szerepet játszik két különböző érték két vagy több különböző anódon történő megjelenítésében. Mivel a tábla nem teszi lehetővé két különböző érték egyidejű megjelenítését, a multiplexelést kell használnunk egy -egy érték megjelenítéséhez, miközben olyan gyorsan kell átváltanunk egy másik értékre, hogy a szemünk nem tudja rögzíteni. Itt jön szóba a CLK bemenet.

További információt a forráskódban talál.

9. lépés: Vivado (összetevők kombinálása)

Minden modul (python vevő, összehasonlító, hét szegmenses dekóder stb.) Elkészülte után a nagyobb modul segítségével állítottuk össze. Akárcsak az "Áttekintés" szakasz alatt látható kép, mi is minden jelet ennek megfelelően csatlakoztatunk. Referenciaként ellenőrizze az "SW_Hz.vhd" forráskódunkat.

Köszönöm. Remélem élvezed.

Ajánlott: