БПФ + фильтрация звука = сигнал запуска

Я пытаюсь БПФ живого входного звука и фильтровать его, чтобы иметь только от 350 до 500 Гц. Итак, моя цель состоит в том, чтобы включать светодиод только тогда, когда какой-либо звук имеет частоту между 350-500. Я просмотрел коды БПФ, но не знаю, как его отфильтровать и отправить выходной сигнал.

Я очень новичок в плате ардуино. Вы можете предположить, что я ничего не знаю о плате Arduino или программировании на C. Пожалуйста, будьте конкретны, насколько это возможно.. Спасибо.

Почему не полосовой фильтр?
Ой! это то, что я использовал в MATLAB! Ну, если я объясню, что я сделал до сих пор ... потому что я и мой профессор не знали, как программировать плату Arduino, мы начали с MATLAB, и я использовал БПФ и полосовой фильтр, чтобы получить частотный спектр. Однако… я не знаю, как внедрить код MATLAB в код arduino… кроме того, я не знаю, как инициировать выходной сигнал :( так или иначе, есть код, называемый полосовым фильтром для arduino, как хорошо??ах.. Я хочу, чтобы кто-нибудь мог перевести мой код MATLAB в код Arduino..
Нет, я имею ввиду полосовой фильтр из пассивки. Затем вы помещаете преобразователь частоты в напряжение в конце и запускаете его.
Эм... Спасибо за информацию. Я до сих пор не понимаю, но я изучу «полосовой фильтр из пассивов» и «преобразователь частоты в напряжение» и посмотрю, что я могу сделать: D, но это то, что я могу сделать с платой Arduino, верно? я имел в виду код платы ардуино
Может быть. Но для FFT может потребоваться немного больше энергии, чем вы можете получить от Arduino, отличного от Due.
Ваш код MATLAB должен быть основан на прототипе фильтра какой-то формы, так что же это было?

Ответы (2)

Я бы предложил построить какой-нибудь полосовой фильтр с пиковым детектором и компаратором. Вы можете построить полосовой фильтр RLC или, возможно, активный полосовой фильтр с парой операционных усилителей и некоторыми пассивными компонентами. Насколько крутой должна быть отсечка на фильтре? Если вам нужна очень крутая отсечка, то вам, вероятно, нужен активный фильтр.

В качестве альтернативы вы можете пропустить сигнал через фильтр нижних частот RC, сэмплировать его с помощью АЦП Arduino и отфильтровать его с помощью полосового фильтра DSP. Я знаю, что в Matlab есть набор инструментов для создания КИХ- и БИХ-фильтров; Я бы предложил использовать это для расчета правильных коэффициентов фильтра. Я не думаю, что Arduino даст вам достаточно циклов для выполнения БПФ в реальном времени, и вам все равно придется выполнять фильтрацию нижних частот и выборку с помощью БПФ.

Эй, во-первых, спасибо за комментарий :D В чем разница между RLC и DSP? Я пытался загрузить библиотеки АЦП и БПФ и скачал библиотеку БПФ. Я не знаю, куда это меня приведет, но, по крайней мере, я нашел кое-что, но не повезло с ADC. Есть ли библиотека ADC, которую я могу скачать? Поскольку я не очень хорошо понимаю программу, я надеялся, что смогу загрузить эти две библиотеки и начать кодировать оттуда. И да, когда я использовал MATLAB, я использовал полосовой инструмент для фильтрации звука.
RLC = резистор, катушка индуктивности, конденсатор. Фильтр, построенный на пассивных компонентах. Вы можете найти онлайн-калькуляторы для определения правильных значений компонентов. Я думаю, что у TI также может быть программное обеспечение для расчета фильтров, которое вы можете попробовать. И если вы хотите выполнять обработку сигналов на Arduino, вам, вероятно, придется выбросить библиотеку АЦП и работать на «голом железе». Большинство библиотек Arduino, на которые я смотрел, ужасно неэффективны.

«Только от 350 Гц до 500 Гц» практически невозможно. Любой фильтр, который полностью устраняет частоты ниже и выше определенного предела, потребует бесконечного времени для обработки сигнала, поэтому, учитывая, что вы не указали внеполосные параметры, это немного затрудняет рекомендации. Мои знания в области цифровой фильтрации могут немного помочь:

введите описание изображения здесь

Поскольку я разбираюсь в электронике, цифровой фильтр LP эмулирует простой RC-фильтр. Этот фильтр может быть установлен на предел нижних частот 500 Гц, и если частота дискретизации (скорость, с которой вы собираете выборки АЦП) составляет (скажем) 10 кГц, T = 100 x 10 6 , и CR будет 1 2 π Ф = 318 х 10 6 .

Это дает вам фильтр нижних частот первого порядка, и вы можете улучшить его, каскадируя еще несколько, чтобы получить более крутой спад. Чтобы получить фильтр верхних частот, используйте ту же топологию и обратите внимание, что выходной сигнал верхних частот доступен, как показано ниже:

введите описание изображения здесь

Есть несколько других наворотов, которые можно применить, чтобы сделать крутизну фильтра более жесткой, но я не буду вдаваться в них здесь, потому что они, вероятно, не нужны или слишком глубоки. Обратите внимание, что «время выборки» и «время задержки» на двух диаграммах точно такие же — я не очень последовательно называл их!

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

Для полноты картины во многих книгах по цифровым фильтрам фильтр отображается следующим образом:

введите описание изображения здесь

Математически это то же самое, но перестроено так, как показано во многих статьях о цифровых фильтрах IIC (бесконечная импульсная характеристика). Я предпочитаю изображения ранее, потому что они более непосредственно связаны с простым аналоговым фильтром CR. Удачи.

Спасибо за добрый и хорошо объясненный ответ. Поскольку я не инженер-электрик .. Я не понял этого полностью, но я позволю своему другу посмотреть на это, и, надеюсь, он сможет это реализовать: D
@Bri - рад помочь.