INHOUDSOPGAWE:
- Stap 1: Toerustinglys (neem 'n foto van die bord en Kevin's Comp)
- Stap 2: Oorsig
- Stap 3: Wav -lêer
- Stap 4: Python- Gebruik van Pylab en Scipy
- Stap 5: Python-steekproefneming en FFT (toon kode en die resultate daarvan)
- Stap 6: Vivado (Vergelyker)
- Stap 7: PRENTE VAN BASYS 3 Bord
- Stap 8: Vivado (7 -segment -dekodeerder met veelvoudig)
- Stap 9: Vivado (kombinasie van komponente)
Video: Ontvanger: 9 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
Hierdie projek is ontwerp om 'n kitaarstemmer te maak met Vivado en 'n 7-segment-skerm. Sodra die ontvanger die frekwensie van die ingevoerde klank gevind het, sal die ontvanger die waarde vergelyk met 'n lys met hardgekodeerde waardes vir presiese frekwensies wat bekend staan as die standaardfrekwensie vir die korrekte toonhoogte van 'n noot. Dan sal die ontvanger wys hoe naby of ver u ingevoerde klank is van die gewenste noot. Wat interessant is, is dat 'n klankgolf 'n kombinasie is van veelvoudige sinusvormige golfvorme met werklike en denkbeeldige komponente. Alhoewel dit vir diegene wat nie bekend is nie moeilik is om mee te werk, is daar 'n paar maniere waarop ons steeds 'n golf met werklike en denkbeeldige waardes kan ontleed.
Demo:
Stap 1: Toerustinglys (neem 'n foto van die bord en Kevin's Comp)
Eerstens benodig ons 'n Basys 3 -bord en 'n rekenaar wat die volgende programme ondersteun: Garageband/Audacity of 'n ander DAW - om deur 'n mikrofoon op te neem en wav -lêers uit te voer
Python - kan pylab en scipy gebruik vir monsterneming en FFT
Vivado - om aan te sluit op die Basys 3 -bord en die resultate visueel te sien
Stap 2: Oorsig
'N Tuner bestaan uit 'n paar belangrike komponente: mikrofoon, sampler, FFT (Fast Fourier Transform), vergelyker, dekodeerder en skerm. Die doel van die mikrofoon is om die invoergolfvorm vas te lê. Die monsternemer ontvang die mikrofoon se uitsetsein en gebruik die FFT om die sein om te skakel in 'n uitset van grootte in frekwensies. Deur die uitset van die FFT te gebruik en die maksimum grootte en die frekwensie wat daarmee gepaard gaan gedeel deur 2 te vind, kan die frekwensie wat verband hou met die toonhoogte van die golfvorm gevind word. Die waarde kan dan in die vergelyking ingaan. Dit word dan vergelyk met 'n opsoekstabel, wat reeds frekwensiewaarde vir perfekte toonhoogtes van alle note gestel het. Die vergelyker kry 'n invoer vir die gewenste noot, wat dit dan by die gewenste noot kan pas by die korrekte frekwensie van die opzoektabel. Dan sal die vergelyker die noot kies met die naaste frekwensie aan die maksimum frekwensie. Die vergelyker sal die twee waardes vergelyk en die waarde van die frekwensie naby aan die gewenste een sien, en dan die data in 'n sein plaas. Die vergelyker stuur die sein na die dekodeerder, waar die dekodeerder die insette vir die anodes van die 7-segment-skerm sal kies om die akkuraatheid van die noot aan te toon.
Stap 3: Wav -lêer
In hierdie stap neem ons 'n wav -lêer van 'n toonhoogte en probeer om die frekwensie van die toonhoogte uit te voer.
Eerstens benodig u 'n wav -lêer van 'n nota. In hierdie voorbeeld gebruik ons 'n 16 -bis stereo wav -lêer met 'n monsterneming van 44,1 kHz. Dit kan óf in 'n DAW soos Garageband geskep word of afgelaai word. Vir hierdie voorbeeld kan 'n A4 440Hz sinusgolf wat deur ons op Garageband gegenereer is, hier afgelaai word.
Stap 4: Python- Gebruik van Pylab en Scipy
Ons het die Python -biblioteek gebruik om 'Fast Fourier transform' te doen. Met die aanlyn hulpbron kon ons navolg en kyk wat nuttig is in pylab en scipy.
1. As u nie pylab of scipy geïnstalleer het nie, moet u dit doen. Of, Pycharm het 'n baie goeie funksie, as u probeer om pylab of scipy in te voer, is daar 'n kronkelende onderstreep wat u vertel dat u nog nie die biblioteek geïnstalleer het nie. U kan dit dan direk installeer deur op die rooi gloeilamp te druk (dit sal verskyn as u die wyser naby die kronkelende onderstreep plaas).
2. Lees die funksie scipy.io.wavfile.read en lees data uit die voorbeeld -wav -lêer. Gaan deur die data deur pylab.fft, dit gee u 'n lys van grootte vir die krag.
3. Vind dan die maksimum van die krag uit die lys. Soek die lysindeks waar die maksimum krag voorkom, want die vinniger manier om uit te vind watter frekwensie met die krag verband hou. Laai uiteindelik die maksimum frekwensie terug. Aangesien ons later 'n binêre frekwensie sein in die VHDL -kode moet invoer, kan ons die frekwensie in float in binêre omskakel en dit terugstuur.
Stap 5: Python-steekproefneming en FFT (toon kode en die resultate daarvan)
In hierdie stap gaan die volledige krediete na die onderstaande skakel vir die steekproefneming en FFT.
samcarcagno.altervista.org/blog/basic-sound… Ons kode:
Nadat pylab en scipy geïnstalleer is, kan wav -lêers ingevoer en gelees word.
vanaf pylab invoer*vanaf scipy.io invoer wavfile
sampFreq, snd = wavfile.read ('440_sine.wav')
Dan stel snd.shape die steekproefpunte en die aantal kanale voor. In ons geval hang die monsterpunte af van hoe lank die wav -lêer is en die aantal kanale 2 omdat dit stereo is.
Dan snd = snd / (2. ** 15) …… xlabel ('Tyd (ms)')
organiseer die tydsein in 'n skikking.
Dan skep die FFT 'n skikking in frekwensie en grootte (krag)
Dan word die maksimum grootte en die frekwensie wat daarmee gepaard gaan, deur middel van 'n tydlus gevind. Die frekwensie/2 verteenwoordig die toonhoogte van die wav -lêer.
Deur ons eie kode te gebruik, is die heelgetal wat die frekwensie verteenwoordig, omgeskakel in 'n 12 -bis binêre getal en 'n tekslêer is gemaak met die getal daarin.
Stap 6: Vivado (Vergelyker)
In hierdie deel van die proses het ons 'n vergelyker nodig om twee insetfrekwensies te vergelyk.
1. 'n Vergelyker geskep om te vergelyk of die invoer (ontvanger) frekwensie hoër, laer of binne die 2 Hz marge -omskrewe noot is. (tipiese kitaarstemmer wissel van e2 tot g5, 82 Hz tot 784 Hz).
2. By die skep van 'n marge van 2 Hz het ons 'n RCA gebruik om '000000000010' by die ontvangerfrekwensie te voeg en te kyk waar dit nog te laag is vir gebruikersinvoer. As dit die geval is, gee 'n enkele bis sein "hoog" <= '0', 'laag' <= '1'. Dan voeg ons '000000000010' by die gebruikersinvoer, kyk of die ontvanger -invoer selfs hoër is as dit. As dit die geval is, "hoog" <= '1', 'laag' <= '0'. Nie een van die twee gevalle gee '0' terug nie.
3. Aangesien die volgende deel van die module 'n spesifieke 4-bis-data benodig om te vertel wat die ontvangernota is, en nie net die 2 vergelykende uitsette (laag en hoog) teruggee nie, moet ons die kode-assosiaat na noot terugstuur, wat verband hou met die frekwensie. Verwys na die onderstaande grafiek:
C | 0011
C# | 1011
D | 0100
D# | 1100
E | 0101
F | 0110
F# | 1110
G | 0111
G# | 1111
A | 0001
'N# 1001
B | 0010
Gebruik verskeie if -stellings om dit in notas te kategoriseer en te kodeer in wat nodig is vir die sewe segmentdekodeerder.
Stap 7: PRENTE VAN BASYS 3 Bord
Stap 8: Vivado (7 -segment -dekodeerder met veelvoudig)
Alles het 'n vertoning nodig. Dit is 'n belangrike faktor wat die waarde van 'n ontwerp bepaal. Daarom moet ons 'n skerm maak met behulp van sewe segmente-dekodeerder, waarmee ons ons vermoë kan demonstreer om 'n ontvanger op die B-bord te ontwerp. Dit sal ons ook help met die toets en ontfouting.
'N Dekodeerder van sewe segmente bevat insette met die naam Note, low, high en CLK, terwyl SSEG, AN en Fiz_Hz uitgegee word. Daar is 'n prentjie van die blokdiagram hierbo om ons te help om die ontwerp te verstaan.
Die doel met twee afsonderlike lae en hoë insette is om die ontwerper van die vergelyking die vryheid te gee om te manipuleer of die klank- (golf-) frekwensie hoër of laer is as die invoerfrekwensie (Fix_Hz) wat die gebruiker wil vergelyk. Boonop verteenwoordig die uitset SSEG die sewe segmente wat vertoon word en die punt daarna, terwyl die AN die anodes voorstel waarvoor die stel van die sewe segmente vertoon.
In hierdie sewe segmente dekodeerder speel die klok (CLK) 'n belangrike rol in die vertoon van twee verskillende waardes op twee of meer verskillende anodes. Aangesien die Raad ons nie toelaat om twee verskillende waardes tegelyk te vertoon nie, moet ons multiplexing gebruik om 'n waarde een vir een te vertoon, terwyl ons vinnig genoeg oorskakel na 'n ander waarde sodat ons oë dit nie kan vasvang nie. Dit is waar die CLK -insette ter sprake kom.
Raadpleeg die bronkode vir meer inligting.
Stap 9: Vivado (kombinasie van komponente)
Met elke module (luislangontvanger, vergelyker, sewe segmentdekodeerder, ens.) Voltooi, het ons dit saamgestel met behulp van 'n groter module. Net soos die prentjie onder die gedeelte "Oorsig", verbind ons elke sein dienooreenkomstig. Raadpleeg ons bronkode "SW_Hz.vhd" vir verwysing.
Dankie. Hoop jy geniet.
Aanbeveel:
Voeg 'n digitale skerm by 'n ou kommunikasie -ontvanger: 6 stappe (met foto's)
Voeg 'n digitale skerm by 'n ou kommunikasie -ontvanger: een van die tekortkominge by die gebruik van 'n ouer kommunikasie -uitrusting is die feit dat die analoog draaiknop nie baie akkuraat is nie. U raai altyd aan die frekwensie wat u ontvang. In die AM- of FM -bande is dit oor die algemeen geen probleem nie, omdat u gewoonlik
Raspberry Pi NOAA en Meteor-M 2 Ontvanger: 6 stappe
Raspberry Pi NOAA en Meteor-M 2 Ontvanger: Hierdie instruksies sal u help om 'n ontvangstasie op te rig vir nie net APT vanaf NOAA-15, 18 en 19 nie, maar ook Meteor-M 2. Dit is eintlik net 'n klein opvolgprojek om haslettj se groot " Raspberry Pi NOAA Weersatellietontvanger " projek
IR -afstandsanaliseerder / ontvanger met Arduino: 3 stappe
IR -afstandsanaliseerder / ontvanger met Arduino: hierdie ontleder ontvang 40 verskillende IR -protokolle gelyktydig en toon die adres en kode van die ontvangde sein. Dit gebruik die Arduino IRMP -biblioteek, wat hierdie toepassing as voorbeeld bevat, asook ander nuttige toepassings! wil
RC -ontvanger na rekenaar met Arduino: 4 stappe
RC -ontvanger na 'n rekenaar met Arduino: dit is die instruksiesartikel vir die RC -ontvanger -rekenaar via arduino github -dokument.As u hierdie opstelling wil bou, moet u eers die github README lees. U benodig ook sagteware om dit te laat werk. Https://github.com/RobbeDGreef/Ard
IR -ontvanger ligbeheer: 4 stappe
IR -ontvanger ligbeheer: as u net begin leer hoe om 'n IR -ontvanger te gebruik en uitvind hoe die komponent werk, is dit die perfekte projek om mee te begin! Voordat u met hierdie projek begin, moet u seker maak dat u die IR -ontvangerbiblioteek afgelaai het onder