@acplx

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

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

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

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

Какое решение можно выбрать для "крутой" фильтрации в реальном времени? Может ли БИХ фильтр подойти лучше? Если да, то какой? Или подбирать другую импульсную характеристику для моего фильтра?
  • Вопрос задан
  • 2811 просмотров
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
Ну так FFT и применять. Сперва FFT, потом обратное FFT только для интересующих частот.
В Intel MKL даже есть библиотека для преобразований Фурье, оптимизированная под Intel.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы