Задать вопрос
@acplx

Какой полосовой фильтр применить?

Задача: в "реальном времени" (то есть с минимальной задержкой) выделять из звукового сигнала заданную полосу (например от 5 кГц до 10 кГц) и подавлять сигнал вне этой полосы. Так как стоит задача обработки в реальном времени, то буфер беру как можно меньше (128 выборок при тактовой частоте 44.1 кГц) и по этой же причине не могу накапливать несколько буферов или делать большую линию задержки.

Знаю что в аудио редакторе (Adobe Audition или подобном) можно применять FFT фильтр. Он позволяет четко выделить нужную полосу, с ровной АЧХ в полосе пропускания, с максимальной крутизной полосы перехода и полным подавлением в полосе подавления, и, кроме того, неискаженным звуком: a95bd897d72f41da8fec02cd756fb089.pngНо это преобразование записи, когда можно для FFT взять, скажем 4096 точек.

Сейчас применяю КИХ (FIR) фильтр порядка 30-50, АЧХ в полосе пропускания неровная, полосы перехода большие: 73069c817b814b59b2bfa641c78d81e8.png
При попытке увеличить крутизну (порядок и линию задержки) этого КИХ фильтра звук начинает сильно искажаться.

Какое решение можно выбрать для "крутой" фильтрации в реальном времени? Может ли БИХ фильтр подойти лучше? Если да, то какой? Или подбирать другую импульсную характеристику для моего фильтра?
  • Вопрос задан
  • 2821 просмотр
Подписаться 2 Оценить 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Stepik
    Внутреннее устройство контейнеров в STL (C++)
    2 недели
    Далее
  • Skillbox
    Разработчик на C++
    7 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
Ну так FFT и применять. Сперва FFT, потом обратное FFT только для интересующих частот.
В Intel MKL даже есть библиотека для преобразований Фурье, оптимизированная под Intel.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы