Добрый вечер)) Не спрашивайте зачем (дабы делаю из чистого любопытства ), но хетелось бы узнать, возможно ли реализовать на базе Атмеги распознаватель нот из окружающей среды?
Идея в том, чтобы при появлении звука устройство выдавало на дисплей ноту, которая соответствует данному звуку в данный момент. Поскольку каждая нота является по сути определённой частотой звуковых колебаний, задача сводится к распознаванию частоты, поступающего с микрофона сигнала.
Хотелось бы узнать, возможна ли реализация данной идеи вообще, и если возможна, то как именно?
Смотря какие звуки.. Если, например, меандр или синус, то будет просто частотомер, каких полно. Беда только, что таких звуков практически не бывает. Проблема в том, что у каждого инструмента свой тембр звучания с многочисленнми гармониками. Например, у гитары амплитуда второй гармоники почти в 2 раза превышает амплитуду первой. Сделать настройщик даже для гитары - нетривиальная задача, где по-серьезному без DSP не обойтись. Меги для этого подходят крайне плохо. Имеются, конечно, проекты настройщиков и на Мегах, но это баловство. Впрочем, можете погуглить проекты настройщиков для понимания проблемы. При распознавании звуков, особенно без ограничения на инструмент, возникнут те-же проблемы, что и в настройщиках.
Проблема не в частотомере, а в определении периода колебаний сложной формы с богатым спектром гармоник. Может это и проще для спектра пианино, но я сомневаюсь. Надо исследовать. Для начала посмотрите сигнал с микрофона на осциллографе при нажатии клавиш. У меня дома нет пианино.
Котофеи! Пианино звучит, только за счёт механической вибрации струн. А если, допустим, в районе струн установить звукосниматель для гитары. Мне кажется замеры будут точнее чем с микрофона. Далее снятый звук разложить побыринькому с помощью господина Фурье, ну и выделить нужную частоту. Как идейка? Спектроанализатор нужно человеку сделать с точными частотами.
Далее снятый звук разложить побыринькому с помощью господина Фурье,
Тут лучше покатит алгоритм Герцеля, т.к. надо распознавать частоты из конечного набора. Сразу отпадает проблема формы, ибо основную гармонику нота уж точно будет содержать. По сути то же ДПФ, только в виде фильтра. И гораздо менее ресурсоемко.
1. Заполняем буфер отсчетами.
2. Прогоняем алгоритм Герцеля для интересующих нот.
3. Решаем, какие пристутствуют в сигнале, и гордо показываем результат.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Мдя... я конечно постораюсь понять принцип работы и использования алгоритма, но сомневаюсь что выйдет, пока для меня это другая планета
Пойду, окунусь в мир неизвестного
Сам алгоритм детально описан (я бы даже сказал, разжеван) по ссылке, что я дал выше. Сам ей пользовался.
Вкратце:
1. Считаем несколько волшебных коэффициентов.
2. N раз вычисляем несколько уравнений.
3. По простой формуле получаем амплитуду интересующей гармоники в попугаях. Чем больше попугаев, тем выраженнее интересующая гармоника в сигнале.
Единственное, для AVR желательно реализовать этот алгоритм для чисел с фиксированной точкой, ибо с float без FPU будет зело медленно. Т.е., тупо умножаем коэффициенты на, скажем, 10.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Я вот тоже такого мнения... Только никак не въеду в работу частотометра на атмеге. Там получается поступает сигнал на ногу, по таймеру считает (к примеру каждую секунду) количество импульсов и вычисляет частоту. Я в правильном направлении мыслю?