Arduino распознает определенный звук?

Мне интересно, может ли Arduino не только измерять звук и работать, основываясь на том, что он слышит «достаточно громкий» звук, но и способен ли он идентифицировать конкретный звук (скажем, первые несколько секунд песни) . Возможно ли это и как это сделать?

Если определить первые несколько секунд песни на самом деле невозможно, возможно ли это сделать с постоянной (но конкретной) высотой звука (а не с общим порогом громкости)?

, 👍1

Обсуждение

гугл твой друг... https://1sheeld.com/top-5-arduino-voice-control-modules/... некоторые из них могут подойти, @jsotola


3 ответа


Лучший ответ:

0

Нет, вы не можете распознать песню с помощью Arduino. Ему не хватает вычислительной мощности. Я думаю, что большинство решений, которые распознают песню, основаны на каком-то машинном обучении или подобном, что совершенно не подходит для Arduino. Для этого вам нужен настоящий процессор, как на Raspberry Pi или подобных одноплатных компьютерах.

Определение определенной высоты тона/частоты в звуковом сигнале возможно, но не следует ожидать большой точности. Как уже писал Дункан в своем ответе, для этого нужно преобразование Фурье. Он преобразует звуковой сигнал (уровень напряжения зависит от времени) в частотную область (амплитуда зависит от частоты). Итак, если вы выполняете преобразование Фурье для короткого звукового сигнала, вы получаете данные о том, какие частоты в этом сигнале с какими амплитудами. Затем вы можете дождаться пика в определенном частотном диапазоне.

Выполнение БПФ (быстрого преобразования Фурье) на Arduino происходит медленно и неточно. У вас также очень ограниченная память. Таким образом, ваши проанализированные аудиосигналы будут довольно короткими.


Есть еще один способ определения определенной высоты тона/частоты, который больше зависит от аппаратного обеспечения. Вы можете подавать звуковой сигнал в RC-резонаторную схему, настроенную на интересующую вас частоту. Схема будет усиливать частоту, на которую она настроена, и гасить все остальные частоты (конечно, это не совсем так). одна конкретная частота, но небольшой диапазон частот). Полученный сигнал затем можно проверить на пороговые значения, поскольку он содержит только частоты, близкие к частоте настройки.

,

То, что вы описываете, является пассивным аппаратным режекторным фильтром. Это будет реагировать только на определенный диапазон частот. Я думаю, вы могли бы построить несколько режекторных фильтров и отслеживать их, чтобы обнаружить ряд нот..., @Duncan C

Да, но я сомневаюсь, что вы действительно сможете распознать настоящие песни. Простые «песни» с несколькими нотами за раз могут работать, но в обычных песнях есть несколько инструментов плюс голосовая линия. Я думаю, это делает его очень сложным (поскольку большинство инструментов также излучают много высших гармоник сыгранной ноты). Хотя я никогда не пробовал это, поэтому я не могу быть уверен здесь., @chrisl

Согласованный. Мы говорим то же самое: Arduino на основе AVR не подходит для этой работы., @Duncan C

Спасибо за вклад вашего парня. Я давно хотел заняться проектом по машинному обучению, поэтому идея добиться фактического распознавания песен с помощью Raspberry Pi интригует..., @ttc100


1

Похоже, вам нужно провести анализ звука Фурье. (Разбивая звук на его составляющие частоты.) Большинство Arduino основаны на чипах AVR, которые не имеют аппаратной поддержки математики с плавающей запятой. Они используют программное обеспечение для вычислений с плавающей запятой, что делает их плохим выбором для такого рода задач.

Для Arduino существуют библиотеки БПФ, но они будут медленными и довольно грубыми. Вам, вероятно, лучше использовать плату, такую как Raspberry Pi, с процессором ARM для такой обработки сигналов.

,

2

Как указано в других ответах, распознавание звука полностью исключено. область того, что может сделать Arduino, но распознавание определенного шага возможно.

Однако, вопреки предыдущим ответам, я бы рекомендовал против использовать БПФ. БПФ — правильный инструмент, когда вам нужно получить все частотные составляющие. Однако это излишне, если вы хотите посмотреть на единая частота. Учитывая низкую вычислительную мощность в вашем распоряжении, я предлагаем вам вместо этого попробовать схему обнаружения гомодина. Ардуино Uno или аналогичная плата имеет достаточно ресурсов, чтобы сэмплировать ввод на 9,6 кГц и извлекать в реальном времени определенную частотную составляющую. См., например, эту программу обнаружения гомодинов.

,

Заявленная цель OP — распознать определенный звук, например, первые несколько секунд песни. Я не думаю, что идентификация одночастотных компонентов будет работать для этого приложения., @Duncan C

@DuncanC: см. второй абзац ОП., @Edgar Bonet

Верно. Спасибо, хотя одна подача приемлема, и это дает мне начало., @ttc100