Дискретная контрамоция
От: McSeem2 США http://www.antigrain.com
Дата: 18.06.10 23:27
Оценка:
Хочу поделиться открытием. Ну или эпик-фейлом, с какой стороны посмотреть. В общем, увлекся я обработкой звука и стал исследовать 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 фильтров, коих существует тысячи! Впрочем, еще не поздно. Такие дела.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.