Мазмұны:
- 1 -қадам: Жабдықтардың тізімі (тақтаның суретін және Кевиннің компын алыңыз)
- 2 -қадам: шолу
- 3 -қадам: Wav файлы
- 4-қадам: Python- Pylab пен Scipy-дің қолданылуы
- 5-қадам: Python-Sampling және FFT (кодты және оның нәтижелерін көрсету)
- 6 -қадам: Vivado (Салыстырушы)
- 7 -қадам: BASYS 3 тақтасының суреттері
- 8 -қадам: Vivado (мультиплексирленген 7 сегментті декодер)
- 9 -қадам: Vivado (компоненттерді біріктіру)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:27
Бұл жоба Vivado мен 7 сегментті дисплей көмегімен гитара тюнері жасауға арналған. Тюнер енгізілген дыбыстың жиілігін тапқаннан кейін, тюнер бұл мәнді нотаның дұрыс дыбысталуы үшін стандартты жиілік ретінде белгілі дәл жиіліктер үшін қатаң кодталған мәндер тізімімен салыстырады. Содан кейін тюнер сіз енгізген дыбыстың қалаған нотадан қаншалықты жақын немесе алыс екенін көрсетеді. Бір қызығы, дыбыс толқыны - бұл синусоидальды толқындардың нақты және ойдан шығарылған компоненттермен үйлесуі. Бұл бейтаныс адамдарға жұмыс істеу қиын болып көрінсе де, біз нақты және қиялдық құндылықтары бар толқынды талдауға болатын бірнеше әдістер бар.
Демо:
1 -қадам: Жабдықтардың тізімі (тақтаның суретін және Кевиннің компын алыңыз)
Алдымен бізге Basys 3 тақтасы мен келесі бағдарламаларды қолдайтын компьютер қажет. Garageband/Audacity немесе басқа DAW - микрофон арқылы жазу және қауіпсіз файлдарды экспорттау.
Python - іріктеу мен fft үшін pylab пен scipy қолдана алады
Vivado - Basys 3 тақтасына қосылу және нәтижелерді көзбен көру
2 -қадам: шолу
Тюнер бірнеше маңызды компоненттерден тұрады: микрофон, сынама алушы, FFT (Fast Fourier Transform), компаратор, декодер және дисплей. Микрофонның мақсаты - кіріс толқындарын алу. Сынама алушы микрофонның шығыс сигналын қабылдайды және сигналды жиіліктегі шаманың шығысына түрлендіру үшін FFT пайдаланады. Содан кейін FFT шығысын қолдана отырып және максималды шаманы және онымен байланысты жиілікті 2 -ге бөлу арқылы толқын формасының қадамымен байланысты жиілікті табуға болады. Содан кейін бұл мән компараторға түсуі мүмкін. Содан кейін ол барлық жазбалардың мінсіз қадамдары үшін жиілік мәндерін орнатқан іздеу кестесімен салыстырылады. Салыстырғышқа қажетті жазбаның кірісі беріледі, ол іздеу кестесінен қажетті жиілікті сәйкес жиілікке сәйкестендіре алады. Содан кейін компаратор максималды жиілікке ең жақын жиілікті нотаны таңдайды. Салыстырушы екі мәнді салыстырады және жиіліктің қажетті мәнге жақын екенін көреді, содан кейін бұл деректерді сигналға енгізеді. Салыстырғыш бұл сигналды декодерге жібереді, онда декодер жазбаның дәлдігін көрсету үшін 7 сегментті дисплейдің анодтарына кірісті таңдайды.
3 -қадам: Wav файлы
Бұл қадамда біз wav файлын қабылдаймыз және осы жиіліктің жиілігін шығаруға тырысамыз.
Алдымен сізге жазбаның wav файлы қажет. Бұл мысалда біз 44.1 кГц іріктеу жиілігі бар 16 биттік стерео -wav файлын қолданатын боламыз. Бұл Garageband сияқты DAW -де жасалуы немесе жүктелуі мүмкін. Бұл мысал үшін, Garageband -те біз жасаған A4 440 Гц синус толқынын мына жерден жүктеуге болады.
4-қадам: Python- Pylab пен Scipy-дің қолданылуы
Біз Python кітапханасын «Fast Fourier түрлендіруін» қолдандық. Интернет -ресурс бізге еліктеуге және pylab пен scipy -де не пайдалы екенін көруге мүмкіндік берді.
1. Егер сіз pylab немесе scipy орнатпаған болсаңыз, мұны істеуіңіз керек. Немесе Pycharm -тың өте жақсы ерекшелігі бар, егер pylab немесе scipy импорттауға тырысқанда, сіз әлі кітапхананы орнатпағаныңызды білдіретін асты сызылған сызық бар. Сіз оларды қызыл шамды басу арқылы тікелей орната аласыз (ол курсорды асты сызылған сызықтың қасына қойғанда пайда болады).
2. scipy.io.wavfile.read функциясын қолдана отырып, wav үлгі файлынан деректерді оқып шығыңыз. Деректерді pylab.fft арқылы іске қосыңыз, ол сізге қуат шамасының тізімін береді.
3. Содан кейін тізімнен шығарылатын қуаттың максимумын табыңыз. Максималды қуат пайда болатын тізім индексін іздеңіз, себебі бұл жиілік қандай жиілікпен байланысты екенін табудың жылдам әдісі. Соңында максималды жиілікті қайтарыңыз. Кейінірек VHDL кодына екілік жиілік сигналын енгізу қажет болғандықтан, біз өзгермелі жиілікті екілікке түрлендіріп, оны қайтара аламыз.
5-қадам: Python-Sampling және FFT (кодты және оның нәтижелерін көрсету)
Бұл қадамда іріктеу мен FFT үшін толық несие төмендегі сілтемеге өтеді.
samcarcagno.altervista.org/blog/basic-sound… Біздің код:
Pylab және scipy орнатылғаннан кейін wav файлдарын импорттауға және оқуға болады.
pylab импортынан*scipy.io импорттау wavfile
sampFreq, snd = wavfile.read ('440_sine.wav')
Содан кейін snd.shape үлгі нүктелерін және арналар санын көрсетеді. Біздің жағдайда, таңдау нүктелері wavfile қанша уақытқа байланысты және каналдар саны 2 -ге байланысты, себебі ол стерео.
Содан кейін snd = snd / (2. ** 15) …… xlabel ('Уақыт (мс)')
уақыт сигналын массивке ұйымдастырады.
Содан кейін FFT жиілік пен шамада массив жасайды (Қуат)
Содан кейін уақытша цикл арқылы максималды шамасы мен онымен байланысты жиілік табылады, бұл жиілік/2 wavfile қадамын білдіреді.
Содан кейін жеке кодты қолдана отырып, жиілікті білдіретін бүтін сан 12 биттік екілік санға айналдырылды және сол нөмірмен мәтіндік файл құрылды.
6 -қадам: Vivado (Салыстырушы)
Процестің бұл бөлігінде бізге екі кіріс жиілігін салыстыру үшін компаратор қажет.
1. Кіріс (қабылдағыш) жиілігі жоғары, төмен немесе 2 Гц жиілік диапазонында анықталған жазбаны салыстыру үшін компаратор құрылды. (типтік гитара тюнері e2 -ден g5 -ке дейін, 82 Гц -тен 784 Гц -ге дейін).
2. 2 Гц жиілігін құрған кезде біз RCA көмегімен қабылдағыш жиілігіне «000000000010» қосамыз және пайдаланушы енгізуі үшін оның әлі тым төмен екенін тексереміз. Егер солай болса, бір биттік сигнал «жоғары» <= ‘0’, «төмен» <= ‘1’. Содан кейін біз «000000000010» қосамыз, алушының кірісі одан да жоғары екенін тексереміз. Егер солай болса, «жоғары» <= ‘1’, «төмен» <= ‘0’. Екі жағдайда да «0» қайтарылмайды.
3. Модульдің келесі бөлігінде қабылдағыш нотаның не екенін айту үшін нақты 4 биттік деректер қажет болғандықтан, тек 2 салыстырмалы шығуды (төмен және жоғары) қайтарып қана қоймай, біз байланыстыратын кодты байланыстырушыға қайтаруымыз керек. жиілік. Төмендегі кестеге жүгініңіз:
C | 0011
C# | 1011
D | 0100
D# | 1100
E | 0101
F | 0110
F# | 1110
G | 0111
G# | 1111
A | 0001
A# | 1001
B | 0010
Бірнеше if операторын қолданып, оларды жіктеуге және жеті сегментті декодерге қажет нәрсеге кодтауға арналған.
7 -қадам: BASYS 3 тақтасының суреттері
8 -қадам: Vivado (мультиплексирленген 7 сегментті декодер)
Барлығы дисплейге мұқтаж. Бұл дизайнның құндылығын анықтайтын маңызды фактор. Сондықтан бізге жеті сегментті декодер көмегімен дисплей құру керек, бұл бізге B тақтасында тюнер құрастыру қабілетін көрсетуге мүмкіндік береді. Сонымен қатар, бұл бізге тестілеу мен күйін келтіруге көмектеседі.
Жеті сегментті декодерде SSEG, AN және Fiz_Hz шығаратын Note, low, high және CLK деп аталатын кірістер бар. Дизайнды түсінуге көмектесу үшін жоғарыда блок -схеманың суреті бар.
Екі бөлек төмен және жоғары кірістің мақсаты - компаратор дизайнеріне дыбыс (толқын) жиілігі пайдаланушы салыстырғысы келетін кіріс жиілігінен (Fix_Hz) жоғары немесе төмен болуын басқаруға еркіндік беру. Сонымен қатар, SSEG шығысы жеті сегменттің дисплейін және нүктені көрсетеді, ал AN - жеті сегменттің жиынтығы жанатын анодтарды білдіреді.
Бұл жеті сегментті декодерде сағат (CLK) екі немесе одан да көп түрлі анодтарда екі түрлі мәнді көрсетуде маңызды рөл атқарады. Басқарма бір мезгілде екі түрлі мәнді көрсетуге мүмкіндік бермейтіндіктен, біз бір уақытта мәнді көрсету үшін мультиплекстеуді қолдануымыз керек, ал басқа мәнге тез ауысу керек, оны біздің көзіміз түсіре алмайды. Бұл жерде CLK кірісі ойнай бастайды.
Қосымша ақпарат алу үшін бастапқы кодты қараңыз.
9 -қадам: Vivado (компоненттерді біріктіру)
Барлық модульдер (питон қабылдағышы, компаратор, жеті сегментті декодер және т.б.) аяқталғаннан кейін біз үлкен модульді қолдана отырып біріктіреміз. «Қарап шығу» бөліміндегі суреттегідей, біз әр сигналды сәйкесінше қосамыз. Анықтама үшін «SW_Hz.vhd» бастапқы кодын тексеріңіз.
Рақмет сізге. Сізге ұнайды деп үміттенемін.
Ұсынылған:
Arduino басқарылатын робот - екі қадам: 13 қадам (суреттермен)
Arduino басқарылатын роботты екіжақты: Мен әрқашан роботтарға қызығатынмын, әсіресе адамның іс -әрекетіне еліктеуге тырысатын. Бұл қызығушылық мені жаяу жүруге және жүгіруге еліктей алатын екіжақты робот құрастыруға және дамытуға талпындырды. Бұл нұсқаулықта мен сізге көрсетемін
Arduino Uno көмегімен акустикалық левитация Қадамдық қадам (8 қадам): 8 қадам
Акустикалық левитация Arduino Uno Қадамдық қадаммен (8-қадам): ультрадыбыстық дыбыс түрлендіргіштері L298N Dc әйелдер адаптерінің ток көзі еркек тоқ сымымен Arduino UNOBreadboard Бұл қалай жұмыс істейді: Біріншіден, сіз кодты Arduino Uno-ға жүктейсіз (бұл сандық жүйемен жабдықталған микроконтроллер) және кодты түрлендіру үшін аналогтық порттар (C ++)
Түймені іске қосатын қадам реттегіші: 4 қадам
Түймені іске қосатын қадам реттегіші:
Тікелей 4G/5G HD бейне ағыны DJI Drone -ден төмен кідірісте [3 қадам]: 3 қадам
Тікелей 4G/5G HD бейне ағыны DJI Drone-ден төмен кідірісте [3 қадам]: Келесі нұсқаулық кез-келген DJI дронынан HD сапалы бейне ағындарын алуға көмектеседі. FlytOS мобильді қосымшасы мен FlytNow веб -қосымшасының көмегімен сіз дроннан бейне ағынды бастай аласыз
Винтажды радио тюнер жолын түзету: 11 қадам (суреттермен)
Винтаждық радио тюнерінің жолын түзету: Винтажды радиоларда өте жақсы оқулықтар бар, бірақ менде белгілі бір мәселе болды: радио қосылады, радио дыбыс шығарады, дыбыс қаттылығының тұтқасы күшейеді, бірақ баптау тұтқасын бұру инені немесе чанды қозғалтпайды