Sisukord:

Tuuner: 9 sammu
Tuuner: 9 sammu

Video: Tuuner: 9 sammu

Video: Tuuner: 9 sammu
Video: Как сделать простую и мощную антенну для ТВ, чтобы принимала все каналы даже в деревне 2024, Juuli
Anonim
Image
Image
Varustuse loend (tehke tahvli ja Kevini võistluspildi pilt)
Varustuse loend (tehke tahvli ja Kevini võistluspildi pilt)

See projekt oli mõeldud kitarrituuneri valmistamiseks, kasutades Vivadot ja 7-segmendilist ekraani. Kui tuuner on sisestatud heli sageduse leidnud, võrdleb tuuner seda väärtust täpsete sageduste kõvakodeeritud väärtuste loendiga, mida nimetatakse noodi õige helikõrguse standardsageduseks. Seejärel kuvab tuuner, kui lähedal või kaugel on teie sisestatud heli soovitud noodist. Huvitav on see, et helilaine on mitme sinusoidaalse lainekuju kombinatsioon reaalsete ja kujuteldavate komponentidega. Ehkki tundmatute inimestega töötamine võib tunduda keeruline, on siiski mitmeid viise, kuidas saame ikkagi analüüsida lainet, millel on reaalsed ja kujuteldavad väärtused.

Demo:

Samm 1: Varustuse loend (tehke tahvli ja Kevini võistluspildi pilt)

Kõigepealt vajame Basys 3 plaati ja arvutit, mis toetab järgmisi programme. Garageband/Audacity või mõni muu DAW - mikrofoni kaudu salvestamiseks ja wavfailide eksportimiseks

Python - suudab proovide võtmiseks ja fft jaoks kasutada pylab ja scipy

Vivado - ühendada tahvel Basys 3 ja näha tulemusi visuaalselt

2. samm: ülevaade

Ülevaade
Ülevaade

Tuuner koosneb vähestest olulistest komponentidest: mikrofon, proovivõttur, FFT (Fast Fourier Transform), võrdlusmasin, dekooder ja ekraan. Mikrofoni eesmärk on jäädvustada sisendlainekuju. Proovivõtja võtab vastu mikrofoni väljundsignaali ja kasutab FFT -d, et teisendada signaal sagedusväljundiks. Seejärel, kasutades FFT väljundit ja leides maksimaalse suuruse ja sellega seotud sageduse jagatuna 2 -ga, saab leida lainekuju heliga seotud sageduse. See väärtus võib seejärel minna võrdlusalusesse. Seejärel võrreldakse seda tabeliga, mis on juba määranud sagedusväärtused kõigi nootide täiuslikeks helikõrgusteks. Võrdlejale antakse soovitud noodi sisend, mis seejärel võib sobitada soovitud noodi otsingutabelist õige sagedusega. Seejärel valib võrdleja maksimaalsele sagedusele lähima noodiga noodi. Võrdleja võrdleb neid kahte väärtust ja näeb sageduse väärtuse sulgemist soovitud väärtusele ning seejärel paneb need andmed signaaliks. Võrdleja saadab selle signaali dekoodrile, kus dekooder valib 7-segmendilise ekraani anoodide sisendid, et näidata noodi täpsust.

Samm: Wav -fail

Wav -fail
Wav -fail

Selles etapis võtame helikõrguse wav -faili ja proovime väljastada selle helikõrguse sageduse.

Kõigepealt vajate märkme wav -faili. Selles näites kasutame 16 -bitist stereo -wav -faili, mille diskreetimissagedus on 44,1 kHz. Selle saab luua DAW -s, näiteks Garagebandis, või alla laadida. Selle näite jaoks saab siit alla laadida meie Garagebandis loodud A4 440Hz siinuslaine.

4. samm: Python- Pylabi ja Scipy kasutamine

Python- Pylabi ja Scipy kasutusviisid
Python- Pylabi ja Scipy kasutusviisid

Kasutasime Pythoni raamatukogu “Fast Fourier” teisendamiseks. Veebiressurss võimaldas meil jäljendada ja näha, mis on kasulik pylabis ja scipy's.

1. Kui te pole pylabi või scipy'i installinud, peate seda tegema. Või on Pycharmil väga hea omadus: kui proovisite importida pilabit või scipyt, siis on kriipiv allajoon, mis ütleb teile, et te pole raamatukogu veel installinud. Seejärel saate need otse punasele lambipirnile vajutades installida (see ilmub siis, kui asetate kursori sirgjoonelise alajoone lähedale).

2. Kasutades funktsiooni scipy.io.wavfile.read, lugege ja tõmmake andmed proovi wav -failist välja. Käivitage andmed pylab.fft kaudu, see tagastab teile võimsuse suuruse loendi.

3. Seejärel leidke loendist väljastatava võimsuse maksimum. Otsige nimekirjaindeksit, kus tekib maksimaalne võimsus, sest kiirem viis selle võimsusega seotud sageduse leidmiseks. Lõpuks tagastage maksimaalne sagedus. Kuna hiljem peame sisestama binaarsagedussignaali VHDL -koodi, saame ujuki sageduse teisendada binaarseks ja tagastada.

Samm: Pythoni proovide võtmine ja FFT (koodi ja selle tulemuste kuvamine)

Selles etapis lähevad täielikud krediidid proovide võtmise ja FFT jaoks allolevale lingile.

samcarcagno.altervista.org/blog/basic-sound… Meie kood:

Pärast Pylabi ja Scipy installimist saab wav -faile importida ja lugeda.

alates pylab import*scipy.io import wavfile

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

Seejärel tähistab snd.shape näidispunkte ja kanalite arvu. Meie puhul sõltuvad proovipunktid sellest, kui pikk on wavfile ja kanalite arv on 2, kuna see on stereo.

Siis snd = snd / (2. ** 15) …… xlabel ('Aeg (ms)')

korraldab ajasignaali massiiviks.

Seejärel loob FFT sageduse ja suuruse (võimsus) massiivi

Seejärel leitakse mõne aja jooksul maksimaalne suurus ja sellega seotud sagedus. See sagedus/2 tähistab lainefaili sammu.

Seejärel konverteeriti meie enda koodi abil sagedust esindav täisarv 12 -bitiseks kahendnumbriks ja loodi tekstifail koos selle numbriga.

6. samm: Vivado (võrdleja)

Vivado (võrdleja)
Vivado (võrdleja)

Protsessi selles osas vajame kahe sisendsageduse võrdlemiseks võrdlust.

1. Lõi võrdluse, et võrrelda, kas sisendi (vastuvõtja) sagedus on kõrgem, madalam või 2 Hz variandivahemikus määratletud. (tüüpiline kitarrituuner on vahemikus e2 kuni g5, 82 Hz kuni 784 Hz).

2. 2 Hz veerise loomisel kasutasime RCA -d, et lisada vastuvõtja sagedusele “000000000010” ja kontrollida, kus see on kasutaja sisendi jaoks endiselt liiga madal. Kui see nii on, siis ühe bitiga signaal “kõrge” <= ‘0’, “madal” <= ‘1’. Seejärel lisame kasutaja sisendisse “000000000010”, et näha, kas vastuvõtja sisend on sellest veelgi kõrgem. Kui see on nii, siis “kõrge” <= ‘1’, “madal” <= ‘0’. Mõlemad juhtumid ei annaks 0.

3. Kuna mooduli järgmine osa vajab konkreetseid 4-bitiseid andmeid, et öelda, mis on vastuvõtja märkus, mitte ainult kahe võrdleva väljundi (madal ja kõrge) tagastamist, peame tagastama märkusele seostatud koodi, mis seostub sagedus. Palun vaadake allolevat diagrammi:

C | 0011

C# | 1011

D | 0100

D# | 1100

E | 0101

F | 0110

F# | 1110

G | 0111

G# | 1111

A | 0001

A# | 1001

B | 0010

Kasutades mitut lauset, et liigitada need märkmeteks ja kodeerida need seitsme segmendi dekoodri jaoks vajalikuks.

Samm 7: BASYS PILTID 3 Tahvel

PILDID BASYS 3 Tahvel
PILDID BASYS 3 Tahvel

8. samm: Vivado (7 segmendi dekodeerija koos multipleksimisega)

Vivado (7 segmendi dekodeerija koos multipleksimisega)
Vivado (7 segmendi dekodeerija koos multipleksimisega)

Kõik vajab väljapanekut. See on oluline tegur, mis määrab disaini väärtuse. Seetõttu peame looma seitsme segmendiga dekoodri abil ekraani, mis võimaldaks meil näidata oma võimet kujundada tuunerit B-plaadil. Samuti aitaks see meid testimisel ja silumisel.

Seitsme segmendi dekooder sisaldab sisendeid nimega Note, low, high ja CLK, väljastades samal ajal SSEG, AN ja Fiz_Hz. Ülaltoodud plokkskeemi pilt aitab meil kujundusest aru saada.

Kahe madala ja kõrge sisendi eraldamise eesmärk on anda võrdleva disainerile vabadus manipuleerida, kas heli (laine) sagedus on kõrgem või madalam kui sisendsagedus (Fix_Hz), mida kasutaja soovib võrrelda. Lisaks tähistab väljund SSEG seitsme segmendi kuvarit ja täppi järgmisena, samas kui AN tähistab anoode, mille seitsme segmendi komplekt süttib.

Selles seitsme segmendi dekoodris mängib kell (CLK) olulist rolli kahe erineva väärtuse kuvamisel kahel või enamal erineval anoodil. Kuna juhatus ei luba meil korraga kahte erinevat väärtust kuvada, peame väärtuse ükshaaval kuvamiseks kasutama multipleksimist, lülitades samal ajal teise väärtuse sisse piisavalt kiiresti, et meie silmad ei saaks seda jäädvustada. Siin tuleb mängu CLK sisend.

Lisateavet leiate lähtekoodist.

9. samm: Vivado (komponentide kombineerimine)

Kui kõik moodulid (pythoni vastuvõtja, võrdlusseade, seitsme segmendi dekooder jne) on valmis, paneme suurema mooduli abil kokku. Nagu näidatud jaotises "Ülevaade", ühendame iga signaali vastavalt. Viiteks vaadake meie lähtekoodi "SW_Hz.vhd".

Aitäh. Loodan, et naudite.

Soovitan: