Kazalo:

Tuner: 9 korakov
Tuner: 9 korakov

Video: Tuner: 9 korakov

Video: Tuner: 9 korakov
Video: Rimsky-Korsakov: Scheherazade op.35 - Leif Segerstam - Sinfónica de Galicia 2024, Julij
Anonim
Image
Image
Seznam opreme (fotografirajte desko in Kevin Comp)
Seznam opreme (fotografirajte desko in Kevin Comp)

Ta projekt je bil zasnovan za izdelavo uglaševalca kitare z uporabo Vivada in 7-segmentnega zaslona. Ko sprejemnik najde frekvenco vnesenega zvoka, ga bo ta vrednost primerjal s seznamom trdo kodiranih vrednosti za natančne frekvence, ki so znane kot standardna frekvenca za pravilno višino note. Nato bo sprejemnik prikazal, kako blizu ali daleč je vaš vneseni zvok od želene note. Zanimivo je, da je zvočni val kombinacija več sinusnih valovnih oblik z resničnimi in namišljenimi komponentami. Čeprav se neznanim to zdi težko delo, obstaja nekaj načinov, kako lahko še vedno analiziramo val z resničnimi in namišljenimi vrednostmi.

Demo:

1. korak: Seznam opreme (fotografirajte desko in Kevinov komp)

Najprej potrebujemo ploščo Basys 3 in računalnik, ki podpira naslednje programe. Garageband/Audacity ali drug DAW - za snemanje prek mikrofona in izvoz datotek wavfiles

Python - lahko uporablja pylab in scipy za vzorčenje in fft

Vivado - za povezavo z desko Basys 3 in vizualno ogled rezultatov

2. korak: Pregled

Pregled
Pregled

Uglaševalnik je sestavljen iz nekaj pomembnih komponent: mikrofona, vzorčevalnika, FFT (hitra Fourierjeva transformacija), primerjalnika, dekoderja in zaslona. Namen mikrofona je zajeti vhodno valovno obliko. Vzorčevalnik sprejme izhodni signal mikrofona in s pomočjo FFT pretvori signal v izhod velikosti v frekvencah. Nato z uporabo izhoda FFT in ugotovitvijo največje velikosti in frekvence, povezane z njim, deljene z 2, lahko ugotovimo frekvenco, povezano z višino valovne oblike. Ta vrednost lahko nato gre v primerjalnik. Nato ga primerjamo z iskalno tabelo, ki je že nastavila vrednosti frekvence za popolno višino vseh not. Primerjalnik dobi vnos za želeno noto, ki jo nato lahko ujema z želeno noto s pravilno frekvenco iz iskalne tabele. Nato bo primerjalnik izbral zapisek z frekvenco, ki je najbližja največji frekvenci. Primerjalnik bo primerjal obe vrednosti in videl blizu vrednosti frekvence do želene, nato pa te podatke dal v signal. Primerjalnik bo ta signal poslal v dekodirnik, kjer bo dekoder izbral vhode za anode 7-segmentnega zaslona, da prikaže natančnost zapisa.

Korak: Datoteka Wav

Wav datoteka
Wav datoteka

V tem koraku bomo vzeli wav datoteko smole in poskušali prikazati frekvenco te višine.

Najprej potrebujete datoteko z zapiski wav. V tem primeru bomo uporabili 16 -bitno stereo wav datoteko s frekvenco vzorčenja 44,1 kHz. To lahko ustvarite v DAW, kot je Garageband, ali prenesete. Za ta primer lahko tukaj prenesete sinusni val A4 440Hz, ki smo ga ustvarili na Garagebandu.

4. korak: Python- uporaba Pylaba in Scipyja

Python- uporaba Pylaba in Scipyja
Python- uporaba Pylaba in Scipyja

Knjižnico Python smo uporabili za "hitro Fourierjevo pretvorbo". Spletni vir nam je omogočil, da posnemamo in vidimo, kaj je koristno v pylabu in scipyju.

1. Če niste namestili pylab ali scipy, morate to storiti. Ali pa ima Pycharm zelo dobro funkcijo, ko poskusite uvoziti pylab ali scipy, je podrejeno podčrtano, ki vam pove, da knjižnice še niste namestili. Nato jih lahko namestite neposredno s pritiskom na rdečo žarnico (prikazala se bo, ko postavite kazalec blizu podčrtane črte).

2. S pomočjo scipy.io.wavfile.read preberite in izvlecite podatke iz vzorčne datoteke wav. Pobrskajte po podatkih z pylab.fft, vrnil vam bo seznam velikosti za moč.

3. Nato poiščite največjo moč, ki jo oddaja seznam. Poiščite indeks seznama, kjer se pojavi največja moč, ker hitreje ugotovite, kakšna frekvenca je povezana s to močjo. Končno vrnite največjo frekvenco. Ker moramo kasneje v kodo VHDL vnesti binarni frekvenčni signal, lahko frekvenco v float pretvorimo v binarno in jo vrnemo.

5. korak: vzorčenje Python in FFT (pokaži kodo in njene rezultate)

V tem koraku gredo celotni krediti na spodnjo povezavo za vzorčenje in FFT.

samcarcagno.altervista.org/blog/basic-sound…Naša koda:

Po namestitvi pylab in scipy je mogoče datoteke wav uvoziti in brati.

iz pylab import*iz scipy.io import wavfile

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

Nato snd.shape predstavlja vzorčne točke in število kanalov. V našem primeru so vzorčne točke odvisne od tega, kako dolga je datoteka wav in število kanalov 2, ker je stereo.

Potem je snd = snd / (2. ** 15) …… xlabel ('Čas (ms)')

organizira časovni signal v matriko.

Nato FFT ustvari matriko po frekvenci in velikosti (moč)

Nato skozi zanko while ugotovimo največjo velikost in frekvenco, povezano z njo. Ta frekvenca/2 predstavlja višino datoteke wavfile.

Nato smo z lastno kodo celo število, ki predstavlja frekvenco, pretvorili v 12 -bitno binarno število in ustvarili besedilno datoteko s to številko.

6. korak: Vivado (primerjalnik)

Vivado (primerjalnik)
Vivado (primerjalnik)

V tem delu postopka potrebujemo primerjalnik za primerjavo dveh vhodnih frekvenc.

1. Ustvaril je primerjalnik za primerjavo, ali je vhodna (sprejemna) frekvenca višja, nižja ali znotraj notranjega območja 2 Hz. (tipični uglaševalnik kitar se giblje od e2 do g5, 82 Hz do 784 Hz).

2. Pri ustvarjanju marže 2 Hz smo z RCA dodali frekvenco sprejemnika »000000000010« in preverili, kje je še vedno prenizka za vnos uporabnika. V tem primeru je enojni bitni signal "visoko" <= "0", "nizko" <= "1". Nato uporabniškemu vnosu dodamo “000000000010”, da vidimo, ali je vhod sprejemnika še višji od tega. V tem primeru je "visoko" <= "1", "nizko" <= "0". Oba primera ne bi vrnila "0".

3. Ker naslednji del modula potrebuje posebne 4-bitne podatke, ki povedo, kaj je sprejemna nota, ne samo, da vrneta dva primerjalna izhoda (nizek in visok), moramo kodo povezati z noto, ki je povezana z frekvenco. Prosimo, glejte spodnjo tabelo:

C | 0011

C# | 1011

D | 0100

D# | 1100

E | 0101

F | 0110

F# | 1110

G | 0111

G# | 1111

A | 0001

A# | 1001

B | 0010

Uporabite več stavkov if, da jih razvrstite v beležko in jih kodirate v tisto, kar je potrebno za dekoder za sedem segmentov.

7. korak: SLIKE OSNOVNE 3 plošče

SLIKE OSNOV 3 Tabla
SLIKE OSNOV 3 Tabla

8. korak: Vivado (7 -segmentni dekodirnik z multipleksiranjem)

Vivado (7 -segmentni dekoder z multipleksiranjem)
Vivado (7 -segmentni dekoder z multipleksiranjem)

Vse potrebuje zaslon. To je pomemben dejavnik, ki določa vrednost zasnove. Zato moramo s sedemsegmentnim dekoderjem ustvariti zaslon, ki bi nam omogočil, da pokažemo svojo sposobnost oblikovanja sprejemnika na plošči B. Prav tako bi nam pomagal pri testiranju in odpravljanju napak.

Sedemsegmentni dekoder vsebuje vhode z imenom Note, low, high in CLK, medtem ko oddaja SSEG, AN in Fiz_Hz. Zgoraj je slika blokovnega diagrama, ki nam pomaga razumeti zasnovo.

Namen dveh ločenih nizkih in visokih vhodov je oblikovalcu primerjalnika omogočiti svobodo pri upravljanju, ali je zvočna (valovna) frekvenca višja ali nižja od vhodne frekvence (Fix_Hz), ki jo želi uporabnik primerjati. Poleg tega izhodni SSEG predstavlja prikaz sedmih segmentov in naslednjo piko, medtem ko AN predstavlja anode, za katere se prižge niz sedmih segmentov.

V tem sedemsegmentnem dekodirniku ima ura (CLK) pomembno vlogo pri prikazovanju dveh različnih vrednosti na dveh ali več različnih anodah. Ker nam tabla ne dovoljuje prikaza dveh različnih vrednosti hkrati, moramo za prikaz vrednosti eno za drugo uporabiti multipleksiranje, hkrati pa preklopiti na drugo vrednost dovolj hitro, da je naše oči ne morejo ujeti. Tu pride do vhoda CLK.

Za več informacij si oglejte izvorno kodo.

9. korak: Vivado (kombiniranje komponent)

Ko smo dokončali vse module (sprejemnik python, primerjalnik, sedemsegmentni dekoder itd.), Smo nato sestavili z uporabo večjega modula. Tako kot na sliki v razdelku "Pogled", vsak signal ustrezno povežemo. Za referenco preverite našo izvorno kodo "SW_Hz.vhd".

Hvala vam. Upam da uživaš.

Priporočena: