Indholdsfortegnelse:
- Trin 1: Udstyrsliste (tag et billede af tavlen og Kevins komp)
- Trin 2: Oversigt
- Trin 3: Wav -fil
- Trin 4: Python- Anvendelse af Pylab og Scipy
- Trin 5: Python-sampling og FFT (Vis kode og dens resultater)
- Trin 6: Vivado (komparator)
- Trin 7: BILLEDER AF BASYS 3 Board
- Trin 8: Vivado (7 segmenters dekoder med multiplexering)
- Trin 9: Vivado (Kombinerende komponenter)
Video: Tuner: 9 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Dette projekt blev designet til at lave en guitar tuner ved hjælp af Vivado og et 7-segment display. Når tuneren har fundet frekvensen af den indlæste lyd, vil tuneren sammenligne denne værdi med en liste over hårdkodede værdier for nøjagtige frekvenser, der er kendt som standardfrekvensen for den korrekte tonehøjde for en note. Derefter viser tuneren, hvor tæt eller langt din indlæste lyd er fra din ønskede note. Det interessante er, at en lydbølge er en kombination af flere sinusformede bølgeformer med virkelige og imaginære komponenter. Selvom det kan virke svært at arbejde med dem, der ikke kender, er der et par måder, hvorpå vi stadig kan analysere en bølge med virkelige og imaginære værdier.
Demo:
Trin 1: Udstyrsliste (tag et billede af tavlen og Kevins komp)
Først skal vi bruge et Basys 3 -kort og en computer, der understøtter følgende programmer: Garageband/Audacity eller en anden DAW - for at optage via en mikrofon og eksportere wavfiler
Python - i stand til at bruge pylab og scipy til prøveudtagning og fft
Vivado - for at oprette forbindelse til Basys 3 -kortet og visuelt se resultaterne
Trin 2: Oversigt
En tuner består af få vigtige komponenter: mikrofon, sampler, FFT (Fast Fourier Transform), komparator, dekoder og display. Formålet med mikrofonen er at fange inputbølgeformen. Sampleren modtager mikrofonens udgangssignal og bruger FFT til at konvertere signalet til et output med en størrelse i frekvenser. Ved derefter at bruge output fra FFT og finde den maksimale størrelse og den tilhørende frekvens divideret med 2, kan frekvensen, der er forbundet med bølgeformens tonehøjde, findes. Denne værdi kan derefter gå ind i komparatoren. Det sammenlignes derefter med en opslagstabel, som allerede har indstillet frekvensværdier for perfekte tonehøjder for alle noter. Komparatoren får et input til den ønskede note, som den derefter kan matche den ønskede note til den korrekte frekvens fra opslagstabellen. Derefter vil komparatoren vælge noten med den nærmeste frekvens til maksimalfrekvensen. Komparatoren vil sammenligne de to værdier og se lukke værdien af frekvensen til den ønskede og derefter sætte disse data i et signal. Komparatoren sender dette signal til dekoderen, hvor dekoderen vælger input til anoderne på 7-segment displayet for at vise nøjagtigheden af noten.
Trin 3: Wav -fil
I dette trin tager vi en wav -fil af en tonehøjde og forsøger at udsende frekvensen for denne tonehøjde.
Først skal du bruge en wav -fil med en note. I dette eksempel bruger vi en 16 bit stereo wav -fil med en samplingshastighed på 44,1 kHz. Dette kan enten oprettes i en DAW såsom Garageband eller downloades. I dette eksempel kan en A4 440Hz sinusbølge genereret af os på Garageband downloades her.
Trin 4: Python- Anvendelse af Pylab og Scipy
Vi brugte Python -bibliotek til at lave "Fast Fourier -transformation". Online ressource tillod os at efterligne og se, hvad der er nyttigt i pylab og scipy.
1. Hvis du ikke har installeret pylab eller scipy, skal du gøre det. Eller, Pycharm har en meget god funktion. Når du prøver at importere pylab eller scipy, er der en snirkende understregning, der fortæller dig, at du ikke har installeret biblioteket endnu. Du kan derefter installere dem direkte ved at trykke på den røde lyspære (den vises, når du placerer din markør nær den snirkende understregning).
2. Brug scipy.io.wavfile.read -funktion til at læse og trække data fra prøve -wav -fil. Kør gennem dataene med pylab.fft, det vil give dig en liste over størrelsen for strømmen.
3. Find derefter maks. For den effekt, der udsendes fra listen. Se efter listeindekset, hvor maksimal effekt forekommer, fordi den hurtigere måde at finde, hvilken frekvens der er forbundet med denne effekt. Til sidst returneres den maksimale frekvens. Da vi senere skal indtaste et binært frekvenssignal i VHDL -kode, kan vi konvertere frekvens i float til binært og returnere det.
Trin 5: Python-sampling og FFT (Vis kode og dens resultater)
I dette trin går fulde kreditter til dette link nedenfor for prøveudtagning og FFT.
samcarcagno.altervista.org/blog/basic-sound… Vores kode:
Efter at pylab og scipy er blevet installeret, kan wav -filer importeres og læses.
fra pylab import*fra scipy.io import wavfile
sampFreq, snd = wavfile.read ('440_sine.wav')
Så repræsenterer snd.shape prøvepunkterne og antallet af kanaler. I vores tilfælde afhænger prøvepunkterne af, hvor lang wavfilen er, og antallet af kanaler er 2, fordi det er stereo.
Derefter snd = snd / (2. ** 15) …… xlabel ('Time (ms)')
organiserer tidssignalet i en matrix.
Derefter opretter FFT en matrix i frekvens og størrelse (effekt)
Så gennem et stykke loop findes den maksimale størrelse og frekvensen, der er forbundet med den. Denne frekvens/2 repræsenterer wavfilens tonehøjde.
Derefter ved hjælp af vores egen kode blev heltalet, der repræsenterer frekvensen, konverteret til et 12 bit binært tal, og der blev oprettet en tekstfil med dette nummer i.
Trin 6: Vivado (komparator)
I denne del af processen har vi brug for en komparator for at sammenligne to inputfrekvenser.
1. Oprettede en komparator for at sammenligne, om input (modtager) frekvensen er højere, lavere eller inden for 2 Hz marginintervallet defineret note. (typisk guitar tuner spænder fra e2 til g5, 82 Hz til 784 Hz).
2. Når vi opretter en margin på 2 Hz, brugte vi en RCA til at tilføje "000000000010" til modtagerfrekvensen og kontrollere, hvor den stadig er for lav til brugerinput. Hvis det er tilfældet, signalerer enkelt bit "høj" <= '0', 'lav' <= '1'. Derefter tilføjer vi "000000000010" til brugerindgangen, se om modtagerindgangen er endnu højere end det. Hvis det er tilfældet, "høj" <= '1', 'lav' <= '0'. Ingen af tilfældene ville begge returnere '0'.
3. Da den næste del af modulet har brug for en specifik 4-bit data for at fortælle, hvad modtagernoten er, ikke kun at returnere de 2 komparative udgange (lav og høj), skal vi returnere koden associeret til note, som associerer med frekvensen. Se venligst diagrammet herunder:
C | 0011
C# | 1011
D | 0100
D# | 1100
E | 0101
F | 0110
F# | 1110
G | 0111
G# | 1111
A | 0001
Et# | 1001
B | 0010
Brug af flere if -sætninger til at kategorisere dem i noter og kode dem i det, der er nødvendigt for de syv segmentdekoder.
Trin 7: BILLEDER AF BASYS 3 Board
Trin 8: Vivado (7 segmenters dekoder med multiplexering)
Alt har brug for et display. Det er en vigtig faktor, der bestemmer værdien af et design. Derfor er vi nødt til at oprette et display ved hjælp af syv segmenters dekoder, som giver os mulighed for at demonstrere vores evne til at designe en tuner på B-tavlen. Det ville også hjælpe os med testning og fejlfinding.
En syv-segmenters dekoder indeholder input med navnet Note, low, high og CLK, mens SSEG, AN og Fiz_Hz udsendes. Der er et billede af blokdiagrammet ovenfor for at hjælpe os med at forstå designet.
Formålet med at have to separate lave og høje indgange er at give designeren af komparatoren friheden til at manipulere, om lydfrekvensen (bølgen) er højere eller lavere end inputfrekvensen (Fix_Hz), brugeren ønsker at sammenligne. Desuden repræsenterer output SSEG de syv segmenters display og prikken derefter, mens AN repræsenterer de anoder, for hvilke sæt af de syv segmenter skal lyse.
I denne syv-segmenters dekoder spiller uret (CLK) en vigtig rolle ved visning af to forskellige værdier på to eller flere forskellige anoder. Da bestyrelsen ikke tillader os at vise to forskellige værdier på samme tid, er vi nødt til at bruge multiplexing til at vise en værdi ad gangen, mens vi skifter til en anden værdi hurtigt nok til, at vores øjne ikke kan fange den. Det er her CLK -input spiller ind.
Yderligere oplysninger findes i kildekoden.
Trin 9: Vivado (Kombinerende komponenter)
Når alle moduler (pythonmodtager, komparator, syv segmentdekoder osv.) Er gennemført, sammensætter vi derefter ved hjælp af et større modul. Ligesom billedet under afsnittet "Over view", tilslutter vi hvert signal i overensstemmelse hermed. Se vores kildekode "SW_Hz.vhd" til reference.
Tak skal du have. Håber du nyder det.
Anbefalede:
Sådan laver du en Arduino Guitar Tuner: 4 trin
Sådan laver du en Arduino Guitar Tuner: Disse er instruktionerne til at lave en guitar tuner ud af en Arduino og flere andre komponenter. Med grundlæggende viden om elektronik og kodning vil du være i stand til at lave denne guitar -tuner. Først skal du først vide, hvad materialerne er. Ma
Arduino Guitar Tuner: 3 trin
Arduino Guitar Tuner: Her er en guitar tuner jeg lavede med en Arduino Uno og nogle ting jeg havde liggende. Det fungerer sådan: Der er 5 knapper hver, der producerer en anden note i standard guitar tuning EADGBE. Da jeg kun havde 5 knapper, skrev jeg kode, så
Ukelele-tuner ved hjælp af LabView og NI USB-6008: 5 trin
Ukelele Tuner Brug af LabView og NI USB-6008: Som et problembaseret læringsprojekt til min LabVIEW & Instrumenteringskursus på Humber College (Electronics Engineering Technology), jeg skabte en ukulele -tuner, der ville tage en analog indgang (ukulele -strengetone), finde den grundlæggende frekvens
Hacking TV -tuner for at læse jordbilleder fra satellitter: 7 trin (med billeder)
Hacking af tv -tuner for at læse jordbilleder fra satellitter: Der er mange satellitter over vores hoveder. Vidste du, at kun ved hjælp af din computer, tv -tuner og enkle DIY -antenner kunne du modtage transmissionerne fra dem? For eksempel billeder i realtid af jorden. Jeg viser dig hvordan. Du får brug for:- 2 w
Fix en vintage radio tuner streng: 11 trin (med billeder)
Fix en Vintage Radio Tuner String: Der er allerede nogle meget flotte tutorials om vintage radioer, men jeg havde et specifikt problem: radioen tænder radioen larmer og bliver højere med volumenknappen, men drejning af tuningsknappen bevæger ikke nålen eller chan