Съдържание:

Тунер: 9 стъпки
Тунер: 9 стъпки

Видео: Тунер: 9 стъпки

Видео: Тунер: 9 стъпки
Видео: DARBUKA QUICK LEARNING🚀 | How to play " RAK " SOUND or QARSHI 2024, Юли
Anonim
Image
Image
Списък на оборудването (направете снимка на дъската и Comp на Кевин)
Списък на оборудването (направете снимка на дъската и Comp на Кевин)

Този проект е предназначен да направи тунер за китара с помощта на Vivado и 7-сегментен дисплей. След като тунерът намери честотата на въведения звук, тунерът ще сравни тази стойност със списък с твърдо кодирани стойности за точни честоти, които са известни като стандартна честота за правилната височина на нотата. Тогава тунерът ще покаже колко близо или далеч е вашият въведен звук от желаната ви нота. Интересното е, че звуковата вълна е комбинация от множество синусоидални вълнови форми с реални и въображаеми компоненти. Въпреки че това може да изглежда трудно за работа с непознати, има няколко начина, по които все още можем да анализираме вълна с реални и въображаеми стойности.

Демонстрация:

Стъпка 1: Списък на оборудването (направете снимка на дъската и Comp на Кевин)

Първо се нуждаем от дъска Basys 3 и компютър, който поддържа следните програми.

Python - може да използва pylab и scipy за вземане на проби и fft

Vivado - за да се свържете с дъската Basys 3 и визуално да видите резултатите

Стъпка 2: Общ преглед

Общ преглед
Общ преглед

Тунерът се състои от няколко важни компонента: микрофон, семплер, FFT (бърза трансформация на Фурие), компаратор, декодер и дисплей. Целта на микрофона е да улавя входната форма на вълната. Семплерът получава изходния сигнал на микрофона и използва FFT, за да преобразува сигнала в изход с величина в честоти. След това, използвайки изхода на FFT и намирането на максималната величина и свързаната с него честота, разделена на 2, може да се намери честотата, свързана с височината на формата на вълната. След това тази стойност може да влезе в сравнителя. След това се сравнява с таблица за търсене, която вече е задала честотни стойности за перфектни тонове на всички ноти. На компаратора се дава вход за желаната бележка, който след това може да съпостави желаната бележка с нейната правилна честота от таблицата за търсене. Тогава компараторът ще избере бележката с най -близката до максималната честота. Сравнителят ще сравни двете стойности и ще види близо стойността на честотата до желаната и след това ще постави тези данни в сигнал. Компараторът ще изпрати този сигнал до декодера, където декодерът ще избере входовете за анодите на 7-сегментния дисплей, за да покаже точността на нотата.

Стъпка 3: Wav файл

Wav файл
Wav файл

В тази стъпка ще вземем wav файл на височина и ще се опитаме да изведем честотата на тази височина.

Първо се нуждаете от wav файл с бележка. В този пример ще използваме 16 -битов стерео wav файл с честота на дискретизация 44,1 kHz. Това може да бъде създадено в DAW като Garageband или изтеглено. За този пример, A4 440Hz синусоидална вълна, генерирана от нас в Garageband, може да бъде изтеглена тук.

Стъпка 4: Python- Използване на Pylab и Scipy

Python- Използване на Pylab и Scipy
Python- Използване на Pylab и Scipy

Използвахме библиотеката Python за „бърза трансформация на Фурие“. Онлайн ресурсът ни позволи да имитираме и да видим какво е полезно в pylab и scipy.

1. Ако не сте инсталирали pylab или scipy, трябва да го направите. Или Pycharm има много добра функция, когато се опитате да импортирате pylab или scipy, има изпъкнало подчертаване, което ви казва, че все още не сте инсталирали библиотеката. След това можете да ги инсталирате директно, като натиснете червената крушка (тя ще се появи, когато поставите курсора близо до изкривеното подчертаване).

2. Използвайки scipy.io.wavfile.read функцията, прочетете и изтеглете данни от примерен wav файл. Прегледайте данните от pylab.fft, той ще ви върне списък с величина за мощността.

3. След това намерете максималната мощност, излъчвана от списъка. Потърсете индекса на списъка, където се появява максималната мощност, защото по -бързият начин да намерите каква честота е свързана с тази мощност. Накрая върнете максималната честота. Тъй като по -късно трябва да въведем двоичен честотен сигнал във VHDL код, можем да преобразуваме честотата в float в двоичен и да я върнем.

Стъпка 5: Python-Sampling и FFT (Показване на кода и неговите резултати)

В тази стъпка пълните кредити отиват на тази връзка по -долу за вземане на проби и FFT.

samcarcagno.altervista.org/blog/basic-sound… Нашият код:

След като pylab и scipy са инсталирани, wav файловете могат да се импортират и четат.

от pylab import*от scipy.io import wavfile

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

Тогава snd.shape представлява пробните точки и броя на каналите. В нашия случай примерните точки зависят от това колко дълъг е wavfile и # канала е 2, защото е стерео.

Тогава snd = snd / (2. ** 15) …… xlabel ('Време (ms)')

организира сигнала за време в масив.

Тогава FFT създава масив по честота и величина (мощност)

След това през цикъл while се открива максималната величина и свързаната с него честота. Тази честота/2 представлява височината на wavfile.

След това, използвайки нашия собствен код, цялото число, представляващо честотата, се преобразува в 12 -битово двоично число и се създава текстов файл с този номер в него.

Стъпка 6: Vivado (компаратор)

Vivado (компаратор)
Vivado (компаратор)

В тази част от процеса се нуждаем от сравнител, за да сравним две входни честоти.

1. Създаден е компаратор, за да се сравни дали входната (приемната) честота е по -висока, по -ниска или в рамките на 2 Hz маржин диапазон, дефиниран. (типичният китарен тунер варира от e2 до g5, 82 Hz до 784 Hz).

2. Когато създавахме запас от 2 Hz, използвахме RCA, за да добавим „000000000010“към честотата на приемника и да проверим къде все още е твърде ниска за въвеждане от потребителя. Ако случаят е такъв, еднобитовият сигнал „висок“<= „0“, „нисък“<= „1“. След това добавяме „000000000010“към потребителския вход, за да видим дали входът на приемника е дори по -висок от този. Ако случаят е такъв, „високо“<= ‘1’, „ниско“<= ‘0’. И двата случая не биха върнали „0“.

3. Тъй като следващата част на модула се нуждае от конкретни 4-битови данни, за да се определи каква е бележката на приемника, а не само връщането на 2 сравнителни изхода (нисък и висок), ние трябва да върнем кодовия асоцииран към бележката, който се свързва с честотата. Моля, вижте таблицата по -долу:

С | 0011

C# | 1011

D | 0100

D# | 1100

E | 0101

F | 0110

F# | 1110

G | 0111

G# | 1111

А | 0001

A# | 1001

В | 0010

Използване на няколко оператора if, за да ги категоризирате в бележка и да ги кодирате в това, което е необходимо за седемсегментния декодер.

Стъпка 7: СНИМКИ НА БАЗА 3 Борд

СНИМКИ НА БАЗИ 3 Табло
СНИМКИ НА БАЗИ 3 Табло

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

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

Всичко се нуждае от дисплей. Това е важен фактор, който определя стойността на дизайна. Следователно, трябва да създадем дисплей, използвайки седемсегментен декодер, което би ни позволило да демонстрираме способността си да проектираме тунер на B Board. Освен това би ни помогнало при тестването и отстраняването на грешки.

Седемсегментен декодер съдържа входове с име Note, ниско, високо и CLK, докато извежда SSEG, AN и Fiz_Hz. По -горе има снимка на блокова диаграма, която да ни помогне да разберем дизайна.

Целта на наличието на два отделни ниски и високи входа е да се предостави на дизайнера на компаратора свободата да манипулира дали честотата на звука (вълната) е по -висока или по -ниска от входната честота (Fix_Hz), която потребителят иска да сравни. В допълнение, изходният SSEG представлява дисплея на седемте сегмента и точката след това, докато AN представлява анодите, за които набор от седемте сегмента се показват, за да светне.

В този седемсегментен декодер часовникът (CLK) играе важна роля в показването на две различни стойности на два или повече различни анода. Тъй като таблото не ни позволява да показваме две различни стойности едновременно, трябва да използваме мултиплексиране, за да покажем стойност една по една, като същевременно превключваме в друга стойност достатъчно бързо, че очите ни не могат да я уловят. Тук влиза в действие CLK входът.

За повече информация, моля, вижте изходния код.

Стъпка 9: Vivado (Комбиниране на компоненти)

След като всички модули (приемник на python, компаратор, седем сегментен декодер и т.н.) бъдат завършени, ние заедно с помощта на по -големия модул. Точно както е показано на снимката в секцията „Over view“, ние свързваме всеки сигнал съответно. За справка, моля, проверете нашия изходен код "SW_Hz.vhd".

Благодаря ти. Надявам се, че ти харесва.

Препоръчано: