Съдържание:
- Стъпка 1: Списък на оборудването (направете снимка на дъската и Comp на Кевин)
- Стъпка 2: Общ преглед
- Стъпка 3: Wav файл
- Стъпка 4: Python- Използване на Pylab и Scipy
- Стъпка 5: Python-Sampling и FFT (Показване на кода и неговите резултати)
- Стъпка 6: Vivado (компаратор)
- Стъпка 7: СНИМКИ НА БАЗА 3 Борд
- Стъпка 8: Vivado (7 -сегментен декодер с мултиплексиране)
- Стъпка 9: Vivado (Комбиниране на компоненти)
Видео: Тунер: 9 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
Този проект е предназначен да направи тунер за китара с помощта на Vivado и 7-сегментен дисплей. След като тунерът намери честотата на въведения звук, тунерът ще сравни тази стойност със списък с твърдо кодирани стойности за точни честоти, които са известни като стандартна честота за правилната височина на нотата. Тогава тунерът ще покаже колко близо или далеч е вашият въведен звук от желаната ви нота. Интересното е, че звуковата вълна е комбинация от множество синусоидални вълнови форми с реални и въображаеми компоненти. Въпреки че това може да изглежда трудно за работа с непознати, има няколко начина, по които все още можем да анализираме вълна с реални и въображаеми стойности.
Демонстрация:
Стъпка 1: Списък на оборудването (направете снимка на дъската и Comp на Кевин)
Първо се нуждаем от дъска Basys 3 и компютър, който поддържа следните програми.
Python - може да използва pylab и scipy за вземане на проби и fft
Vivado - за да се свържете с дъската Basys 3 и визуално да видите резултатите
Стъпка 2: Общ преглед
Тунерът се състои от няколко важни компонента: микрофон, семплер, FFT (бърза трансформация на Фурие), компаратор, декодер и дисплей. Целта на микрофона е да улавя входната форма на вълната. Семплерът получава изходния сигнал на микрофона и използва FFT, за да преобразува сигнала в изход с величина в честоти. След това, използвайки изхода на FFT и намирането на максималната величина и свързаната с него честота, разделена на 2, може да се намери честотата, свързана с височината на формата на вълната. След това тази стойност може да влезе в сравнителя. След това се сравнява с таблица за търсене, която вече е задала честотни стойности за перфектни тонове на всички ноти. На компаратора се дава вход за желаната бележка, който след това може да съпостави желаната бележка с нейната правилна честота от таблицата за търсене. Тогава компараторът ще избере бележката с най -близката до максималната честота. Сравнителят ще сравни двете стойности и ще види близо стойността на честотата до желаната и след това ще постави тези данни в сигнал. Компараторът ще изпрати този сигнал до декодера, където декодерът ще избере входовете за анодите на 7-сегментния дисплей, за да покаже точността на нотата.
Стъпка 3: Wav файл
В тази стъпка ще вземем wav файл на височина и ще се опитаме да изведем честотата на тази височина.
Първо се нуждаете от wav файл с бележка. В този пример ще използваме 16 -битов стерео wav файл с честота на дискретизация 44,1 kHz. Това може да бъде създадено в DAW като Garageband или изтеглено. За този пример, A4 440Hz синусоидална вълна, генерирана от нас в Garageband, може да бъде изтеглена тук.
Стъпка 4: 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 (компаратор)
В тази част от процеса се нуждаем от сравнител, за да сравним две входни честоти.
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 Борд
Стъпка 8: Vivado (7 -сегментен декодер с мултиплексиране)
Всичко се нуждае от дисплей. Това е важен фактор, който определя стойността на дизайна. Следователно, трябва да създадем дисплей, използвайки седемсегментен декодер, което би ни позволило да демонстрираме способността си да проектираме тунер на B Board. Освен това би ни помогнало при тестването и отстраняването на грешки.
Седемсегментен декодер съдържа входове с име Note, ниско, високо и CLK, докато извежда SSEG, AN и Fiz_Hz. По -горе има снимка на блокова диаграма, която да ни помогне да разберем дизайна.
Целта на наличието на два отделни ниски и високи входа е да се предостави на дизайнера на компаратора свободата да манипулира дали честотата на звука (вълната) е по -висока или по -ниска от входната честота (Fix_Hz), която потребителят иска да сравни. В допълнение, изходният SSEG представлява дисплея на седемте сегмента и точката след това, докато AN представлява анодите, за които набор от седемте сегмента се показват, за да светне.
В този седемсегментен декодер часовникът (CLK) играе важна роля в показването на две различни стойности на два или повече различни анода. Тъй като таблото не ни позволява да показваме две различни стойности едновременно, трябва да използваме мултиплексиране, за да покажем стойност една по една, като същевременно превключваме в друга стойност достатъчно бързо, че очите ни не могат да я уловят. Тук влиза в действие CLK входът.
За повече информация, моля, вижте изходния код.
Стъпка 9: Vivado (Комбиниране на компоненти)
След като всички модули (приемник на python, компаратор, седем сегментен декодер и т.н.) бъдат завършени, ние заедно с помощта на по -големия модул. Точно както е показано на снимката в секцията „Over view“, ние свързваме всеки сигнал съответно. За справка, моля, проверете нашия изходен код "SW_Hz.vhd".
Благодаря ти. Надявам се, че ти харесва.
Препоръчано:
Как да си направим тунер за китара Arduino: 4 стъпки
Как да си направим тунер за китара Arduino: Това са инструкциите за направата на китарния тунер от Arduino и няколко други компонента. С основни познания по електроника и кодиране ще можете да направите този китарен тунер. Първо трябва да знаете какви са материалите
Тунер за китара Arduino: 3 стъпки
Arduino Guitar Tuner: Ето един китарен тунер, който направих с Arduino Uno и някои неща, които имах да лежа. Работи по следния начин: Има 5 бутона всеки, които ще произвеждат различна нота в стандартната настройка за китара EADGBE. Тъй като имах само 5 бутона, написах код, така че
Ukelele тунер, използващ LabView и NI USB-6008: 5 стъпки
Ukelele Tuner Използване на LabView и NI USB-6008: Като проект за учене, базиран на проблеми за моя LabVIEW & Инструментален курс в Humber College (Electronics Engineering Technology), създадох тунер за укулеле, който ще приема аналогов вход (тон на укулеле на струна), ще намери основната честота
Хакване на ТВ тунер за четене на снимки на Земята от сателити: 7 стъпки (със снимки)
Хакване на ТВ тунер за четене на снимки на Земята от сателити: Има много сателити над главите ни. Знаете ли, че само с вашия компютър, ТВ тунер и обикновена антена „Направи си сам“можете да получавате предаванията от тях? Например снимки на Земята в реално време. Ще ви покажа как. Ще ви трябва:- 2 w
Поправете реколта за радио тунер: 11 стъпки (със снимки)
Поправете низа на Vintage Radio Tuner: Вече има някои много хубави уроци по старинни радиостанции, но имах конкретен проблем: радиото включва радио, издава шум и става по -силно с копчето за сила на звука, но завъртането на копчето за настройка не премества иглата или канала