Turinys:
- 1 žingsnis: įrangos sąrašas (nufotografuokite lentą ir Kevino kompą)
- 2 žingsnis: apžvalga
- 3 žingsnis: Wav failas
- 4 žingsnis: „Python“- „Pylab“ir „Scipy“naudojimas
- 5 veiksmas: „Python“atranka ir FFT (rodyti kodą ir jo rezultatus)
- 6 žingsnis: „Vivado“(lygintuvas)
- 7 žingsnis: BASYS 3 PAVADINIMAI Lenta
- 8 veiksmas: „Vivado“(7 segmentų dekoderis su multipleksavimu)
- 9 žingsnis: „Vivado“(komponentų derinimas)
Video: Derintuvas: 9 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:49
Šis projektas buvo sukurtas gitaros derinimui gaminti naudojant „Vivado“ir 7 segmentų ekraną. Kai imtuvas suras įvesto garso dažnį, imtuvas palygins šią vertę su tiksliai užkoduotų verčių sąrašu, tiksliai žinomu dažniu, žinomu kaip standartinis teisingos natos aukščio dažnis. Tada imtuvas parodys, kiek artimas ar toli įvestas garsas yra nuo norimos natos. Įdomu tai, kad garso banga yra kelių sinusoidinių bangų formų derinys su tikrais ir įsivaizduojamais komponentais. Nepažįstamiems žmonėms tai gali atrodyti sunku, tačiau yra keletas būdų, kaip vis tiek galime išanalizuoti bangą su tikromis ir įsivaizduojamomis vertybėmis.
Demonstracija:
1 žingsnis: įrangos sąrašas (nufotografuokite lentą ir Kevino kompą)
Pirmiausia mums reikia „Basys 3“plokštės ir kompiuterio, palaikančio šias programas. „Garageband“/„Audacity“ar kitas DAW - įrašyti per mikrofoną ir eksportuoti „wavfiles“
„Python“- gali naudoti „pylab“ir „scipy“mėginių ėmimui ir fft
„Vivado“- prisijungti prie „Basys 3“plokštės ir vizualiai pamatyti rezultatus
2 žingsnis: apžvalga
Imtuvą sudaro keli svarbūs komponentai: mikrofonas, mėginių ėmiklis, FFT (greitas Furjė transformacija), lygintuvas, dekoderis ir ekranas. Mikrofono paskirtis yra užfiksuoti įvesties bangos formą. Mėginių ėmiklis gauna mikrofono išvesties signalą ir naudoja FFT signalą paversti dažnio išvestimi. Tada, naudojant FFT išvestį ir suradus maksimalų dydį ir su juo susijusį dažnį, padalytą iš 2, galima rasti dažnį, susijusį su bangos formos žingsniu. Tada ši vertė gali patekti į palyginamąjį. Tada jis lyginamas su peržiūros lentele, kurioje jau yra nustatytos dažnio vertės tobulai visų natų aukščiams. Lygintojui pateikiama norimo užrašo įvestis, kurią jis iš paieškos lentelės gali suderinti norimą natą su teisingu dažniu. Tada lygintojas pasirinks natą, kurios dažnis yra arčiausiai maksimalaus dažnio. Lygintojas palygins dvi vertes ir pamatys, kad dažnio vertė yra artima norimai, o tada sudeda tuos duomenis į signalą. Lygintojas tą signalą nusiųs dekoderiui, kur dekoderis parinks 7 segmentų ekrano anodų įvestis, kad parodytų natos tikslumą.
3 žingsnis: Wav failas
Šiame žingsnyje mes paimsime žingsnio wav failą ir bandysime išvesti to žingsnio dažnį.
Pirmiausia jums reikia pastabos wav failo. Šiame pavyzdyje naudosime 16 bitų stereo wav failą, kurio atrankos dažnis yra 44,1 kHz. Tai galima sukurti DAW, pvz., „Garageband“, arba atsisiųsti. Šiame pavyzdyje „Garageband“sukurtą A4 formato 440 Hz sinusinę bangą galite atsisiųsti čia.
4 žingsnis: „Python“- „Pylab“ir „Scipy“naudojimas
„Greitajam Furjė transformacijai“atlikti naudojome „Python“biblioteką. Internetinis šaltinis leido mums mėgdžioti ir pamatyti, kas naudinga „pylab“ir „scipy“.
1. Jei neįdiegėte „pylab“ar „scipy“, turite tai padaryti. Arba „Pycharm“turi labai gerą savybę, kai bandant importuoti „pylab“ar „scipy“, yra neryškus pabraukimas, nurodantis, kad bibliotekos dar neįdiegėte. Tada galite juos įdiegti tiesiogiai, paspausdami raudoną lemputę (ji pasirodys, kai žymeklį priartinsite prie stačiakampio pabraukimo).
2. Naudodami funkciją scipy.io.wavfile.read, perskaitykite ir ištraukite duomenis iš pavyzdinio wav failo. Vykdykite „pylab.fft“duomenis, jums bus pateiktas galios dydžio sąrašas.
3. Tada suraskite iš sąrašo skleidžiamos galios maksimumą. Ieškokite sąrašo indekso, kuriame atsiranda maksimali galia, nes greitesnis būdas sužinoti, koks dažnis yra susijęs su ta galia. Galiausiai grąžinkite maksimalų dažnį. Kadangi vėliau turime įvesti dvejetainį dažnio signalą į VHDL kodą, mes galime konvertuoti plūdės dažnį į dvejetainį ir grąžinti.
5 veiksmas: „Python“atranka ir FFT (rodyti kodą ir jo rezultatus)
Šiame etape visi kreditai pateikiami žemiau esančioje nuorodoje, skirtoje atrankai ir FFT.
samcarcagno.altervista.org/blog/basic-sound…Mūsų kodas:
Įdiegus „pylab“ir „scipy“, „wav“failus galima importuoti ir skaityti.
iš „pylab import“*iš „scipy.io“importo „wavfile“
sampFreq, snd = wavfile.read ('440_sine.wav')
Tada snd.shape parodo mėginių taškus ir kanalų skaičių. Mūsų atveju imties taškai priklauso nuo to, kiek laiko yra „wavfile“, o kanalų skaičius yra 2, nes jis yra stereofoninis.
Tada snd = snd / (2. ** 15) …… xlabel ('Laikas (ms)')
laiko signalą organizuoja į masyvą.
Tada FFT sukuria dažnio ir dydžio (galios) masyvą
Tada per tam tikrą ciklą randamas maksimalus dydis ir su juo susijęs dažnis. Šis dažnis/2 reiškia „wavfile“žingsnį.
Tada, naudojant mūsų pačių kodą, sveikasis skaičius, reiškiantis dažnį, buvo paverstas 12 bitų dvejetainiu skaičiumi ir sukurtas teksto failas su tuo skaičiumi.
6 žingsnis: „Vivado“(lygintuvas)
Šioje proceso dalyje mums reikia lygintuvo, kad galėtume palyginti du įvesties dažnius.
1. Sukūrė lyginamąjį prietaisą, kad palygintų, ar įvesties (imtuvo) dažnis yra didesnis, mažesnis, ar neviršija 2 Hz ribos. (tipiškas gitaros derintuvas svyruoja nuo e2 iki g5, 82 Hz - 784 Hz).
2. Kurdami 2 Hz maržą, mes panaudojome RCA, kad prie imtuvo dažnio pridėtume „000000000010“ir patikrintume, kur jis vis dar per mažas vartotojo įvedimui. Tokiu atveju vieno bito signalas „didelis“<= ‘0’, “žemas” <= ‘1’. Tada prie vartotojo įvesties pridedame „000000000010“, kad pamatytumėte, ar imtuvo įvestis yra dar didesnė. Tokiu atveju „didelis“<= „1“, „žemas“<= „0“. Nei vienas, nei kitas atvejis negrąžintų „0“.
3. Kadangi kitai modulio daliai reikalingi konkretūs 4 bitų duomenys, kad būtų galima pasakyti, kas yra imtuvo užrašas, o ne tik grąžinami 2 lyginamieji išėjimai (žemas ir aukštas), turime grąžinti pažymėtam kodui susietą kodą dažnis. Žiūrėkite žemiau pateiktą diagramą:
C | 0011
C# | 1011
D | 0100
D# | 1100
E | 0101
F | 0110
F# | 1110
G | 0111
G# | 1111
A | 0001
A# | 1001
B | 0010
Naudojant kelis, jei teiginius, jie skirstomi į pastabas ir koduojami pagal tai, ko reikia septynių segmentų dekoderiui.
7 žingsnis: BASYS 3 PAVADINIMAI Lenta
8 veiksmas: „Vivado“(7 segmentų dekoderis su multipleksavimu)
Viskam reikia ekrano. Tai svarbus veiksnys, lemiantis dizaino vertę. Todėl turime sukurti ekraną, naudodamiesi septynių segmentų dekoderiu, kuris leistų mums parodyti savo sugebėjimą suprojektuoti imtuvą B plokštėje. Be to, tai padėtų mums atlikti bandymus ir derinimą.
Septynių segmentų dekoderis turi įvestis, pavadintas „Note“, žemas, aukštas ir „CLK“, o išvedamas SSEG, AN ir „Fiz_Hz“. Aukščiau pateiktas blokinės diagramos paveikslėlis, padedantis mums suprasti dizainą.
Dviejų žemų ir aukštų įėjimų tikslas yra suteikti palyginimo priemonės kūrėjui laisvę manipuliuoti, ar garso (bangos) dažnis yra didesnis ar mažesnis už įvesties dažnį („Fix_Hz“), kurį vartotojas nori palyginti. Be to, išvesties SSEG žymi septynių segmentų ekraną ir tašką šalia, o AN - anodus, kuriems užsidegti septynių segmentų ekranas.
Šiame septynių segmentų dekoderyje laikrodis (CLK) vaidina svarbų vaidmenį rodant dvi skirtingas vertes dviejuose ar daugiau skirtingų anodų. Kadangi lenta neleidžia mums vienu metu rodyti dviejų skirtingų verčių, turime naudoti multipleksavimą, kad reikšmė būtų rodoma po vieną, o perjungti į kitą vertę pakankamai greitai, kad mūsų akys negalėtų jos užfiksuoti. Čia atsiranda CLK įvestis.
Norėdami gauti daugiau informacijos, žr. Šaltinio kodą.
9 žingsnis: „Vivado“(komponentų derinimas)
Kai visi moduliai („python“imtuvas, lygintuvas, septynių segmentų dekoderis ir kt.) Yra baigti, mes surenkame naudodami didesnį modulį. Kaip ir paveikslėlyje, esančiame skyriuje „Peržiūra“, mes atitinkamai sujungiame kiekvieną signalą. Norėdami sužinoti, patikrinkite mūsų šaltinio kodą „SW_Hz.vhd“.
Ačiū. Tikiuosi patiks.
Rekomenduojamas:
„Arduino“automobilių atbulinės eigos įspėjimo sistema - Žingsniai po žingsnio: 4 žingsniai
„Arduino“automobilių atbulinės eigos įspėjimo sistema | Žingsniai po žingsnio: Šiame projekte aš suprojektuosiu paprastą „Arduino“automobilio atbulinės eigos stovėjimo jutiklio grandinę, naudodamas „Arduino UNO“ir ultragarsinį jutiklį „HC-SR04“. Ši „Arduino“pagrįsta automobilio atbulinės eigos įspėjimo sistema gali būti naudojama autonominei navigacijai, robotų diapazonui ir kitiems diapazonams
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su nuotraukomis): 6 žingsniai
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su paveikslėliais): norite Helovino metu išgąsdinti savo draugus ir sukelti riksmą? O gal tiesiog norite padaryti gerą išdaigą? Šis iššokantis „Zombies“ekranas gali tai padaryti! Šioje instrukcijoje aš išmokysiu jus, kaip lengvai padaryti iššokančius zombius naudojant „Arduino“. HC-SR0
Akustinė levitacija naudojant „Arduino Uno“žingsnis po žingsnio (8 žingsniai): 8 žingsniai
Akustinė levitacija naudojant „Arduino Uno“žingsnis po žingsnio (8 žingsniai): ultragarsiniai garso keitikliai L298N nuolatinės srovės adapterio maitinimo šaltinis su vyrišku nuolatinės srovės kaiščiu „Arduino UNOBreadboard“Kaip tai veikia: pirmiausia įkelkite kodą į „Arduino Uno“(tai yra mikrovaldiklis su skaitmeniniu ir analoginiai prievadai kodui konvertuoti (C ++)
„Pixel Kit“, kuriame veikia „MicroPython“: pirmieji žingsniai: 7 žingsniai
„Pixel Kit“, kuriame veikia „MicroPython“: pirmieji žingsniai: Kelionė, skirta visam „Kano Pixel“potencialui išnaudoti, prasideda gamyklos programinės įrangos pakeitimu „MicroPython“, tačiau tai tik pradžia. Norėdami koduoti „Pixel Kit“, turime prie jo prijungti savo kompiuterius. Ši pamoka paaiškins, kas
Tiesioginė 4G/5G HD vaizdo transliacija iš DJI drono esant mažai delsai [3 žingsniai]: 3 žingsniai
Tiesioginis 4G/5G HD vaizdo įrašų srautinis perdavimas iš DJI drono esant mažai delsai [3 žingsniai]: Šis vadovas padės jums gauti tiesioginius HD kokybės vaizdo srautus iš beveik visų DJI dronų. Naudodami „FlytOS Mobile App“ir „FlytNow Web Application“galite pradėti transliuoti vaizdo įrašus iš drono