INHOUDSOPGAWE:

Ontvanger: 9 stappe
Ontvanger: 9 stappe

Video: Ontvanger: 9 stappe

Video: Ontvanger: 9 stappe
Video: САМЫЙ СТРАШНЫЙ ДЕМОН ИЗ ПОДВАЛА КОТОРОГО МНЕ ПРИХОДИЛОСЬ ВИДЕТЬ 2024, November
Anonim
Image
Image
Toerustinglys (neem 'n foto van die bord en Kevin's Comp)
Toerustinglys (neem 'n foto van die bord en Kevin's Comp)

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

Oorsig
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

Wav -lêer
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

Python- Gebruik van Pylab en Scipy
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)

Vivado (Vergelyker)
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

PRENTE VAN BASYS 3 Bord
PRENTE VAN BASYS 3 Bord

Stap 8: Vivado (7 -segment -dekodeerder met veelvoudig)

Vivado (7 -segment -dekodeerder met veelvoudig)
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: