Я пытаюсь БПФ живого входного звука и фильтровать его, чтобы иметь только от 350 до 500 Гц. Итак, моя цель состоит в том, чтобы включать светодиод только тогда, когда какой-либо звук имеет частоту между 350-500. Я просмотрел коды БПФ, но не знаю, как его отфильтровать и отправить выходной сигнал.
Я очень новичок в плате ардуино. Вы можете предположить, что я ничего не знаю о плате Arduino или программировании на C. Пожалуйста, будьте конкретны, насколько это возможно.. Спасибо.
Я бы предложил построить какой-нибудь полосовой фильтр с пиковым детектором и компаратором. Вы можете построить полосовой фильтр RLC или, возможно, активный полосовой фильтр с парой операционных усилителей и некоторыми пассивными компонентами. Насколько крутой должна быть отсечка на фильтре? Если вам нужна очень крутая отсечка, то вам, вероятно, нужен активный фильтр.
В качестве альтернативы вы можете пропустить сигнал через фильтр нижних частот RC, сэмплировать его с помощью АЦП Arduino и отфильтровать его с помощью полосового фильтра DSP. Я знаю, что в Matlab есть набор инструментов для создания КИХ- и БИХ-фильтров; Я бы предложил использовать это для расчета правильных коэффициентов фильтра. Я не думаю, что Arduino даст вам достаточно циклов для выполнения БПФ в реальном времени, и вам все равно придется выполнять фильтрацию нижних частот и выборку с помощью БПФ.
«Только от 350 Гц до 500 Гц» практически невозможно. Любой фильтр, который полностью устраняет частоты ниже и выше определенного предела, потребует бесконечного времени для обработки сигнала, поэтому, учитывая, что вы не указали внеполосные параметры, это немного затрудняет рекомендации. Мои знания в области цифровой фильтрации могут немного помочь:
Поскольку я разбираюсь в электронике, цифровой фильтр LP эмулирует простой RC-фильтр. Этот фильтр может быть установлен на предел нижних частот 500 Гц, и если частота дискретизации (скорость, с которой вы собираете выборки АЦП) составляет (скажем) 10 кГц, T = 100 x 10 , и CR будет = 318 х 10 .
Это дает вам фильтр нижних частот первого порядка, и вы можете улучшить его, каскадируя еще несколько, чтобы получить более крутой спад. Чтобы получить фильтр верхних частот, используйте ту же топологию и обратите внимание, что выходной сигнал верхних частот доступен, как показано ниже:
Есть несколько других наворотов, которые можно применить, чтобы сделать крутизну фильтра более жесткой, но я не буду вдаваться в них здесь, потому что они, вероятно, не нужны или слишком глубоки. Обратите внимание, что «время выборки» и «время задержки» на двух диаграммах точно такие же — я не очень последовательно называл их!
После того, как вы надлежащим образом отфильтровали сигнал, вам необходимо рассчитать среднеквадратичное значение результирующего сигнала и установить порог срабатывания. Это может подавать сигнал на выход Arduino (или любого MCU) для подачи сигнала во внешний мир.
Для полноты картины во многих книгах по цифровым фильтрам фильтр отображается следующим образом:
Математически это то же самое, но перестроено так, как показано во многих статьях о цифровых фильтрах IIC (бесконечная импульсная характеристика). Я предпочитаю изображения ранее, потому что они более непосредственно связаны с простым аналоговым фильтром CR. Удачи.
Игнасио Васкес-Абрамс
Бри
Игнасио Васкес-Абрамс
Бри
Игнасио Васкес-Абрамс
Энди ака