Taula de continguts:

Sintonitzador: 9 passos
Sintonitzador: 9 passos

Vídeo: Sintonitzador: 9 passos

Vídeo: Sintonitzador: 9 passos
Vídeo: Tuner Gradiente Model 9 2024, Juliol
Anonim
Image
Image
Llista d'equips (feu una foto del tauler i Kevin's Comp)
Llista d'equips (feu una foto del tauler i Kevin's Comp)

Aquest projecte va ser dissenyat per fabricar un afinador de guitarra mitjançant Vivado i una pantalla de 7 segments. Una vegada que el sintonitzador troba la freqüència del so introduït, el sintonitzador compararà aquest valor amb una llista de valors codificats per a freqüències exactes que es coneixen com a freqüència estàndard per al to correcte d'una nota. A continuació, el sintonitzador mostrarà la distància o la distància del so introduït de la nota desitjada. L’interessant és que una ona sonora és una combinació de múltiples formes d’ona sinusoïdals amb components reals i imaginaris. Tot i que això pot semblar difícil de treballar per a aquells que no estiguin familiaritzats, hi ha algunes maneres en què encara podem analitzar una ona amb valors reals i imaginaris.

Demostració:

Pas 1: Llista d'equips (feu una foto del tauler i de Kevin's Comp)

Primer necessitem una placa Basys 3 i un ordinador que admeti els següents programes: Garageband / Audacity o un altre DAW: per gravar a través d’un micròfon i exportar fitxers d’ona

Python: capaç d'utilitzar pylab i scipy per a mostreig i fft

Vivado: per connectar-se al tauler Basys 3 i veure visualment els resultats

Pas 2: Visió general

Visió general
Visió general

Un sintonitzador està format per pocs components importants: micròfon, sampler, FFT (Fast Fourier Transform), comparador, descodificador i pantalla. L’objectiu del micròfon és captar la forma d’ona d’entrada. El mostrejador rep el senyal de sortida del micròfon i utilitza el FFT per convertir el senyal en una sortida de magnitud en freqüències. A continuació, utilitzant la sortida del FFT i trobant la magnitud màxima i la freqüència associada dividida per 2, es pot trobar la freqüència associada amb el to de la forma d'ona. Aquest valor pot entrar al comparador. Després es compara amb una taula de cerca, que ja ha definit valors de freqüència per a to perfectes de totes les notes. Al comparador se li proporciona una entrada per a la nota desitjada, que pot fer coincidir la nota desitjada amb la freqüència correcta de la taula de cerca. A continuació, el comparador escollirà la nota amb la freqüència més propera a la freqüència màxima. El comparador compararà els dos valors i veurà com el valor de la freqüència és proper al desitjat i després posarà aquestes dades en un senyal. El comparador enviarà aquest senyal al descodificador, on el descodificador escollirà les entrades dels ànodes de la pantalla de 7 segments per mostrar la precisió de la nota.

Pas 3: fitxer WAV

Fitxer WAV
Fitxer WAV

En aquest pas, agafarem un fitxer wav d’un pitch i intentarem generar la freqüència d’aquest pitch.

Primer necessiteu un fitxer wav d’una nota. En aquest exemple utilitzarem un fitxer wav estèreo de 16 bits amb una freqüència de mostreig de 44,1 kHz. Això es pot crear en un DAW com Garageband o descarregar-lo. Per a aquest exemple, es pot descarregar una ona sinusoïdal A4 440Hz generada per nosaltres a Garageband aquí.

Pas 4: Python: usos de Pylab i Scipy

Python: usos de Pylab i Scipy
Python: usos de Pylab i Scipy

Hem utilitzat la biblioteca Python per fer la transformada de Fourier ràpida. El recurs en línia ens va permetre imitar i veure què és útil en pylab i scipy.

1. Si no heu instal·lat pylab o scipy, ho heu de fer. O bé, Pycharm té una funció molt bona, quan s’intenta importar pylab o scipy, hi ha un subratllat esquitxat que us indica que encara no heu instal·lat la biblioteca. A continuació, podeu instal·lar-les directament prement la bombeta vermella (apareixerà quan col·loqueu el cursor a prop del subratllat esquitxat).

2. Amb la funció scipy.io.wavfile.read, llegiu i traieu les dades del fitxer wav de mostra. Executeu les dades per pylab.fft, us mostrarà una llista de magnitud de la potència.

3. A continuació, busqueu el màxim de potència emesa a la llista. Cerqueu l’índex de llista on es produeix la potència màxima perquè la forma més ràpida de trobar quina freqüència s’associa amb aquesta potència. Finalment, torneu la freqüència màxima. Com que més endavant necessitem introduir un senyal de freqüència binària en codi VHDL, podem convertir la freqüència flotant en binària i retornar-la.

Pas 5: Python-Sampling i FFT (Mostra el codi i els seus resultats)

En aquest pas, els crèdits complets van a aquest enllaç següent per al mostreig i FFT.

samcarcagno.altervista.org/blog/basic-sound… El nostre codi:

Un cop instal·lats pylab i scipy, es poden importar i llegir fitxers wav.

des de la importació de pylab * des de la importació del fitxer wav scipy.io

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

A continuació, snd.shape representa els punts de mostra i el nombre de canals. En el nostre cas, els punts de mostra depenen de la longitud del fitxer d’ona i del nombre de canals 2, perquè és estèreo.

Aleshores snd = snd / (2. ** 15) …… xlabel ('Time (ms)')

organitza el senyal horari en una matriu.

A continuació, el FFT crea una matriu en freqüència i magnitud (Potència)

A continuació, a través d’un bucle de temps es troba la magnitud màxima i la freqüència associada a aquesta. Aquesta freqüència / 2 representa l’altura del fitxer d’ona.

A continuació, mitjançant el nostre propi codi, l’enter que representa la freqüència es va convertir en un número binari de 12 bits i es va crear un fitxer de text amb aquest número.

Pas 6: Vivado (comparador)

Vivado (Comparador)
Vivado (Comparador)

En aquesta part del procés, necessitem un comparador per comparar dues freqüències d’entrada.

1. S'ha creat un comparador per comparar si la freqüència d'entrada (receptor) és més alta, inferior o dins del marge de 2 Hz de la nota definida. (el sintonitzador de guitarra típic oscil·la entre e2 i g5, 82 Hz a 784 Hz).

2. En crear un marge de 2 Hz, hem utilitzat un RCA per afegir "000000000010" a la freqüència del receptor i comprovar on encara és massa baix per a l'entrada de l'usuari. Si és així, el senyal de bit únic és "alt" <= '0', "baix" <= '1'. A continuació, afegim "000000000010" a l'entrada de l'usuari per veure si l'entrada del receptor és fins i tot superior a aquesta. Si és així, "alt" <= '1', "baix" <= '0'. Cap dels dos casos retornaria "0".

3. Com que la següent part del mòdul necessita dades específiques de 4 bits per saber què és la nota del receptor, no només es retornen les 2 sortides comparatives (baixa i alta), hem de retornar el codi associat a nota, que s’associa amb la freqüència. Consulteu el quadre següent:

C | 0011

C # | 1011

D | 0100

D # | 1100

E | 0101

F | 0110

F # | 1110

G | 0111

G # | 1111

A | 0001

A # | 1001

B | 0010

Utilitzant diverses sentències if per classificar-les en notes i codificar-les en allò que es necessita per al descodificador de set segments.

Pas 7: FOTOS DE BASYS 3 Tauler

FOTOS DE BASYS 3 Tauler
FOTOS DE BASYS 3 Tauler

Pas 8: Vivado (descodificador de 7 segments amb multiplexació)

Vivado (descodificador de 7 segments amb multiplexació)
Vivado (descodificador de 7 segments amb multiplexació)

Tot necessita una pantalla. És un factor important que determina el valor d’un disseny. Per tant, hem de crear una pantalla amb un descodificador de set segments, que ens permeti demostrar la nostra capacitat per dissenyar un sintonitzador a la placa B. A més, ens ajudaria a provar i depurar.

Un descodificador de set segments conté entrades anomenades Note, low, high i CLK, mentre que publica SSEG, AN i Fiz_Hz. Hi ha una imatge del diagrama de blocs anterior per ajudar-nos a entendre el disseny.

El propòsit de tenir dues entrades altes i baixes és proporcionar al dissenyador del comparador la llibertat de manipular si la freqüència de so (ona) és superior o inferior a la freqüència d’entrada (Fix_Hz) que l’usuari vol comparar. A més, la sortida SSEG representa la visualització dels set segments i el punt següent, mentre que l'AN representa els ànodes per als quals es mostrarà el conjunt dels set segments.

En aquest descodificador de set segments, el rellotge (CLK) té un paper important en la visualització de dos valors diferents en dos o més ànodes diferents. Com que la Junta no ens permet mostrar dos valors diferents al mateix temps, hem d’utilitzar la multiplexació per mostrar un valor d’un en un, alhora que canviem a un altre valor prou ràpid com perquè els nostres ulls no puguin captar-lo. Aquí és on entra en joc l’entrada CLK.

Per obtenir més informació, consulteu el codi font.

Pas 9: Vivado (combinació de components)

Amb tots els mòduls (receptor de python, comparador, descodificador de set segments, etc.) completats, ens ajuntem amb un mòdul més gran. Igual que la imatge que es mostra a la secció "Vista general", connectem cada senyal en conseqüència. Com a referència, consulteu el nostre codi font "SW_Hz.vhd".

Gràcies. Espero que gaudeixis.

Recomanat: