Përmbajtje:

Akorduesi: 9 hapa
Akorduesi: 9 hapa

Video: Akorduesi: 9 hapa

Video: Akorduesi: 9 hapa
Video: মালটো সৰু হৈ গিছে || Bipul Rabha Comedy 9 || Oi Khapla || Assamese Mix MasTi 2024, Korrik
Anonim
Image
Image
Lista e pajisjeve (merrni një fotografi të Bordit dhe Kevin's Comp)
Lista e pajisjeve (merrni një fotografi të Bordit dhe Kevin's Comp)

Ky projekt u krijua për të bërë një akordues kitare duke përdorur Vivado dhe një ekran me 7 segmente. Pasi akorduesi të gjejë frekuencën e zërit të futur, akorduesi do ta krahasojë atë vlerë me një listë të vlerave të koduara fort për frekuencat e sakta që njihen si frekuenca standarde për lartësinë e saktë të një shënimi. Pastaj akorduesi do të shfaqë se sa afër ose larg është zëri juaj i futur nga shënimi juaj i dëshiruar. Ajo që është interesante është se një valë zanore është një kombinim i formave të shumta të valëve sinusoidale me përbërës realë dhe imagjinarë. Ndërsa kjo mund të duket e vështirë për të punuar me ata që nuk janë të njohur, ka disa mënyra që ne ende mund të analizojmë një valë me vlera reale dhe imagjinare.

Demo:

Hapi 1: Lista e pajisjeve (bëni një fotografi të Bordit dhe Kevin's Comp)

Së pari ne kemi nevojë për një tabelë Basys 3 dhe një kompjuter që mbështet programet e mëposhtëm. Garageband/Audacity ose një DAW tjetër - për të regjistruar përmes një mikrofoni dhe për të eksportuar wavfiles

Python - në gjendje të përdor pylab dhe scipy për marrjen e mostrave dhe fft

Vivado - për t'u lidhur me tabelën Basys 3 dhe për të parë vizualisht rezultatet

Hapi 2: Vështrim i përgjithshëm

Vështrim i përgjithshëm
Vështrim i përgjithshëm

Një sintonizues përbëhet nga disa përbërës të rëndësishëm: mikrofon, mostër, FFT (Shndërrim i shpejtë i Furierit), krahasues, dekodues dhe ekran. Qëllimi i mikrofonit është të kapë formën e valës hyrëse. Mostra merr sinjalin e daljes së mikrofonit dhe përdor FFT për ta kthyer sinjalin në një dalje të madhësisë në frekuenca. Pastaj duke përdorur daljen e FFT dhe duke gjetur madhësinë maksimale dhe frekuencën e lidhur me të të ndarë me 2, mund të gjendet frekuenca e lidhur me lartësinë e formës së valës. Kjo vlerë pastaj mund të hyjë në krahasues. Pastaj krahasohet me një tabelë kërkimi, e cila tashmë ka vendosur vlerat e frekuencës për hapat e përsosur të të gjitha shënimeve. Krahasuesit i jepet një hyrje për shënimin e dëshiruar, të cilin më pas mund ta përputjë shënimin e dëshiruar me frekuencën e tij të saktë nga tabela e kërkimit. Pastaj krahasuesi do të zgjedhë shënimin me frekuencën më të afërt me frekuencën maksimale. Krahasuesi do të krahasojë dy vlerat dhe do të shohë afër që vlera e frekuencës është me atë të dëshiruar dhe pastaj do t'i vendosë ato të dhëna në një sinjal. Krahasuesi do ta dërgojë atë sinjal në dekodues, ku dekoduesi do të zgjedhë hyrjet për anodat e ekranit me 7 segmente për të treguar saktësinë e shënimit.

Hapi 3: Skedari Wav

Skedar Wav
Skedar Wav

Në këtë hap, ne do të marrim një skedar wav të një katran dhe do të përpiqemi të nxjerrim frekuencën e atij lartësie.

Së pari ju nevojitet një skedar wav i një shënimi. Në këtë shembull ne do të përdorim një skedar wav stereo 16 bit me një normë mostrimi prej 44.1kHz. Kjo mund të krijohet ose në një DAW siç është Garageband ose të shkarkohet. Për këtë shembull, një valë sinus A4 440Hz e krijuar nga ne në Garageband mund të shkarkohet këtu.

Hapi 4: Python- Përdorimet e Pylab dhe Scipy

Python- Përdorimet e Pylab dhe Scipy
Python- Përdorimet e Pylab dhe Scipy

Ne përdorëm bibliotekën Python për të bërë "Shndërrim të shpejtë Furier". Burimet në internet na lejuan të imitojmë dhe të shohim se çfarë është e dobishme në pylab dhe scipy.

1. Nëse nuk keni instaluar pylab ose scipy, duhet ta bëni këtë. Ose, Pycharm ka një veçori shumë të mirë, kur provoni të importoni pylab ose scipy, ekziston një nënvizim i vrullshëm që ju thotë se nuk e keni instaluar bibliotekën ende. Pastaj mund t'i instaloni direkt duke shtypur llambën e kuqe (do të shfaqet kur e vendosni kursorin pranë nënvizimit të turbullt).

2. Duke përdorur funksionin scipy.io.wavfile.read, lexoni dhe nxirrni të dhëna nga skedari mostër wav. Drejtoni të dhënat nga pylab.fft, do t'ju kthejë një listë të madhësisë për fuqinë.

3. Pastaj gjeni maksimumin e fuqisë së emetuar nga lista. Shikoni për indeksin e listës ku ndodh fuqia maksimale sepse mënyra më e shpejtë për të gjetur se çfarë frekuence lidhet me atë fuqi. Më në fund kthejeni frekuencën maksimale. Meqenëse më vonë na duhet të fusim një sinjal të frekuencës binare në kodin VHDL, ne mund ta konvertojmë frekuencën në float në binar dhe ta kthejmë atë.

Hapi 5: Kampionimi Python dhe FFT (Trego kodin dhe rezultatet e tij)

Në këtë hap, kreditë e plota shkojnë në këtë lidhje më poshtë për marrjen e mostrave dhe FFT.

samcarcagno.altervista.org/blog/basic-sound…Kodi ynë:

Pasi pylab dhe scipy janë instaluar, skedarët wav mund të importohen dhe lexohen.

nga pylab import*nga scipy.io import wavfile

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

Pastaj snd.shape përfaqëson pikat e mostrës dhe numrin e kanaleve. Në rastin tonë, pikat e mostrës varen nga sa i gjatë është wavfile dhe numri i kanaleve është 2 sepse është stereo.

Pastaj snd = snd / (2. ** 15) …… xlabel ('Koha (ms)')

organizon sinjalin e kohës në një grup.

Pastaj FFT krijon një grup në frekuencën dhe madhësinë (Fuqia)

Pastaj përmes një loopi kohor gjendet madhësia maksimale dhe frekuenca e lidhur me të. Kjo frekuencë/2 përfaqëson lartësinë e valës së valës.

Pastaj duke përdorur kodin tonë, numri i plotë që përfaqëson frekuencën u shndërrua në një numër binar 12 bit dhe u krijua një skedar teksti me atë numër në të.

Hapi 6: Vivado (Krahasues)

Vivado (Krahasues)
Vivado (Krahasues)

Në këtë pjesë të procesit, ne kemi nevojë për një krahasues për të krahasuar dy frekuenca hyrëse.

1. Krijoi një krahasues për të krahasuar nëse frekuenca e hyrjes (marrësit) është më e lartë, më e ulët ose brenda shënimit të përcaktuar në kufirin e marzhit 2 Hz. (akorduesi tipik i kitarës varion nga e2 në g5, 82 Hz në 784 Hz).

2. Kur krijuam një diferencë prej 2 Hz, ne përdorëm një RCA për të shtuar "000000000010" në frekuencën e marrësit dhe kontrolloni se ku është akoma shumë e ulët për hyrjen e përdoruesit. Nëse është kështu, sinjali me një bit të vetëm "i lartë" <= "0", "i ulët" <= '1'. Pastaj shtojmë "000000000010" në hyrjen e përdoruesit për të parë nëse hyrja e marrësit është edhe më e lartë se ajo. Nëse është kështu, "i lartë" <= '1', "i ulët" <= '0'. Asnjëra prej rasteve nuk do të kthejë ‘0’.

3. Meqenëse pjesa tjetër e modulit ka nevojë për të dhëna specifike 4-bit për të treguar se çfarë është shënimi i marrësit, jo vetëm kthimi i 2 rezultateve krahasuese (i ulët dhe i lartë), ne duhet të kthejmë në shënim bashkëpunëtorin e kodit, i cili shoqërohet me frekuenca Ju lutemi referojuni tabelës më poshtë:

C | 0011

C# | 1011

D | 0100

D# | 1100

E | 0101

F | 0110

F# | 1110

G | 0111

G# | 1111

A | 0001

A# | 1001

B | 0010

Përdorimi i disa pohimeve if për t'i kategorizuar ato në shënim dhe për t'i koduar ato në atë që nevojitet për deshifruesin e shtatë segmenteve.

Hapi 7: FOTOT E BAZAVE 3 Bordi

Piktura të Bazave 3 Bordi
Piktura të Bazave 3 Bordi

Hapi 8: Vivado (Dekoduesi i 7 segmenteve me shumëfishim)

Vivado (Dekodues me 7 segmente me shumëfishim)
Vivado (Dekodues me 7 segmente me shumëfishim)

Çdo gjë ka nevojë për një ekran. Shtë një faktor i rëndësishëm që përcakton vlerën e një dizajni. Prandaj, ne duhet të krijojmë një ekran duke përdorur dekodues me shtatë segmente, i cili do të na lejojë të demonstrojmë aftësinë tonë për të hartuar një akordues në Bordin B. Gjithashtu, do të na ndihmonte në testimin dhe korrigjimin.

Një dekodues me shtatë segmente përmban hyrje me emrin Shënim, i ulët, i lartë dhe CLK, ndërsa nxjerr SSEG, AN dhe Fiz_Hz. Ekziston një pamje e bllok diagramit më sipër për të na ndihmuar të kuptojmë modelin.

Qëllimi i të pasurit të dy hyrjeve të veçanta të ulëta dhe të larta është t'i japë projektuesit të krahasuesit lirinë për të manipuluar nëse frekuenca e zërit (valës) është më e lartë ose më e ulët se frekuenca e hyrjes (Fix_Hz) që përdoruesi dëshiron të krahasojë. Për më tepër, dalja SSEG përfaqëson shfaqjen e shtatë segmenteve dhe pikën tjetër, ndërsa AN përfaqëson anodat për të cilat grupi i shtatë segmenteve shfaqet për t'u ndriçuar.

Në këtë dekodues me shtatë segmente, ora (CLK) luan një rol të rëndësishëm në shfaqjen e dy vlerave të ndryshme në dy ose më shumë anoda të ndryshme. Meqenëse Bordi nuk na lejon të shfaqim dy vlera të ndryshme në të njëjtën kohë, ne duhet të përdorim multipleximin për të shfaqur një vlerë një nga një, ndërsa kalojmë në një vlerë tjetër aq shpejt sa sytë tanë nuk mund ta kapin atë. Këtu hyn në lojë inputi CLK.

Për më shumë informacion, ju lutemi referojuni kodit burimor.

Hapi 9: Vivado (Kombinimi i Komponentëve)

Me përfundimin e secilit modul (marrës python, krahasues, dekodues me shtatë segmente, etj.), Ne i bashkojmë duke përdorur modulin më të madh. Ashtu si fotografia nën seksionin "Over view" të treguar, ne lidhim secilin sinjal në përputhje me rrethanat. Për referencë, ju lutemi kontrolloni kodin tonë burimor "SW_Hz.vhd".

Faleminderit. Shpresoj se ju pelqen.

Recommended: