[an error occurred while processing this directive]
|
БПФ для такой задачи будет архи-неэффективным. Во-первых, надо сделать БПФ (длиной 512, т.к. нормальный ких-фильтр с подавлением 80дБ получается порядка 720 семплов). Это вызов первой функции.
Теперь приводим коэффициенты полученного БПФ в порядок - вызов второй функции.
Теперь умножаем на фурье-образ нашего фильтра (к счастью, комплексного умножения здесь можно избежать). Третья функция.
Затем делаем обратное БПФ (512 семплов). Вызов четвертой функции.
Затем приводим коэффициенты обратного БПФ в порядок. - вызов пятой функции.
Наконец, еще две детали, о которых мы не упомянули в самом начале.
1. Для выполнения всего вышеперечисленного необходимо накопить сигнал. (Т.е. просто дополнительная задержка для накопления 512-ти отсчетов).
2. Здесь мы имеем дело с блочной обработкой, а поэтому потребуется брать блок вдвое большего размера, чтобы затем применить overlap-add или overlap-save алгоритм (если вопросы "почему?" - спрашивайте).
Таким образом, все рассчеты по производительности умножаем грубо на 2.
Крайне неэффективно. А задача-то всего выделить диапазон 0-55 Гц!
Фурье становится выгодным там применять, где фильтр архисложный, или со временем сильно изменяется, или просто там, где предварительно был уже сделан Фурье-анализ, и поэтому фильтр в частотной области получается как бы даром.
E-mail: info@telesys.ru