Задача: в "реальном времени" (то есть с минимальной задержкой) выделять из звукового сигнала заданную полосу (например от 5 кГц до 10 кГц) и подавлять сигнал вне этой полосы. Так как стоит задача обработки в реальном времени, то буфер беру как можно меньше (128 выборок при тактовой частоте 44.1 кГц) и по этой же причине не могу накапливать несколько буферов или делать большую линию задержки.
Знаю что в аудио редакторе (Adobe Audition или подобном) можно применять FFT фильтр. Он позволяет четко выделить нужную полосу, с ровной АЧХ в полосе пропускания, с максимальной крутизной полосы перехода и полным подавлением в полосе подавления, и, кроме того, неискаженным звуком:
Но это преобразование записи, когда можно для FFT взять, скажем 4096 точек.
Сейчас применяю КИХ (FIR) фильтр порядка 30-50, АЧХ в полосе пропускания неровная, полосы перехода большие:
При попытке увеличить крутизну (порядок и линию задержки) этого КИХ фильтра звук начинает сильно искажаться.
Какое решение можно выбрать для "крутой" фильтрации в реальном времени? Может ли БИХ фильтр подойти лучше? Если да, то какой? Или подбирать другую импульсную характеристику для моего фильтра?