Использование библиотеки Arduino fix_fft или arduinoFFT для фильтрации определенного звука?

Я хотел бы знать, есть ли способ отфильтровать определенный звук с помощью FFT на arduino. Например, в моем анализе есть частота звука ветра, и я хочу ее убрать. Я много искал это, но не нашел ничего полезного для решения этой проблемы.

, 👍1


1 ответ


1

БПФ – это инструмент для анализа звука. Это не очень подходит для фильтрации, если только у вас нет лишних вычислительных мощностей. И это еще менее подходит для фильтрации в реальном времени, если это то, чем вы занимаетесь. после.

Попытка отфильтровать шум на основе его частоты является разумным стратегия для узкополосного шума, т.е. шума, который лежит в узкой полосе частоты. Вы можете надеяться, что, если повезет, удалив этот узкий полоса не слишком сильно влияет на интересующую часть сигнала.

Увы, шум ветра очень широкополосный, хотя и имеет больший вес на низких частотах. частоты:

спектрограмма ветра

(источник изображения).

Если интересующие вас частоты выше ≈ 2–4 кГц, вы можете попробуйте простой фильтр верхних частот. Что-то вроде этого должно работать даже на Arduino, если частота дискретизации не слишком высока:

static uint16_t filter(uint16_t input)
{
    static uint16_t sum;
    uint16_t delta = input - (sum >> SCALE);
    sum += delta;
    return delta
}

где SCALE – небольшая константа, определяющая частоту среза.

Изменить: передаточная функция Z-домена этого фильтра

H = (z − 1) / (z − u)

где u = 1 − 2−SCALE. Тогда его частота среза примерно fsamp ÷ (2 π 2SCALE).

,

Отличный ответ. Обратите внимание, что Arduino на основе AVR далеки от «нагрузки вычислительной мощности». На самом деле они совершенно противоположны и выполняют математику с плавающей запятой в программном обеспечении. Их математика очень медленная, а FFT интенсивно работает с плавающей запятой., @Duncan C