Cuprins:

Tuner: 9 pași
Tuner: 9 pași

Video: Tuner: 9 pași

Video: Tuner: 9 pași
Video: Ishu Maa tune r pasi aaj araj li aanavra🌺 👍🌹ઈસુ માં તુનેર પસી આજ અરજ લી આનાવર i 2024, Noiembrie
Anonim
Image
Image
Lista echipamentelor (luați o imagine a tabloului și a lui Kevin's Comp)
Lista echipamentelor (luați o imagine a tabloului și a lui Kevin's Comp)

Acest proiect a fost conceput pentru a realiza un tuner de chitară folosind Vivado și un afișaj pe 7 segmente. Odată ce tunerul găsește frecvența sunetului introdus, tunerul va compara acea valoare cu o listă de valori codificate pentru frecvențe exacte care sunt cunoscute ca frecvență standard pentru tonul corect al unei note. Apoi, tunerul va afișa cât de aproape sau de departe este sunetul introdus de nota dorită. Ceea ce este interesant este că o undă sonoră este o combinație de forme de undă sinusoidale multiple cu componente reale și imaginare. Deși acest lucru poate părea dificil de lucrat cu cei necunoscuți, există câteva modalități prin care putem analiza în continuare un val cu valori reale și imaginare.

Demo:

Pasul 1: Lista echipamentelor (faceți o imagine a tabloului și a lui Kevin's Comp)

Mai întâi avem nevoie de o placă Basys 3 și un computer care acceptă următoarele programe: Garageband / Audacity sau alt DAW - pentru a înregistra printr-un microfon și a exporta fișiere de undă

Python - capabil să folosească pylab și scipy pentru eșantionare și fft

Vivado - pentru a vă conecta la placa Basys 3 și a vedea vizual rezultatele

Pasul 2: Prezentare generală

Prezentare generală
Prezentare generală

Un tuner este format din câteva componente importante: microfon, sampler, FFT (Fast Fourier Transform), comparator, decodor și afișaj. Scopul microfonului este de a captura forma de undă de intrare. Samplerul primește semnalul de ieșire al microfonului și folosește FFT pentru a converti semnalul într-o ieșire de mărime în frecvențe. Apoi, utilizând ieșirea FFT și găsind magnitudinea maximă și frecvența asociată cu aceasta împărțită la 2, se poate găsi frecvența asociată cu pasul formei de undă. Această valoare poate intra apoi în comparator. Apoi este comparat cu un tabel de căutare, care a stabilit deja valori de frecvență pentru tonuri perfecte ale tuturor notelor. Comparatorului i se oferă o intrare pentru nota dorită, pe care o poate potrivi apoi cu nota dorită cu frecvența corectă din tabelul de căutare. Apoi comparatorul va alege nota cu cea mai apropiată frecvență de frecvența maximă. Comparatorul va compara cele două valori și va vedea că valoarea frecvenței este apropiată de cea dorită și apoi va pune acele date într-un semnal. Comparatorul va trimite acel semnal către decodor, unde decodorul va alege intrările pentru anodii afișajului pe 7 segmente pentru a arăta acuratețea notei.

Pasul 3: fișier Wav

Fișier Wav
Fișier Wav

În acest pas, vom lua un fișier wav al unui pitch și vom încerca să scoatem frecvența acelui pitch.

Mai întâi aveți nevoie de un fișier wav al unei note. În acest exemplu vom folosi un fișier wav stereo pe 16 biți cu o rată de eșantionare de 44,1kHz. Acest lucru poate fi creat fie într-un DAW, cum ar fi Garageband, fie descărcat. Pentru acest exemplu, o undă sinusoidală A4 440Hz generată de noi pe Garageband poate fi descărcată de aici.

Pasul 4: Python - Utilizările Pylab și Scipy

Python- Utilizările Pylab și Scipy
Python- Utilizările Pylab și Scipy

Am folosit biblioteca Python pentru a face „transformarea Fourier rapidă”. Resursa online ne-a permis să imităm și să vedem ce este util în pylab și scipy.

1. Dacă nu ați instalat pylab sau scipy, trebuie să faceți acest lucru. Sau, Pycharm are o caracteristică foarte bună, atunci când ați încercat să importați pylab sau scipy, există o subliniere care vă spune că nu ați instalat încă biblioteca. Apoi le puteți instala direct apăsând becul roșu (va apărea atunci când puneți cursorul lângă linia subliniată).

2. Folosind funcția scipy.io.wavfile.read, citiți și extrageți datele din fișierul WAV eșantion. Executați datele prin pylab.fft, acesta vă va întoarce o listă de mărime a puterii.

3. Apoi găsiți puterea maximă emisă din listă. Căutați indexul listei în care apare puterea maximă, deoarece este modalitatea mai rapidă de a afla ce frecvență se asociază cu acea putere. În cele din urmă returnați frecvența maximă. Deoarece mai târziu trebuie să introducem un semnal de frecvență binară în codul VHDL, putem converti frecvența în float în binar și să o returnăm.

Pasul 5: Python-Sampling și FFT (Afișați codul și rezultatele acestuia)

În acest pas, creditele complete merg la acest link de mai jos pentru eșantionare și FFT.

samcarcagno.altervista.org/blog/basic-sound… Codul nostru:

După ce pylab și scipy au fost instalate, fișierele WAV pot fi importate și citite.

din import pylab * din scipy.io import wavfile

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

Apoi snd.shape reprezintă punctele de eșantionare și numărul de canale. În cazul nostru, punctele de eșantionare depind de cât de lung este fișierul de undă și numărul de canale este 2, deoarece este stereo.

Apoi snd = snd / (2. ** 15) …… xlabel („Timp (ms)”)

organizează semnalul orar într-o matrice.

Apoi FFT creează o matrice în frecvență și magnitudine (Putere)

Apoi, printr-o buclă de timp, se găsește magnitudinea maximă și frecvența asociată cu ea. Această frecvență / 2 reprezintă pasul fișierului de undă.

Apoi, folosind propriul nostru cod, întregul care reprezintă frecvența a fost convertit într-un număr binar de 12 biți și a fost creat un fișier text cu acel număr în el.

Pasul 6: Vivado (comparator)

Vivado (comparator)
Vivado (comparator)

În această parte a procesului, avem nevoie de un comparator pentru a compara două frecvențe de intrare.

1. A fost creat un comparator pentru a compara dacă frecvența de intrare (receptor) este mai mare, mai mică sau în limita de 2 Hz notă definită. (tunerul tipic pentru chitară variază de la e2 la g5, de la 82 Hz la 784 Hz).

2. Când am creat o marjă de 2 Hz, am folosit un RCA pentru a adăuga „000000000010” la frecvența receptorului și a verifica unde este încă prea scăzut pentru intrarea utilizatorului. Dacă acesta este cazul, semnalul cu un singur bit „înalt” <= ‘0’, „scăzut” <= ‘1’. Apoi adăugăm „000000000010” la intrarea utilizatorului pentru a vedea dacă intrarea receptorului este chiar mai mare decât aceasta. Dacă acesta este cazul, „ridicat” <= ‘1’, „scăzut” <= ‘0’. Niciunul dintre cazuri nu ar returna „0”.

3. Deoarece următoarea parte a modulului are nevoie de date specifice pe 4 biți pentru a spune care este nota receptorului, nu numai returnarea celor 2 ieșiri comparative (joasă și înaltă), trebuie să returnăm codul asociat la notă, care se asociază cu frecventa. Vă rugăm să consultați graficul de mai jos:

C | 0011

C # | 1011

D | 0100

D # | 1100

E | 0101

F | 0110

F # | 1110

G | 0111

G # | 1111

A | 0001

A # | 1001

B | 0010

Folosind mai multe instrucțiuni if pentru a le clasifica în note și a le codifica în ceea ce este necesar pentru decodorul de șapte segmente.

Pasul 7: IMAGINILE BAZEI 3 Tablou

IMAGINILE BAZEI 3 Tablou
IMAGINILE BAZEI 3 Tablou

Pasul 8: Vivado (Decodor cu 7 segmente cu multiplexare)

Vivado (decodor cu 7 segmente cu multiplexare)
Vivado (decodor cu 7 segmente cu multiplexare)

Totul are nevoie de un afișaj. Este un factor important care determină valoarea unui design. Prin urmare, trebuie să creăm un afișaj folosind un decodor cu șapte segmente, care să ne permită să demonstrăm capacitatea noastră de a proiecta un tuner pe placa B. De asemenea, ne-ar ajuta în testare și depanare.

Un decodor cu șapte segmente conține intrări denumite Note, low, high și CLK, în timp ce scoate SSEG, AN și Fiz_Hz. Există o imagine a schemei bloc de mai sus pentru a ne ajuta să înțelegem proiectarea.

Scopul de a avea două intrări separate de intrări joase și înalte este de a oferi proiectantului comparatorului libertatea de a manipula dacă frecvența sunetului (undelor) este mai mare sau mai mică decât frecvența de intrare (Fix_Hz) pe care utilizatorul dorește să o compare. În plus, ieșirea SSEG reprezintă afișajul celor șapte segmente și punctul de lângă, în timp ce AN reprezintă anodii pentru care setul celor șapte segmente se afișează să se aprindă.

În acest decodor cu șapte segmente, ceasul (CLK) joacă un rol important în afișarea a două valori diferite pe doi sau mai mulți anodi diferiți. Deoarece Consiliul nu ne permite să afișăm două valori diferite în același timp, trebuie să folosim multiplexarea pentru a afișa o valoare pe rând, în timp ce trecem la o altă valoare suficient de rapid încât ochii noștri nu o pot capta. Aici intră în joc intrarea CLK.

Pentru mai multe informații, vă rugăm să consultați codul sursă.

Pasul 9: Vivado (Combinarea componentelor)

Odată ce fiecare modul (receptor python, comparator, decodor cu șapte segmente etc.) a fost finalizat, am pus împreună împreună cu modulul mai mare. La fel ca imaginea din secțiunea „Peste vedere” afișată, conectăm fiecare semnal în consecință. Pentru referință, vă rugăm să verificați codul sursă „SW_Hz.vhd”.

Mulțumesc. Sper sa iti placa.

Recomandat: