Arduino распознает определенный звук?
Мне интересно, может ли Arduino не только измерять звук и работать, основываясь на том, что он слышит «достаточно громкий» звук, но и способен ли он идентифицировать конкретный звук (скажем, первые несколько секунд песни) . Возможно ли это и как это сделать?
Если определить первые несколько секунд песни на самом деле невозможно, возможно ли это сделать с постоянной (но конкретной) высотой звука (а не с общим порогом громкости)?
@ttc100, 👍1
Обсуждение3 ответа
Лучший ответ:
Нет, вы не можете распознать песню с помощью Arduino. Ему не хватает вычислительной мощности. Я думаю, что большинство решений, которые распознают песню, основаны на каком-то машинном обучении или подобном, что совершенно не подходит для Arduino. Для этого вам нужен настоящий процессор, как на Raspberry Pi или подобных одноплатных компьютерах.
Определение определенной высоты тона/частоты в звуковом сигнале возможно, но не следует ожидать большой точности. Как уже писал Дункан в своем ответе, для этого нужно преобразование Фурье. Он преобразует звуковой сигнал (уровень напряжения зависит от времени) в частотную область (амплитуда зависит от частоты). Итак, если вы выполняете преобразование Фурье для короткого звукового сигнала, вы получаете данные о том, какие частоты в этом сигнале с какими амплитудами. Затем вы можете дождаться пика в определенном частотном диапазоне.
Выполнение БПФ (быстрого преобразования Фурье) на Arduino происходит медленно и неточно. У вас также очень ограниченная память. Таким образом, ваши проанализированные аудиосигналы будут довольно короткими.
Есть еще один способ определения определенной высоты тона/частоты, который больше зависит от аппаратного обеспечения. Вы можете подавать звуковой сигнал в RC-резонаторную схему, настроенную на интересующую вас частоту. Схема будет усиливать частоту, на которую она настроена, и гасить все остальные частоты (конечно, это не совсем так). одна конкретная частота, но небольшой диапазон частот). Полученный сигнал затем можно проверить на пороговые значения, поскольку он содержит только частоты, близкие к частоте настройки.
То, что вы описываете, является пассивным аппаратным режекторным фильтром. Это будет реагировать только на определенный диапазон частот. Я думаю, вы могли бы построить несколько режекторных фильтров и отслеживать их, чтобы обнаружить ряд нот..., @Duncan C
Да, но я сомневаюсь, что вы действительно сможете распознать настоящие песни. Простые «песни» с несколькими нотами за раз могут работать, но в обычных песнях есть несколько инструментов плюс голосовая линия. Я думаю, это делает его очень сложным (поскольку большинство инструментов также излучают много высших гармоник сыгранной ноты). Хотя я никогда не пробовал это, поэтому я не могу быть уверен здесь., @chrisl
Согласованный. Мы говорим то же самое: Arduino на основе AVR не подходит для этой работы., @Duncan C
Спасибо за вклад вашего парня. Я давно хотел заняться проектом по машинному обучению, поэтому идея добиться фактического распознавания песен с помощью Raspberry Pi интригует..., @ttc100
Похоже, вам нужно провести анализ звука Фурье. (Разбивая звук на его составляющие частоты.) Большинство Arduino основаны на чипах AVR, которые не имеют аппаратной поддержки математики с плавающей запятой. Они используют программное обеспечение для вычислений с плавающей запятой, что делает их плохим выбором для такого рода задач.
Для Arduino существуют библиотеки БПФ, но они будут медленными и довольно грубыми. Вам, вероятно, лучше использовать плату, такую как Raspberry Pi, с процессором ARM для такой обработки сигналов.
Как указано в других ответах, распознавание звука полностью исключено. область того, что может сделать Arduino, но распознавание определенного шага возможно.
Однако, вопреки предыдущим ответам, я бы рекомендовал против использовать БПФ. БПФ — правильный инструмент, когда вам нужно получить все частотные составляющие. Однако это излишне, если вы хотите посмотреть на единая частота. Учитывая низкую вычислительную мощность в вашем распоряжении, я предлагаем вам вместо этого попробовать схему обнаружения гомодина. Ардуино Uno или аналогичная плата имеет достаточно ресурсов, чтобы сэмплировать ввод на 9,6 кГц и извлекать в реальном времени определенную частотную составляющую. См., например, эту программу обнаружения гомодинов.
Заявленная цель OP — распознать определенный звук, например, первые несколько секунд песни. Я не думаю, что идентификация одночастотных компонентов будет работать для этого приложения., @Duncan C
@DuncanC: см. второй абзац ОП., @Edgar Bonet
Верно. Спасибо, хотя одна подача приемлема, и это дает мне начало., @ttc100
- Как подключить ардуино к разъему для наушников?
- Как избавиться от некачественного звука из усилителя DFPlayer plus?
- Выполнить регулировку громкости на динамике arduino
- Воспроизведение файлов *.wav через Arduino
- При нажатии кнопки мне нужно воспроизвести вступительный звуковой файл, затем один из 50 других звуков по порядку при каждом нажатии кнопки
- Функция Tone() ставит паузы между нотами
- SimpleAudioPlayer + функция сна
- Tone() генерирует высокий звук при отпускании кнопки
гугл твой друг... https://1sheeld.com/top-5-arduino-voice-control-modules/... некоторые из них могут подойти, @jsotola