Мазмұны:

Тюнер: 9 қадам
Тюнер: 9 қадам
Anonim
Image
Image
Жабдықтар тізімі (тақтаның суретін және Кевиннің компын алыңыз)
Жабдықтар тізімі (тақтаның суретін және Кевиннің компын алыңыз)

Бұл жоба 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 файлы

Бұл қадамда біз wav файлын қабылдаймыз және осы жиіліктің жиілігін шығаруға тырысамыз.

Алдымен сізге жазбаның wav файлы қажет. Бұл мысалда біз 44.1 кГц іріктеу жиілігі бар 16 биттік стерео -wav файлын қолданатын боламыз. Бұл Garageband сияқты DAW -де жасалуы немесе жүктелуі мүмкін. Бұл мысал үшін, Garageband -те біз жасаған A4 440 Гц синус толқынын мына жерден жүктеуге болады.

4-қадам: Python- Pylab пен Scipy-дің қолданылуы

Python- Pylab пен Scipy-дің қолданылуы
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 тақтасының суреттері

BASYS СУРЕТТЕРІ 3 тақта
BASYS СУРЕТТЕРІ 3 тақта

8 -қадам: Vivado (мультиплексирленген 7 сегментті декодер)

Vivado (мультиплексирленген 7 сегментті декодер)
Vivado (мультиплексирленген 7 сегментті декодер)

Барлығы дисплейге мұқтаж. Бұл дизайнның құндылығын анықтайтын маңызды фактор. Сондықтан бізге жеті сегментті декодер көмегімен дисплей құру керек, бұл бізге B тақтасында тюнер құрастыру қабілетін көрсетуге мүмкіндік береді. Сонымен қатар, бұл бізге тестілеу мен күйін келтіруге көмектеседі.

Жеті сегментті декодерде SSEG, AN және Fiz_Hz шығаратын Note, low, high және CLK деп аталатын кірістер бар. Дизайнды түсінуге көмектесу үшін жоғарыда блок -схеманың суреті бар.

Екі бөлек төмен және жоғары кірістің мақсаты - компаратор дизайнеріне дыбыс (толқын) жиілігі пайдаланушы салыстырғысы келетін кіріс жиілігінен (Fix_Hz) жоғары немесе төмен болуын басқаруға еркіндік беру. Сонымен қатар, SSEG шығысы жеті сегменттің дисплейін және нүктені көрсетеді, ал AN - жеті сегменттің жиынтығы жанатын анодтарды білдіреді.

Бұл жеті сегментті декодерде сағат (CLK) екі немесе одан да көп түрлі анодтарда екі түрлі мәнді көрсетуде маңызды рөл атқарады. Басқарма бір мезгілде екі түрлі мәнді көрсетуге мүмкіндік бермейтіндіктен, біз бір уақытта мәнді көрсету үшін мультиплекстеуді қолдануымыз керек, ал басқа мәнге тез ауысу керек, оны біздің көзіміз түсіре алмайды. Бұл жерде CLK кірісі ойнай бастайды.

Қосымша ақпарат алу үшін бастапқы кодты қараңыз.

9 -қадам: Vivado (компоненттерді біріктіру)

Барлық модульдер (питон қабылдағышы, компаратор, жеті сегментті декодер және т.б.) аяқталғаннан кейін біз үлкен модульді қолдана отырып біріктіреміз. «Қарап шығу» бөліміндегі суреттегідей, біз әр сигналды сәйкесінше қосамыз. Анықтама үшін «SW_Hz.vhd» бастапқы кодын тексеріңіз.

Рақмет сізге. Сізге ұнайды деп үміттенемін.

Ұсынылған: