Оглавление:

Тюнер: 9 ступеней
Тюнер: 9 ступеней

Видео: Тюнер: 9 ступеней

Видео: Тюнер: 9 ступеней
Видео: Top 7 Best Guitar Tuners...Pedal or Clip-On? 2024, Ноябрь
Anonim
Image
Image
Список оборудования (сделайте фото доски и компа Кевина)
Список оборудования (сделайте фото доски и компа Кевина)

Этот проект был разработан для создания гитарного тюнера с использованием Vivado и 7-сегментного дисплея. Как только тюнер найдет частоту введенного звука, тюнер сравнит это значение со списком жестко закодированных значений для точных частот, которые известны как стандартная частота для правильной высоты звука. Затем тюнер покажет, насколько близко или далеко ваш введенный звук находится от желаемой ноты. Интересно то, что звуковая волна представляет собой комбинацию множества синусоидальных сигналов с действительными и мнимыми компонентами. Хотя для незнакомых это может показаться трудным для работы, есть несколько способов, с помощью которых мы все еще можем анализировать волну с реальными и мнимыми значениями.

Демо:

Шаг 1: Список оборудования (сделайте фото доски и компа Кевина)

Для начала нам понадобится плата Basys 3 и компьютер, поддерживающий следующие программы: Garageband / Audacity или другая DAW - для записи через микрофон и экспорта файлов wav.

Python - возможность использовать pylab и scipy для выборки и fft

Vivado - для подключения к доске Basys 3 и визуального просмотра результатов

Шаг 2: Обзор

Обзор
Обзор

Тюнер состоит из нескольких важных компонентов: микрофона, сэмплера, БПФ (быстрого преобразования Фурье), компаратора, декодера и дисплея. Назначение микрофона - улавливать форму входного сигнала. Сэмплер принимает выходной сигнал микрофона и использует БПФ для преобразования сигнала в выходной сигнал амплитуды по частотам. Затем, используя выходной сигнал БПФ и находя максимальную амплитуду и связанную с ней частоту, деленную на 2, можно найти частоту, связанную с высотой тона формы волны. Затем это значение может быть передано в компаратор. Затем он сравнивается со справочной таблицей, в которой уже установлены значения частоты для идеальной высоты звука всех нот. Компаратору предоставляется вход для желаемой заметки, который затем он может сопоставить желаемую заметку с ее правильной частотой из справочной таблицы. Затем компаратор выберет ноту с наиболее близкой частотой к максимальной частоте. Компаратор сравнит два значения и увидит, что значение частоты близко к желаемому, а затем поместит эти данные в сигнал. Компаратор отправит этот сигнал в декодер, где декодер выберет входы для анодов 7-сегментного дисплея, чтобы показать точность банкноты.

Шаг 3: файл Wav

Wav файл
Wav файл

На этом этапе мы возьмем wav-файл высоты тона и попытаемся вывести частоту этого тона.

Для начала вам понадобится wav-файл заметки. В этом примере мы будем использовать 16-битный стерео файл WAV с частотой дискретизации 44,1 кГц. Его можно либо создать в DAW, например Garageband, либо загрузить. Для этого примера синусоидальную волну A4 440 Гц, сгенерированную нами в 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, мы можем преобразовать частоту с плавающей запятой в двоичную и вернуть ее.

Шаг 5: Python-выборка и БПФ (показать код и его результаты)

На этом этапе все кредиты переходят по этой ссылке ниже для выборки и БПФ.

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

После установки pylab и scipy файлы wav можно импортировать и читать.

from pylab import * from scipy.io import wavfile

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

Затем snd.shape представляет точки выборки и количество каналов. В нашем случае точки выборки зависят от длины wav-файла, а количество каналов равно 2, потому что это стерео.

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

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

Затем БПФ создает массив по частоте и величине (мощности).

Затем с помощью цикла while находят максимальную величину и связанную с ней частоту. Эта частота / 2 представляет высоту тона wav-файла.

Затем, используя наш собственный код, целое число, представляющее частоту, было преобразовано в 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

А | 0001

A # | 1001

B | 0010

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

Шаг 7: ИЗОБРАЖЕНИЯ доски BASYS 3

ФОТОГРАФИИ BASYS 3 Board
ФОТОГРАФИИ BASYS 3 Board

Шаг 8: Vivado (7-сегментный декодер с мультиплексированием)

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

Всем нужен дисплей. Это важный фактор, определяющий ценность дизайна. Следовательно, нам нужно создать дисплей с использованием семисегментного декодера, который позволил бы нам продемонстрировать нашу способность проектировать тюнер на B Board. Кроме того, это поможет нам в тестировании и отладке.

Семисегментный декодер содержит входы с именами Note, low, high и CLK, а на выходе - SSEG, AN и Fiz_Hz. Это изображение блок-схемы выше, чтобы помочь нам понять дизайн.

Назначение двух отдельных входов: низкий и высокий - предоставить разработчику компаратора возможность управлять тем, будет ли частота звука (волны) выше или ниже входной частоты (Fix_Hz), которую пользователь хочет сравнить. Кроме того, выходной сигнал SSEG представляет собой семисегментный дисплей и следующую за ним точку, в то время как AN представляет аноды, для которых должен загореться набор из семи сегментов дисплея.

В этом семисегментном декодере часы (CLK) играют важную роль в отображении двух разных значений на двух или более разных анодах. Поскольку Board не позволяет нам отображать два разных значения одновременно, мы должны использовать мультиплексирование для отображения значения по одному, при этом переключаясь на другое значение достаточно быстро, чтобы наши глаза не могли его уловить. Здесь вступает в игру вход CLK.

Для получения дополнительной информации обратитесь к исходному коду.

Шаг 9: Vivado (объединение компонентов)

Когда все модули (приемник Python, компаратор, семисегментный декодер и т. Д.) Завершены, мы собрали вместе модуль большего размера. Как показано на рисунке в разделе «Обзор», мы подключаем каждый сигнал соответствующим образом. Для справки, пожалуйста, проверьте наш исходный код "SW_Hz.vhd".

Спасибо. Надеюсь, ты повеселишься.

Рекомендуемые: