Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Тема закрыта

Распознание нот AtMega8

Пн июл 02, 2012 17:40:29

Добрый вечер)) Не спрашивайте зачем (дабы делаю из чистого любопытства :) ), но хетелось бы узнать, возможно ли реализовать на базе Атмеги распознаватель нот из окружающей среды?
Идея в том, чтобы при появлении звука устройство выдавало на дисплей ноту, которая соответствует данному звуку в данный момент. Поскольку каждая нота является по сути определённой частотой звуковых колебаний, задача сводится к распознаванию частоты, поступающего с микрофона сигнала.
Хотелось бы узнать, возможна ли реализация данной идеи вообще, и если возможна, то как именно?

Re: Распознание нот AtMega8

Пн июл 02, 2012 18:01:05

Смотря какие звуки.. Если, например, меандр или синус, то будет просто частотомер, каких полно. Беда только, что таких звуков практически не бывает. Проблема в том, что у каждого инструмента свой тембр звучания с многочисленнми гармониками. Например, у гитары амплитуда второй гармоники почти в 2 раза превышает амплитуду первой. Сделать настройщик даже для гитары - нетривиальная задача, где по-серьезному без DSP не обойтись. Меги для этого подходят крайне плохо. Имеются, конечно, проекты настройщиков и на Мегах, но это баловство. Впрочем, можете погуглить проекты настройщиков для понимания проблемы. При распознавании звуков, особенно без ограничения на инструмент, возникнут те-же проблемы, что и в настройщиках.

Re: Распознание нот AtMega8

Пн июл 02, 2012 18:08:31

Распознавать нужно будет звук пианино.
Вот к примеру на картинке изображено соответствие нот и частот.
Изображение

здесь с учётом октавы http://www.myguitar1.narod.ru/index/lessons/urok_tabl_not.htm

Если сделать частотомер и определёные интервалы присвоить определённым нотам, то как поведёт себя аппарат?

Re: Распознание нот AtMega8

Пн июл 02, 2012 18:42:28

Проблема не в частотомере, а в определении периода колебаний сложной формы с богатым спектром гармоник. Может это и проще для спектра пианино, но я сомневаюсь. Надо исследовать. Для начала посмотрите сигнал с микрофона на осциллографе при нажатии клавиш. У меня дома нет пианино.

Re: Распознание нот AtMega8

Пн июл 02, 2012 19:05:08

А у меня нет осциллографа :) .
Может вы сможете скачать эмулятор пианино и посмотреть сигнал, ато мне вообще никак :(

Re: Распознание нот AtMega8

Пн июл 02, 2012 19:13:57

Извините, я занят по горло другими проектами. Посмотрите для начала этот проект и особенно линки на аналогичные в конце.

Re: Распознание нот AtMega8

Пн июл 02, 2012 19:20:28

эмулятор и живой инструмент- разные для исследования вещи. Запиши сигнал с микрофона в WaveLab или Sound Forge

Re: Распознание нот AtMega8

Пн июл 02, 2012 20:18:53

Котофеи! Пианино звучит, только за счёт механической вибрации струн. А если, допустим, в районе струн установить звукосниматель для гитары. Мне кажется замеры будут точнее чем с микрофона. Далее снятый звук разложить побыринькому с помощью господина Фурье, ну и выделить нужную частоту. Как идейка? Спектроанализатор нужно человеку сделать с точными частотами.

Re: Распознание нот AtMega8

Пн июл 02, 2012 21:49:01

Далее снятый звук разложить побыринькому с помощью господина Фурье,


Тут лучше покатит алгоритм Герцеля, т.к. надо распознавать частоты из конечного набора. Сразу отпадает проблема формы, ибо основную гармонику нота уж точно будет содержать. По сути то же ДПФ, только в виде фильтра. И гораздо менее ресурсоемко.

1. Заполняем буфер отсчетами.
2. Прогоняем алгоритм Герцеля для интересующих нот.
3. Решаем, какие пристутствуют в сигнале, и гордо показываем результат.

Re: Распознание нот AtMega8

Пн июл 02, 2012 22:32:56

Мдя... я конечно постораюсь понять принцип работы и использования алгоритма, но сомневаюсь что выйдет, пока для меня это другая планета :)
Пойду, окунусь в мир неизвестного :))

Re: Распознание нот AtMega8

Вт июл 03, 2012 19:20:02

принцип работы и использования алгоритма


Сам алгоритм детально описан (я бы даже сказал, разжеван) по ссылке, что я дал выше. Сам ей пользовался.

Вкратце:

1. Считаем несколько волшебных коэффициентов.
2. N раз вычисляем несколько уравнений.
3. По простой формуле получаем амплитуду интересующей гармоники в попугаях. Чем больше попугаев, тем выраженнее интересующая гармоника в сигнале.

Единственное, для AVR желательно реализовать этот алгоритм для чисел с фиксированной точкой, ибо с float без FPU будет зело медленно. Т.е., тупо умножаем коэффициенты на, скажем, 10.

Re: Распознание нот AtMega8

Вт июл 03, 2012 20:05:34

Похоже для моего полугуманитарного мозга это слишком сложная задача :(
Придётся заморозить проект....

Re: Распознание нот AtMega8

Вт июл 03, 2012 20:19:39

Если не много переделать http://elm-chan.org/works/akilcd/report_e.html то я думаю должно получится.

Re: Распознание нот AtMega8

Вт июл 03, 2012 20:24:13

Из Вашего пояснения не понятно в один момент времени , сколько нот будет звучать?

Re: Распознание нот AtMega8

Вт июл 03, 2012 20:31:23

в один момент одна нота.

Re: Распознание нот AtMega8

Вт июл 03, 2012 20:46:13

Частотомер + таблица нот. Коротко и быстро

Re: Распознание нот AtMega8

Вт июл 03, 2012 23:22:31

Я вот тоже такого мнения... Только никак не въеду в работу частотометра на атмеге. Там получается поступает сигнал на ногу, по таймеру считает (к примеру каждую секунду) количество импульсов и вычисляет частоту. Я в правильном направлении мыслю? :solder:

Re: Распознание нот AtMega8

Ср июл 04, 2012 00:23:34

В абсолютно правильном.

Re: Распознание нот AtMega8

Ср июл 04, 2012 18:58:30

Лучше измерять период.

Re: Распознание нот AtMega8

Ср июл 04, 2012 21:50:33

Кстати верно говорите... :) Подсчитать несколько периодов и вычислить амплитуду сигнала, дабы не принимать помехи за сигналы...
Тема закрыта