Innholdsfortegnelse:

Tuner: 9 trinn
Tuner: 9 trinn

Video: Tuner: 9 trinn

Video: Tuner: 9 trinn
Video: How to connect a TV Box or a TV to a wired ethernet connection 2024, Juli
Anonim
Image
Image
Utstyrsliste (ta et bilde av brettet og Kevin's Comp)
Utstyrsliste (ta et bilde av brettet og Kevin's Comp)

Dette prosjektet ble designet for å lage en gitar tuner ved hjelp av Vivado og en 7-segment skjerm. Når tuneren har funnet frekvensen for den innsendte lyden, vil tuneren sammenligne denne verdien med en liste med hardkodede verdier for eksakte frekvenser som er kjent som standardfrekvensen for den korrekte tonehøyden til et notat. Deretter viser tuneren hvor nær eller langt lyden din er fra ønsket tone. Det som er interessant er at en lydbølge er en kombinasjon av flere sinusformede bølgeformer med virkelige og imaginære komponenter. Selv om dette kan virke vanskelig å jobbe med for de ukjente, er det noen få måter vi fortsatt kan analysere en bølge med virkelige og imaginære verdier.

Demo:

Trinn 1: Utstyrsliste (ta et bilde av brettet og Kevin's Comp)

Først trenger vi et Basys 3 -kort og en datamaskin som støtter følgende programmer: Garageband/Audacity eller en annen DAW - for å ta opp gjennom en mikrofon og eksportere wavfiler

Python - i stand til å bruke pylab og scipy for prøvetaking og fft

Vivado - for å koble til Basys 3 -kortet og visuelt se resultatene

Trinn 2: Oversikt

Oversikt
Oversikt

En tuner består av få viktige komponenter: mikrofon, sampler, FFT (Fast Fourier Transform), komparator, dekoder og skjerm. Formålet med mikrofonen er å fange inngangsbølgeformen. Sampleren mottar mikrofonens utgangssignal og bruker FFT for å konvertere signalet til en utgang med størrelsesorden i frekvenser. Deretter kan du bruke utgangen til FFT og finne maksimal størrelse og frekvensen knyttet til den delt med 2, og finne frekvensen knyttet til bølgeformens tonehøyde. Denne verdien kan deretter gå inn i komparatoren. Den blir deretter sammenlignet med en oppslagstabell, som allerede har angitt frekvensverdier for perfekte tonehøyder for alle notater. Komparatoren får en inndata for ønsket note, som den deretter kan matche ønsket note til den korrekte frekvensen fra oppslagstabellen. Deretter vil komparatoren velge notatet med den nærmeste frekvensen til maksfrekvensen. Komparatoren vil sammenligne de to verdiene og se stenge verdien av frekvensen er til den ønskede og deretter sette dataene inn i et signal. Komparatoren sender dette signalet til dekoderen, der dekoderen vil velge inngangene for anodene på 7-segmentet display for å vise nøyaktigheten av notatet.

Trinn 3: Wav -fil

Wav -fil
Wav -fil

I dette trinnet tar vi en wav -fil med en tonehøyde og prøver å sende ut frekvensen for den tonehøyden.

Først trenger du en wav -fil med et notat. I dette eksemplet bruker vi en 16 -biters stereo wav -fil med en samplingsfrekvens på 44,1 kHz. Dette kan enten opprettes i en DAW som Garageband eller lastes ned. For dette eksempelet kan en A4 440Hz sinusbølge generert av oss på Garageband lastes ned her.

Trinn 4: Python- Bruk av Pylab og Scipy

Python- Bruk av Pylab og Scipy
Python- Bruk av Pylab og Scipy

Vi brukte Python -biblioteket for å gjøre "Fast Fourier -transformering". Online ressurser tillot oss å etterligne og se hva som er nyttig i pylab og scipy.

1. Hvis du ikke har installert pylab eller scipy, må du gjøre det. Eller, Pycharm har en veldig god funksjon. Når du prøver å importere pylab eller scipy, er det en krøllete understreking som forteller deg at du ikke har installert biblioteket ennå. Du kan deretter installere dem direkte ved å trykke på den røde lyspæren (den kommer til syne når du setter markøren nær den krøllete understrekningen).

2. Bruk funksjonen scipy.io.wavfile.read til å lese og trekke ut data fra eksempel -wav -filen. Kjør gjennom dataene med pylab.fft, det vil gi deg en størrelsesliste for effekten.

3. Finn deretter maks for effekten som sendes ut fra listen. Se etter listeindeksen hvor maks effekt oppstår fordi den raskere måten å finne hvilken frekvens som er knyttet til den effekten. Til slutt returnerer du maksfrekvensen. Siden vi senere må legge inn et binært frekvenssignal i VHDL -kode, kan vi konvertere frekvens i float til binær og returnere den.

Trinn 5: Python-prøvetaking og FFT (Vis kode og dens resultater)

I dette trinnet går hele kreditter til denne lenken nedenfor for prøvetaking og FFT.

samcarcagno.altervista.org/blog/basic-sound…Vår kode:

Etter at pylab og scipy er installert, kan wav -filer importeres og leses.

fra pylab import*fra scipy.io import wavfile

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

Deretter representerer snd.shape prøvepunktene og antall kanaler. I vårt tilfelle avhenger prøvepunktene av hvor lang wav -filen er og antall kanaler er 2 fordi den er stereo.

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

organiserer tidssignalet i en matrise.

Deretter lager FFT en matrise i frekvens og størrelse (effekt)

Så gjennom en stund -sløyfe blir den maksimale størrelsen og frekvensen knyttet til den funnet. Denne frekvensen/2 representerer bølgefilens tonehøyde.

Ved å bruke vår egen kode ble heltallet som representerer frekvensen konvertert til et 12 -biters binært tall, og en tekstfil ble opprettet med det tallet i det.

Trinn 6: Vivado (komparator)

Vivado (komparator)
Vivado (komparator)

I denne delen av prosessen trenger vi en komparator for å sammenligne to inngangsfrekvenser.

1. Opprettet en komparator for å sammenligne om inngangsfrekvensen (mottaker) er høyere, lavere eller innenfor 2 Hz marginområdet definert notat. (typisk gitar -tuner varierer fra e2 til g5, 82 Hz til 784 Hz).

2. Når vi oppretter en margin på 2 Hz, brukte vi en RCA for å legge til “000000000010” i mottakerfrekvensen, og sjekke hvor den fortsatt er for lav for brukerinngang. Hvis det er tilfelle, signalerer single bit “high” <= ‘0’, “low” <= ‘1’. Deretter legger vi til “000000000010” til brukerinngangen for å se om mottakerinngangen er enda høyere enn det. Hvis det er tilfellet, "høy" <= '1', 'lav' <= '0'. Ingen av sakene ville begge returnere ‘0’.

3. Siden den neste delen av modulen trenger spesifikke 4-bits data for å fortelle hva mottakernotatet er, ikke bare å returnere de 2 komparative utgangene (lav og høy), må vi returnere koden assosiert til notat, som knytter seg til frekvensen. Se tabellen nedenfor:

C | 0011

C# | 1011

D | 0100

D# | 1100

E | 0101

F | 0110

F# | 1110

G | 0111

G# | 1111

A | 0001

A# 1001

B | 0010

Bruke flere if -setninger for å kategorisere dem i notater og kode dem inn i det som trengs for dekoderen med syv segmenter.

Trinn 7: BILDER AV BASYS 3 Board

BILDER AV BASYS 3 Board
BILDER AV BASYS 3 Board

Trinn 8: Vivado (7 -segmenters dekoder med multipleksing)

Vivado (7 -segmenters dekoder med multipleksing)
Vivado (7 -segmenters dekoder med multipleksing)

Alt trenger en visning. Det er en viktig faktor som bestemmer verdien av et design. Derfor må vi lage en skjerm ved hjelp av syv-segmenters dekoder, som vil tillate oss å demonstrere vår evne til å designe en tuner på B-tavlen. Det ville også hjelpe oss med testing og feilsøking.

En dekoder med syv segmenter inneholder innganger som heter Note, low, high og CLK, mens SSEG, AN og Fiz_Hz sendes ut. Det er et bilde av blokkdiagrammet ovenfor for å hjelpe oss å forstå designet.

Hensikten med å ha to separate med lave og høye innganger er å gi designeren av komparatoren friheten til å manipulere om lydfrekvensen (bølgen) er høyere eller lavere enn inngangsfrekvensen (Fix_Hz) brukeren ønsker å sammenligne. I tillegg representerer utgangen SSEG de syv segmentene som vises og prikken ved siden av mens AN representerer anodene som settet av de syv segmentene viser for å lyse.

I denne syv-segmenters dekoder spiller klokken (CLK) en viktig rolle for å vise to forskjellige verdier på to eller flere forskjellige anoder. Siden styret ikke tillater oss å vise to forskjellige verdier samtidig, må vi bruke multipleksing for å vise en verdi om gangen, mens vi bytter til en annen verdi raskt nok til at øynene våre ikke kan fange den. Det er her CLK -inngangen spiller inn.

For mer informasjon, se kildekoden.

Trinn 9: Vivado (kombinere komponenter)

Når hver modul (pythonmottaker, komparator, syv segmentdekoder, etc.) er fullført, setter vi sammen en større modul. På samme måte som bildet under delen "Oversikt", kobler vi hvert signal deretter. For referanse, vennligst sjekk kildekoden "SW_Hz.vhd".

Takk skal du ha. Håper du nyter.

Anbefalt: