Комментарии 134
Крут.
А как открыть шкутулку, если рядом нет пианино?
Телефон с нужной мелодией. Не?
Можно сыграть ту же мелодию на другом инструменте. Или, наверное, насвистеть. Важно воспроизвести нужную частоту.
А может в этом весь смысл? Открыть шкатулку можно ТОЛЬКО рядом с пианино?
Спеть мелодию?
Кинуть в пол.
Оригинальная идея!
Ух ты ж ёжик как полезно! Огромное спасибо!
Как это нет пианино? В каждой квартире оно обязано быть :) В крайнем случае можно поставить пианино на смартфон. А если серьёзно, то практичней было бы открывать её после настукивания нужной мелодии.
Автор молодец, крайне интересный подход к такой стандартной задаче.
Автор молодец, крайне интересный подход к такой стандартной задаче.
Я сначала тоже думал про стук. Однако, такую штуку уже кто-то сделал. А с мелодией чуть интереснее.
Можно было бы сделать крышку из нескольких разных сортов дерева, чтобы при стуке они издавали звук разной частоты. Правда со временем дерево начало бы сохнуть, что повлияло бы на звучание. Впрочем, можно было бы добавить функцию калибровки, а заодно и функцию «хард-ресета» с уничтожением содержимого шкатулки… Но это уже комбайн какой-то получается :)
А еще можно поставить шариковый тилт сенсор, он реагирует на легкие вибрации и можно отлично распознавать стук (проверял лично). Ну и конечно для этого важно чтобы он располагался правильно в пространстве. Итого получается что шкатулку нужно правильно расположить в пространстве и легонько настучать по ней через заданные промежутки.
Для очень большой шкатулки)
Есть пару вопросов. Можно ли напеть мелодию и думали ли вы, что все шкатулки, которые надежно закрыты, должны быть сделаны так, что бы не открывались, если дернуть крышку.
Просто сейчас выглядит как-то слабенько (шкатулка и замочек)
Просто сейчас выглядит как-то слабенько (шкатулка и замочек)
Мелодию напеть, теоретически, можно. Поскольку важна частота, думаю, талантливый певец сможет её воспроизвести. У меня самого не вышло.
Не могу спорить, что эту деревянную шкатулку несложно взломать. Однако, мне сложно представить, как её взломать не оставив следов взлома.
Не могу спорить, что эту деревянную шкатулку несложно взломать. Однако, мне сложно представить, как её взломать не оставив следов взлома.
Можно попробовать развить алгоритм, чтобы он ориентировался не на конкретные частоты, а на мелодию, спетую в любой тональности. То есть прослушал мелодию -> выделил ноты -> проанализировал ступени — если совпало с каким-то допуском: типа I-III-V (не зависимо от тональности) то открывает.
Это очень интересная идея. Если бы процессор был помощнее, то я бы сделал преобразование Фурье, и мог бы работать с любой тональностью. Надо покопать мат. часть, выяснить, можно ли это сделать без преобразования.
Можно. Автокорреляцию считать. Даже мега потянет реалтайм, я так делал гитарный тюнер, который определял ноты от 80 Гц до 2КГц, кажется. С точностью до 0.1 интервала между соседними нотами (для 80 гц, МИ, следующая нота ФА 84.7, интервал — 4.7 герца!).
В качестве «пасхального яйца» при обнаружении мелодии частушек, тюнер выдавал сообщение.
Определял все, и свист, и пение.
В качестве «пасхального яйца» при обнаружении мелодии частушек, тюнер выдавал сообщение.
Определял все, и свист, и пение.
Расскажите про автокорреляцию. Ведь имеется в виду автокорреляционная функция, так?
Какая у вас была частота дискретизации? Сколько надо было самплов для определения?
Какая у вас была частота дискретизации? Сколько надо было самплов для определения?
Да, АКФ.
ЧД подстраивалась автоматически, т.к. диапазон был весьма широкий (до 2КГц).
Семплов столько, сколько нужно чтобы уместился хотя бы один период. Если есть время — можно и несколько, чтобы точнее определять.
ЧД подстраивалась автоматически, т.к. диапазон был весьма широкий (до 2КГц).
Семплов столько, сколько нужно чтобы уместился хотя бы один период. Если есть время — можно и несколько, чтобы точнее определять.
Здорово! А, если не секрет, на каком железе вы это делали?
На меге88, но это было, скажем так, по молодости)
Сейчас я настоятельно бы рекомендовал не страдать фигней, а взять контроллер серии STM32F1xx, которые по цене есть дешевле любой меги, но являются полноценными 32-битными армами, с аппаратными 32-битными же умножителями, аппаратным делителем и частотами до 72 МГц.
На нем со свистом пойдет и Фурье, и АКФ и любая другая обработка сигнала.
Сейчас я настоятельно бы рекомендовал не страдать фигней, а взять контроллер серии STM32F1xx, которые по цене есть дешевле любой меги, но являются полноценными 32-битными армами, с аппаратными 32-битными же умножителями, аппаратным делителем и частотами до 72 МГц.
На нем со свистом пойдет и Фурье, и АКФ и любая другая обработка сигнала.
Спасибо за рекомендации. Я обязательно посмотрю и на алгоритм, и на эти устройства. Эх, знал бы прикуп…
А если поставить STM32F4xx так можно и голосом управлять, вроде «сизам, откройся».
Поставить мало, нужно еще и алгоритм нормальный.
Вообще, распознавание речи и на STM32F1xx можно сделать, у него возможности широкие)
Вообще, распознавание речи и на STM32F1xx можно сделать, у него возможности широкие)
Если делать «голосовое управление», то оно влезет и в атмелину так как распознаётся отпечатки голосовой команды, а если нужно «распознавание речи», из звука в текст, то тут с алгоритм уже всё изобретен до нас, но требования у него значительно выше (fft+память).
Вы его сами проверяли, то которое «в атмелину»? Товарищи из этого универа склонны сильно приукрашивать действительность.
Нет, не проверял, нет надобности, ведь главное понять как оно работает, этот алго используют со времён появления голосового управления в мобильных телефонах (именно его использовали в старых сименсах). А на атмелинах я бы такое не собирал, ведь есть же нормальные DSP для этого, вот например готовое решение от microchip (правда оно платное и его надо ещё обучить русскому).
Ну и сравните то, что предлагает Microchip, и то, что предлагают эти студенты)
Speaker-independent recognition of isolated words
No speaker training is required
Hidden-Markov Model based recognition system
Это, мягко говоря, более интересный алгоритм, чем банк фильтров и прямое сравнение с «фингерпринтом». О том и речь, что на атмеле такое реализовывать, на самом деле, неправильное решение. Результат все равно будет кривой. Взяв тот же STM32F1xx можно уже полноценно реализовать голосовое управление не хуже чем у микрочипа.
Speaker-independent recognition of isolated words
No speaker training is required
Hidden-Markov Model based recognition system
Это, мягко говоря, более интересный алгоритм, чем банк фильтров и прямое сравнение с «фингерпринтом». О том и речь, что на атмеле такое реализовывать, на самом деле, неправильное решение. Результат все равно будет кривой. Взяв тот же STM32F1xx можно уже полноценно реализовать голосовое управление не хуже чем у микрочипа.
его хрен припаяешь без джедайского скилла. А так, конечно, кульный контроллер.
Зато если использовать «фингерпринт», то велика вероятность того, что если кто нибудь другой скажет «сизам откройся!», то шкатулка — не откроется, вот ещё один метод защиты её содержимого.
Ага, а также велика вероятность что откроется от звука выхлопа автомобиля, падающей книжки или еще чего-нибудь, по счастливой случайности совпавшего по спектру (учитывая 8 банков и промежуток времени, за который они копят результат — более чем вероятно).
Или не откроется если даже владелец скажет «сезам откройся», потому что он будет говорить слишком быстро или слишком медленно.
Чтобы из этого алгоритма сделать более-менее надежный, нужно его очень неслабо допилить, вообще говоря.
Или не откроется если даже владелец скажет «сезам откройся», потому что он будет говорить слишком быстро или слишком медленно.
Чтобы из этого алгоритма сделать более-менее надежный, нужно его очень неслабо допилить, вообще говоря.
В мобилках с этим борятся «затуплением» чувствительности микрофона, чтобы не принимать посторонние звуки, да и запуск голосового управления обычно инициируется нажатием кнопки на гарнитуре. Я не говорю что нужно скопипастить алго, допиливать в любом случае прийдётся, но как простой вариант для «попробовать» — вполне сойдёт. А бороться с изменениями скорости говора можно увеличив кол-во банков и уменьшив время выборки (при этом делать адаптивный поиск ± 2...3 выборки от ожидаемого значения и ввести коэффициент скорости).
Банки, ИМХО, нужно вообще убрать — это аналог Фурье с очень мелким разрешением. Фурье на 64 точки мега спокойно тянет.
Когда я делал такую штуку, то выполнял дискретное преобразование Хартли на 128 точек, получал 64 значащие точки частоты, из них делал выходные 10, усреднением (усредняя не поровну, а в зависимости от частоты) и таких 10-точечных строк копил еще штук 8, кажется. Итого одна матрица-спектрограмма покрывала около 0.5 с, кажется. Это все было писано на асме и крутилось на меге88, в реалтайме, естественно.
Матрицы сравнивались через коэффициент корреляции.
Реализация этой штуки принесла мне осознание того, что упихиваться в мегу — безумие) не потратив, наверное, ни рубля лишнего, я бы мог спокойно поставить любую СТМку и реализовать более точный и красивый алгоритм) Так что впихивать такое в восьмибитки это чисто ради обучения разве что. И осознания границ.
Когда я делал такую штуку, то выполнял дискретное преобразование Хартли на 128 точек, получал 64 значащие точки частоты, из них делал выходные 10, усреднением (усредняя не поровну, а в зависимости от частоты) и таких 10-точечных строк копил еще штук 8, кажется. Итого одна матрица-спектрограмма покрывала около 0.5 с, кажется. Это все было писано на асме и крутилось на меге88, в реалтайме, естественно.
Матрицы сравнивались через коэффициент корреляции.
Реализация этой штуки принесла мне осознание того, что упихиваться в мегу — безумие) не потратив, наверное, ни рубля лишнего, я бы мог спокойно поставить любую СТМку и реализовать более точный и красивый алгоритм) Так что впихивать такое в восьмибитки это чисто ради обучения разве что. И осознания границ.
А учитывая что в CTMках есть уже разжованные примеры того как это всё ускорить при помощи CMSIS-DSP, так в сторону атмеловских ногодрыгалок и нечего вообще смотреть. Но тут возникает вопрос, а не поставить ли оперативку+флешь, и не запилить ли speech-to-text?
Меня больше интересует вопрос так ли сильно тут нужна оперативка и флеш — почему-то кажется, что можно достигнуть вполне удобоваримого компромисса на какой-нибудь ST32F103, с метром флеша и 192 кб оперативки.
Метром флеша не обойтись. 30Мб — русский словарь, основанный на аудиокнигах. А насчёт оперативки — тут как повезёт, нужно смотреть сколько нужно этой libpocketsphinx.
Я как-то, кстати, собрал распознавалку голоса со сфинксом. Телефон целый. Правда, железом послужил дешёвый плеер на базе Android.
Эти фингерпринты, на самом деле более чем похожи друг на друга, и в реальности заставить распознать несколько команд дело долгой и муторной подстройки, в итоге получается штука весьма кривая.
Поэтому алгоритм этих товарищей без доработок я бы не стал юзать.
А тот что «изобретен до нас» — ну в том то и дело, что можно попробовать сократить требования к памяти/вычислительным мощностям без заметного ухудшения качества распознавания.
Поэтому алгоритм этих товарищей без доработок я бы не стал юзать.
А тот что «изобретен до нас» — ну в том то и дело, что можно попробовать сократить требования к памяти/вычислительным мощностям без заметного ухудшения качества распознавания.
Скажите, а вот эти STM-ки могут оцифровывать речь и класть на SD (свой диктофон с поэтессами и шахматами)?
Разумеется. Это и на Меге можно сделать.
А STM предоставит вам следующие плюсы:
1) DMA — вам достаточно будет настроить таймер, ацп и ДМА, все, данные будут перекидываться в ваш буфер сами, без участия процессора.
2) На некоторых моделях есть аппаратный SDIO, то есть с карточкой общаться будет намного проще и быстрее.
2.1) DMA можно использовать и тут — перекидывая буферы на карточку и не занимая процессорное время.
А STM предоставит вам следующие плюсы:
1) DMA — вам достаточно будет настроить таймер, ацп и ДМА, все, данные будут перекидываться в ваш буфер сами, без участия процессора.
2) На некоторых моделях есть аппаратный SDIO, то есть с карточкой общаться будет намного проще и быстрее.
2.1) DMA можно использовать и тут — перекидывая буферы на карточку и не занимая процессорное время.
В равномерно темперированной шкале два соседних полутона по частоте отличаются в 21/12 = ¹²√2 раз — почти на 6 %. А уж сколько это будет в герцах — другой вопрос.
Поскольку нотный ряд основан на отношении частот (октава — 2, квинта — ~1.5, и т.д.), то, если не ошибаюсь, достаточно вычислить, во сколько раз частота первой ноты отличается от эталонной, а потом все последующие частоты сравнивать с учётом этого коэффициента.
Тогда, в какой бы тональности не пели, просто нужно будет не сфальшивить.
Тогда, в какой бы тональности не пели, просто нужно будет не сфальшивить.
*в какой бы тональности ни пели
Ясно. Я испугался вычисления точной частоты первой ноты. Но, судя по комментариям Ariman'а, есть довольно изящный способ эту задачу решить.
Если я правильно понял принцип, то там определяемая частота накладывается на заранее известную, и по наличию «биений» между ними делается вывод, одинаковы они или нет.
Т. е. можно выяснить, равна ли частота эталону, но это не даст компенсацию общей тональности, когда все частоты просто отличаются, допустим, в 1.33 раза, но их соотношение между собой — правильное.
Если человек спел в целом выше, но гармонически верно.
Т. е. можно выяснить, равна ли частота эталону, но это не даст компенсацию общей тональности, когда все частоты просто отличаются, допустим, в 1.33 раза, но их соотношение между собой — правильное.
Если человек спел в целом выше, но гармонически верно.
Неправильно)
АКФ это функция корреляции сигнала с самим собой. Для периодического сигнала АКФ тоже будет периодической с периодом равным периоду сигнала. Если сигнал как следует отфильтровать, а после вычислить его АКФ, получим красивую картинку, с явно выраженными периодами, несмотря на наличие высших гармоник. Считаем период — получаем точное значение частоты. Ну, насколько точное, зависит от ЧД.
АКФ это функция корреляции сигнала с самим собой. Для периодического сигнала АКФ тоже будет периодической с периодом равным периоду сигнала. Если сигнал как следует отфильтровать, а после вычислить его АКФ, получим красивую картинку, с явно выраженными периодами, несмотря на наличие высших гармоник. Считаем период — получаем точное значение частоты. Ну, насколько точное, зависит от ЧД.
Спасибо за пояснение.
Кажется, понял.
Коэфициент корреляции оценивает подобность 2 участков одной или разных функций.
Это как раз способ определить те самые «биения».
А для автокорреляционной функции сигнал сравнивается с самим собой, сдвинутым на определённое время, и АКФ — это зависимость «коэффициента биений» от величины этого сдвига.
Т. е. расстояние между двумя минимумами или максимумами коэффициента корреляции как раз будет равно периоду сигнала.
Это (видимо, более простой, чем Фурье?) способ вычисления доминирующей частоты.
В общем, не буду заставлять Вас объяснять мне математический анализ, учиться надо было лучше. :)
Кажется, понял.
Коэфициент корреляции оценивает подобность 2 участков одной или разных функций.
Это как раз способ определить те самые «биения».
А для автокорреляционной функции сигнал сравнивается с самим собой, сдвинутым на определённое время, и АКФ — это зависимость «коэффициента биений» от величины этого сдвига.
Т. е. расстояние между двумя минимумами или максимумами коэффициента корреляции как раз будет равно периоду сигнала.
Это (видимо, более простой, чем Фурье?) способ вычисления доминирующей частоты.
В общем, не буду заставлять Вас объяснять мне математический анализ, учиться надо было лучше. :)
Я почти угадал, только вместо эталонной частоты используется этот же сигнал.
Если не ошибаюсь, наглядно это можно представить как муар на противомоскитной сетке.
Сдвигая 2 её слоя друг относительно друга, мы получаем волны затемнений — биения «коэффициента корреляции».
Величина сдвига, при которой в какой-то же точке снова получится минимум или максимум, будет равна размеру ячейки сетки. Т. е. периоду колебаний.
Если не ошибаюсь, наглядно это можно представить как муар на противомоскитной сетке.
Сдвигая 2 её слоя друг относительно друга, мы получаем волны затемнений — биения «коэффициента корреляции».
Величина сдвига, при которой в какой-то же точке снова получится минимум или максимум, будет равна размеру ячейки сетки. Т. е. периоду колебаний.
Просто напрашивается: а если батарейка сядет? Reset не поможет, только механика. Что-то предусмотрено в таком случае?
Что будет когда сядет батарейка у закрытой шкатулки?
Ответил комментарием выше, есть разъём для зарядки.
а в каком месте тут упомянутый в тегах arduino?
Arduino – в душе этого проекта. Во-первых, чип ATMega328P используется в Arduino Uno. Во-вторых, программа использует библиотеки и бутлоадер от Arduino. Ну, и, в-третьих, целый ряд инженерных решений навеян решениями плат Arduino.
Вот только раз уж так основательно взялись, то могли бы и нормальную плату сделать. Без этого шилдостроительного изврата. Один фиг травить пришлось. А так вся конструкция заняла бы не отсек с кулак, а раза в три-четыре меньше.
Нормальную плату – это как? Заказ на фабрике?
Полагаю, нормальную — это без «этажерок».
Слишком много места они сейчас занимают.
Слишком много места они сейчас занимают.
Я ж этажерку сделал не ради этажерки: не смог на одном слое развести. Ну а многослойную дома сложно делать. Каков выход?
Убрать лишние разъемы (оставить только мелкие площадки, если уж они нужны для дебага), резисторы и кондеры заменить на 0805 СМДшные, мегу, кстати, тоже можно.
Плату сделать двустороннюю — дома вполне реально. На крайний случай, как я это называю, полуторасторонню) То бишь с обратной стороны кидать перемычки из проводов.
Плату сделать двустороннюю — дома вполне реально. На крайний случай, как я это называю, полуторасторонню) То бишь с обратной стороны кидать перемычки из проводов.
Ваша схема на выводных компонентах. Ее даже тупой игловский автороутер раскидает по одному слою с небольшим количеством соплей. Не говоря уже про ТопоР или freerouter. Топор так еще нарисует теплые ламповые дорожки. Особенно няшно смотрящиеся в контексте изделия.
Плюс многослойную дома делать не сложней чем однослойную. Тем более фоторезистом. Делаешь одну сторону (вторую закрываешь скотчем) травишь. Потом вытравленное закрываешь, делаешь вторую сторону, травишь. Сверлишь. Совмещение по трем отверстиями.
Плюс многослойную дома делать не сложней чем однослойную. Тем более фоторезистом. Делаешь одну сторону (вторую закрываешь скотчем) травишь. Потом вытравленное закрываешь, делаешь вторую сторону, травишь. Сверлишь. Совмещение по трем отверстиями.
Кстати, seeedstudio же есть. Как понимаю, вы живете не в России. Так что проблемы почты вам не ведомы. Цена там копеечная. Качество не феерия конечно (когда есть с чем сравнить), но для домашней поделки более чем достаточно.
Полазел по seeedstudio. Это базар вроде digikey и mouser, так? То есть, они только компонентами торгуют, так?
Именно. Там и заказ плат и организация мелкосерийного производства. Т.е. ты можешь вбросить туда пачку чертежей и документации, посыпать все баблом и получить на выходе 100500 готовых устройств.
А-а-а! Офигенно. Какое-то время назад вы открыли для меня dealextreme, а теперь и этот базар.
О, у них еще и лазерная резка появилась. Такими темпами глядишь и кастомное изготовление корпусов осилят.
Если человек так основателно взялся (потратился на заказной корпус), то и выбор процессора сложно одобрить — упихиваться в хилую 8битную мегу, вместо 32-битного арма за те же деньги не есть гуд — сказывается на качестве работы алгоритмов.
Ардуины развращают молодых разработчиков)
Ардуины развращают молодых разработчиков)
Привет белой зависти на прямые руки :) Респект…
А ведь шкатулка не откроется, если сыграть такую же мелодию в другой тональности…
Не-а. Нужно точное совпадение. Зато она откроется, если сыграть эту мелодию с аккомпанементом.
Если это «до» — 130 Гц, то 260 и 400, похоже, её гармоники («до» и «соль» на октаву выше).
Согласен, тоже хотел написать что это гармоники.
Сам решал подобную задачу — есть интересный вариант решения, без Фурье и аналогичных преобразований. Необходимо посчитать автокорреляцию сигнала, тогда шумы уйдут в никуда, останется очень удобный для обработки сигнал. Дальше посчитать его период.
Удалось достигнуть точности до 10 центов (0.1 интервала между соседними нотами). Куда больше чем может дать Фурье на 256 точек (или сколько там мега потянет в реалтайме?)
Сам решал подобную задачу — есть интересный вариант решения, без Фурье и аналогичных преобразований. Необходимо посчитать автокорреляцию сигнала, тогда шумы уйдут в никуда, останется очень удобный для обработки сигнал. Дальше посчитать его период.
Удалось достигнуть точности до 10 центов (0.1 интервала между соседними нотами). Куда больше чем может дать Фурье на 256 точек (или сколько там мега потянет в реалтайме?)
Там на графике не 260 и 400, а больше — скорее 280 и 415.
Мегавещь, на конвейер не думаете ставить?
apple_fan, а не могли бы вы выложить схему в PNG, или PDF? В любом формате, который можно сразу просмотреть? Глянуть интересно, а никаких просмотрщиков sch тут нет.
Несколько замечаний:
1) Человек слышит ноту «до» не «если ему щекотать нерв 130 раз в секунду» — в ухе не один нерв, в отличие от АЦП меги. В ухе происходит, по сути, то же преобразование в частотную область, и чувствительные клетки расположены во всем слуховом канале, каждая отвечает за свой интервал частот.
2) Где ваша аналоговая часть? Вы не фильтруете сигнал перед входом? Необходим антиальязинговый фильтр, иначе происходит наложение спектров, сигнал искажается.
Какая у вас частота дискретизации?
1) Человек слышит ноту «до» не «если ему щекотать нерв 130 раз в секунду» — в ухе не один нерв, в отличие от АЦП меги. В ухе происходит, по сути, то же преобразование в частотную область, и чувствительные клетки расположены во всем слуховом канале, каждая отвечает за свой интервал частот.
2) Где ваша аналоговая часть? Вы не фильтруете сигнал перед входом? Необходим антиальязинговый фильтр, иначе происходит наложение спектров, сигнал искажается.
Какая у вас частота дискретизации?
Отличные вопросы.
1) Аналогия с человеком, конечно, несколько упрощенная. Мне очень хотелось пояснить принцип работы преобразования. Я испугался, что если уйду в детали уха, то могу упустить суть.
2) Аналоговая часть скрыта в детале на базе OPA344. Вот её схема. Антиальязинговый фильтр, как я понимаю, встроен туда.
Частота дискретизации: 22260 Герц.
1) Аналогия с человеком, конечно, несколько упрощенная. Мне очень хотелось пояснить принцип работы преобразования. Я испугался, что если уйду в детали уха, то могу упустить суть.
2) Аналоговая часть скрыта в детале на базе OPA344. Вот её схема. Антиальязинговый фильтр, как я понимаю, встроен туда.
Частота дискретизации: 22260 Герц.
Судя по описанию, там слишком высокая граница у фильтра.
Вам нужен фильтр где-то на 10 кГц, иначе происходит наложение спектров.
И потом, частоту можно уменьшить, взамен получив больше времени на обработку.
Вам нужен фильтр где-то на 10 кГц, иначе происходит наложение спектров.
И потом, частоту можно уменьшить, взамен получив больше времени на обработку.
Я в этой теме новичок. Допустим, я хочу распознавать три центральные октавы: от 130 до 523 Герц. Как помогает фильтр на 10кГц в этом случае?
Кстати, если уж вам известна полоса пропускания, то вообще лучше поставить полосный фильтр, и пропускать только 130-523 (ну, с каким-нибудь небольшим запасом), повысит точность в разы.
Сейчас вы анализируете от 15 — 11130 герц, да еще и с альязингом)
Сейчас вы анализируете от 15 — 11130 герц, да еще и с альязингом)
Am Dm E Am
Се-е-еза--ам, откро-ой-сяя-я
Се-е-еза--ам, откро-ой-сяя-я
3 1 2 0 4


А что за тонкие полоски в фанерке? для чего они использованы?
Хе, в такой шкатулке можно ништяки прятать от детей, обучающихся в музыкальной школе. Пусть занимаются, пока всю фальш из произведения не уберут. Жестоко, но один из возможных стимулов.
Круто. Только у меня есть подозрение, что если жать наугад целыми аккордами, то одна из нот или гармоник ноты совпадет с искомой. Хорошо бы кроме наличия определенной ноты, проверять отсутствие соседних нот.
Также, на вашем графике — гармоники исходной ноты (с частотами, кратными основной).
Также, когда делается преобразование Фурье, нежелательно вырезать кусок сигнала, так как будет шум от того, что края резкие (а преобразование Фурье предполагает обработку бесконечного по длительности сигнала). Чтобы их уменьшить, сигнал обычно предварительно обрезается оконной функцией (так, чтобы с краев амплитуда плавно снижалась до нуля).
Голос он не распознает, по-видимому, от того, у вас что-то неправильно сделано. Так как в голосе (я проверил!) тоже есть первая гармоника, может, правда, не такая четкая, как в звуке инструмента.
Также, на вашем графике — гармоники исходной ноты (с частотами, кратными основной).
Также, когда делается преобразование Фурье, нежелательно вырезать кусок сигнала, так как будет шум от того, что края резкие (а преобразование Фурье предполагает обработку бесконечного по длительности сигнала). Чтобы их уменьшить, сигнал обычно предварительно обрезается оконной функцией (так, чтобы с краев амплитуда плавно снижалась до нуля).
Голос он не распознает, по-видимому, от того, у вас что-то неправильно сделано. Так как в голосе (я проверил!) тоже есть первая гармоника, может, правда, не такая четкая, как в звуке инструмента.
Сим-сим откройся. А Серву почему подешевле не нашел? ведь навалом же разных подешевле.
Мне очень приглянулась эта из-за ползунка. А где живут дешёвые сервы?
Спасибо, буду там теперь брать. Я за свой что-то 17$ заплатил.
> сколько раз в секунду ему «щекотали» микрофон


Надо сделать антивариант. Начинаешь фальшивить — бьет указкой по голове.
Я что-то могу сложить во едино алгоритм: Берем громкость по времени с микрофона, преобпразовываем в частоту, а потом определяем громкость каждой частоты? Звучит странно.
uint16_t NoteDetector::detect( uint16_t frequency, uint32_t timeout )
Это возвращает она 0/frequency, а не громкость, я или надо с самим алогритмом разбиратся, а это проверка — соотвествует частота ноте или нет?
uint16_t NoteDetector::detect( uint16_t frequency, uint32_t timeout )
Это возвращает она 0/frequency, а не громкость, я или надо с самим алогритмом разбиратся, а это проверка — соотвествует частота ноте или нет?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Шкатулка с музыкальным замком