Хочу поделиться открытием. Ну или эпик-фейлом, с какой стороны посмотреть. В общем, увлекся я обработкой звука и стал исследовать IIR-фильтры, как самые вычислительно дешевые. С FIR все понятно — конволюция типовая обыкновенная, главное вычислить правильный массив коэффициентов. А вот IIR — более интересны. Главный недостаток IIR — что они вертят фазу, собственно, как и RLC-цепи. Соответственно, фазо-частотная характеристика плохеет. И вот однажды я сделал в AGG такой Gaussian Blur,
http://www.ph.tn.tudelft.nl/Courses/FIP/noframes/fip-Smoothin.html (имплементация для изображений, если кому интересно
http://antigrain.com/__code/include/agg_blur.h.html#recursive_blur). Так вот, этот blur представляет собой по сути обычный IIR-фильтр, но прогнанный через мясорубку два раза — туда и обратно. И вот я подумал — я что если и со звуком делать то же самое? И сработало! Что я делаю — я беру обычный IIR-фильтр, прогоняю через него самплы, а потом, посколку я все равно получаю и отдаю самплы пачками, я имею право прогнать тот же фильтр в обратном направлении. Помните такой термин из Стругацких — дискретная контрнамоция? Таким образом, получается как-бы два последовательных фильтра, но в разных направлениях и при этом фаза возвращается точно на место! Конечно же, нужен более длинный буфер и выходной сигнал надо брать с некой дополнительной задержкой, поскольку фильтру требуется время, чтобы "раскочегариться", иначе появляется треск. Но работает отлично! Да, появляется дополнительная латентность, но она и так уже есть при любой цифровой обработке, и главное — ФЧХ не искажается. Со сложными фильтрами возможно придется интерполировать сингал между фреймами, но в любом случае — этот метод отлично работает. Изначально моя цель была превратить меандр в что-то типа синусоиды без вращения фазы. Обычные low-pass фильтры дают ассиметричный во времени сигнал, в точности как RC-цепи. Но если применить контрамоцию, сигнал во-первых, симметризируется по времени, во-вторых, фаза возвращается в точности на место.
А эпик фейл заключается в том, что плохо я знаю матан. Если бы знал хорошо, я бы в еще в антигрейне применил бы эту методику IIR фильтров, коих существует тысячи! Впрочем, еще не поздно. Такие дела.