Хочу поделиться открытием. Ну или эпик-фейлом, с какой стороны посмотреть. В общем, увлекся я обработкой звука и стал исследовать 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
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Таким образом, получается как-бы два последовательных фильтра, но в разных направлениях и при этом фаза возвращается точно на место! Конечно же, нужен более длинный буфер и выходной сигнал надо брать с некой дополнительной задержкой, поскольку фильтру требуется время, чтобы "раскочегариться", иначе появляется треск. Но работает отлично! Да, появляется дополнительная латентность, но она и так уже есть при любой цифровой обработке, и главное — ФЧХ не искажается. Со сложными фильтрами возможно придется интерполировать сингал между фреймами, но в любом случае — этот метод отлично работает. Изначально моя цель была превратить меандр в что-то типа синусоиды без вращения фазы. Обычные low-pass фильтры дают ассиметричный во времени сигнал, в точности как RC-цепи. Но если применить контрамоцию, сигнал во-первых, симметризируется по времени, во-вторых, фаза возвращается в точности на место.
Ну, все логично. Есть сигнал(функция времени) и фильтр. Результат фильтрации есть новый сигнал с амплитудным спектром, равным произведению амп. спектров, и фазовым, равным сумме соответсвующих фазовых спектров. Далее, можно вспомнить, что инверсия времени не меняет амплитудный, но обращает знак фазового спектров. Получается
* [s*h](t) АС = AC(s)*AC(h) ФС= ФC(s)+ФC(h)
* [s*h](-t) АС = AC(s)*AC(h) ФС=-ФC(s)-ФC(h)
* [s*h](-t)*h] АС = AC(s)*AC(h)*AC(h) ФС=-ФC(s)-ФC(h)+ФC(h)=-ФC(s)
Остается только обратно обратить время, чтобы вернуть изначальный фазовый спектр на место.
Здравствуйте, McSeem2, Вы писали:
MS>Хочу поделиться открытием. Ну или эпик-фейлом, с какой стороны посмотреть. В общем, увлекся я обработкой звука и стал исследовать 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-цепи. Но если применить контрамоцию, сигнал во-первых, симметризируется по времени, во-вторых, фаза возвращается в точности на место.
MS>А эпик фейл заключается в том, что плохо я знаю матан. Если бы знал хорошо, я бы в еще в антигрейне применил бы эту методику IIR фильтров, коих существует тысячи! Впрочем, еще не поздно. Такие дела.
Черт он все знает, нам надо убить его. (С)
Если серьезно этот эффект описывается в практически всех руководствах по ЦОСУ. Какие-то , два хитрых еврея даже дали ему свое имя.
Здравствуйте, denisko, Вы писали:
D>Если серьезно этот эффект описывается в практически всех руководствах по ЦОСУ. Какие-то , два хитрых еврея даже дали ему свое имя.
Ну я пока еще чайник в в ЦОС, так что можно смеяться. А на практике такое используется в каких-либо девайсах типа эквалайзеров? Все-таки дополнительная летентность — цена немаленькая.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, denisko, Вы писали:
D>>Если серьезно этот эффект описывается в практически всех руководствах по ЦОСУ. Какие-то , два хитрых еврея даже дали ему свое имя.
MS>А на практике такое используется в каких-либо девайсах типа эквалайзеров? Все-таки дополнительная летентность — цена немаленькая.
например, http://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%9B%D0%B8%D0%BD%D0%BA%D0%B2%D0%B8%D1%86%D0%B0-%D0%A0%D0%B0%D0%B9%D0%BB%D0%B8
есть применения в "кросоверах", хотя я не знаю что это такое. В медицине используются очень широко, но там допустимы задержки вплоть до десятков секунд.
Вообще задержка определяется импульсной характеристикой, а именно моментом, начиная с которого отклик меньше заданного критерия точности. Если ты аккуратно подсчитаешь ее, она скорее всего окажется не слишком большой.
Здравствуйте, AndreyM16, Вы писали:
AM>Здравствуйте, McSeem2, Вы писали:
AM>Если передаточная функция фильтра вещественнозначная, а она такая в данном случае(см здесь), то никакого искажения фазы быть не может.
Так она тупо не может быть вещественной, если фильтр однонаправленный и его коэффициенты не равны нулю.
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, denisko, Вы писали:
D>>например, D>>http://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%9B%D0%B8%D0%BD%D0%BA%D0%B2%D0%B8%D1%86%D0%B0-%D0%A0%D0%B0%D0%B9%D0%BB%D0%B8
MS>Но черт возьми, Холмс! Там ни о каком обращении времени и слова не упоминается. просто два фильтра, ФНЧ и ФВЧ. Но никакой контрамоции!
Походи по ссылкам приведенным в статье, там будет сайт мужика, на котором описаны его работы и применения фильтров для звука в том числе и двунаправленных.
И посмотри статью, которую привел AndreyM16 (хотя там для изображений). Я могу тебе для медицины скинуть несколько статей, для звука не могу т.к. практически не занималсо.
Здравствуйте, denisko, Вы писали:
D>Здравствуйте, AndreyM16, Вы писали:
AM>>Здравствуйте, McSeem2, Вы писали:
AM>>Если передаточная функция фильтра вещественнозначная, а она такая в данном случае(см здесь), то никакого искажения фазы быть не может. D>Так она тупо не может быть вещественной, если фильтр однонаправленный и его коэффициенты не равны нулю.
Композиции прямого и обратного фильтров это тоже фильтр, и его передаточная функция(в случае о котором упомяналось) вещественная.
Здравствуйте, AndreyM16, Вы писали:
AM>Здравствуйте, McSeem2, Вы писали:
AM>Если передаточная функция фильтра вещественнозначная, а она такая в данном случае(см здесь), то никакого искажения фазы быть не может.
Это именно та статья, на которой я сделал Gaussian Blur. Просто я заметил, что этот блюр в одном направлении смазывает изображение вправо, что собственно и означает вращение фазы. А в обратную сторону — возвращает все на место. Мой поинт в том, что в обработке звука я такого не встречал пока. В основном, скажем, в цифровых эквалайзерах используется FIR, насколько я понимаю.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, AndreyM16, Вы писали:
AM>>Здравствуйте, McSeem2, Вы писали:
AM>>Если передаточная функция фильтра вещественнозначная, а она такая в данном случае(см здесь), то никакого искажения фазы быть не может.
MS>Это именно та статья, на которой я сделал Gaussian Blur. Просто я заметил, что этот блюр в одном направлении смазывает изображение вправо, что собственно и означает вращение фазы. А в обратную сторону — возвращает все на место. Мой поинт в том, что в обработке звука я такого не встречал пока. В основном, скажем, в цифровых эквалайзерах используется FIR, насколько я понимаю.
Все таки скорее не та, т.к. вы используете(в реализации agg) готовые коэфициенты для фильтра, а в той статье они вычисляются. Кстати, если интересно, для вычисления граничных условий для обратного фильтра есть такая статья. С обработкой звука дела не имел, поэтому ничего сказать не могу.
Здравствуйте, denisko, Вы писали:
D>Походи по ссылкам приведенным в статье, там будет сайт мужика, на котором описаны его работы и применения фильтров для звука в том числе и двунаправленных.
http://www.linkwitzlab.com/filters.htm — Вот это? Но там чисто цепи, в которых обращение времени прнинципиально невозможно в силу устройства этого мира. Хотя, статья интересная. Никак не привыкну к этим дурацким обозначениям резисторов на схемах. Мне все время кажется, что это индуктивности. Какой идиот придумал так рисовать резисторы?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, AndreyM16, Вы писали:
AM>Все таки скорее не та, т.к. вы используете(в реализации agg) готовые коэфициенты для фильтра, а в той статье они вычисляются. Кстати, если интересно, для вычисления граничных условий для обратного фильтра есть такая статья. С обработкой звука дела не имел, поэтому ничего сказать не могу.
Спасибо! Да, скорее всего это другая статья. Но я точно помню, что был какой-то ПДФ, это уже потом я нашел в ХТМЛ. А вычисление граничных условий — штука интересная, спасибо еще раз. Узнал несколько новых страшных слов... Блиннн, матана мне все-таки катастрофически не хватает.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.