Дискретная контрамоция
От: 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
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Дискретная контрамоция
От: Аноним  
Дата: 19.06.10 07:54
Оценка:
Здравствуйте, McSeem2, Вы писали:

"Пап, а ты сейчас с кем говорил?" (С)
Re: Дискретная контрамоция
От: D14  
Дата: 19.06.10 08:31
Оценка:
Здравствуйте, 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)

Остается только обратно обратить время, чтобы вернуть изначальный фазовый спектр на место.
Re: Дискретная контрамоция
От: denisko http://sdeniskos.blogspot.com/
Дата: 19.06.10 09:05
Оценка:
Здравствуйте, 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 фильтров, коих существует тысячи! Впрочем, еще не поздно. Такие дела.

Черт он все знает, нам надо убить его. (С)
Если серьезно этот эффект описывается в практически всех руководствах по ЦОСУ. Какие-то , два хитрых еврея даже дали ему свое имя.
<Подпись удалена модератором>
Re[2]: Дискретная контрамоция
От: McSeem2 США http://www.antigrain.com
Дата: 19.06.10 12:56
Оценка:
Здравствуйте, denisko, Вы писали:

D>Если серьезно этот эффект описывается в практически всех руководствах по ЦОСУ. Какие-то , два хитрых еврея даже дали ему свое имя.


Ну я пока еще чайник в в ЦОС, так что можно смеяться. А на практике такое используется в каких-либо девайсах типа эквалайзеров? Все-таки дополнительная летентность — цена немаленькая.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[3]: Дискретная контрамоция
От: denisko http://sdeniskos.blogspot.com/
Дата: 19.06.10 13:40
Оценка:
Здравствуйте, 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
есть применения в "кросоверах", хотя я не знаю что это такое. В медицине используются очень широко, но там допустимы задержки вплоть до десятков секунд.
Вообще задержка определяется импульсной характеристикой, а именно моментом, начиная с которого отклик меньше заданного критерия точности. Если ты аккуратно подсчитаешь ее, она скорее всего окажется не слишком большой.
<Подпись удалена модератором>
Re[4]: Дискретная контрамоция
От: McSeem2 США http://www.antigrain.com
Дата: 19.06.10 21:58
Оценка:
Здравствуйте, 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

Но черт возьми, Холмс! Там ни о каком обращении времени и слова не упоминается. просто два фильтра, ФНЧ и ФВЧ. Но никакой контрамоции!
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[2]: Дискретная контрамоция
От: Аноним  
Дата: 20.06.10 10:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>"Пап, а ты сейчас с кем говорил?" (С)


Очень интересное замечание. Отражает сущность этого мира... Как бы намекает нам, что всем по...
Re: Дискретная контрамоция
От: AndreyM16  
Дата: 20.06.10 19:40
Оценка:
Здравствуйте, McSeem2, Вы писали:

Если передаточная функция фильтра вещественнозначная, а она такая в данном случае(см здесь), то никакого искажения фазы быть не может.
Re[2]: Дискретная контрамоция
От: denisko http://sdeniskos.blogspot.com/
Дата: 21.06.10 06:32
Оценка:
Здравствуйте, AndreyM16, Вы писали:

AM>Здравствуйте, McSeem2, Вы писали:


AM>Если передаточная функция фильтра вещественнозначная, а она такая в данном случае(см здесь), то никакого искажения фазы быть не может.

Так она тупо не может быть вещественной, если фильтр однонаправленный и его коэффициенты не равны нулю.
<Подпись удалена модератором>
Re[5]: Дискретная контрамоция
От: denisko http://sdeniskos.blogspot.com/
Дата: 21.06.10 06:35
Оценка:
Здравствуйте, 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 (хотя там для изображений). Я могу тебе для медицины скинуть несколько статей, для звука не могу т.к. практически не занималсо.
<Подпись удалена модератором>
Re[3]: Дискретная контрамоция
От: AndreyM16  
Дата: 21.06.10 06:52
Оценка:
Здравствуйте, denisko, Вы писали:

D>Здравствуйте, AndreyM16, Вы писали:


AM>>Здравствуйте, McSeem2, Вы писали:


AM>>Если передаточная функция фильтра вещественнозначная, а она такая в данном случае(см здесь), то никакого искажения фазы быть не может.

D>Так она тупо не может быть вещественной, если фильтр однонаправленный и его коэффициенты не равны нулю.

Композиции прямого и обратного фильтров это тоже фильтр, и его передаточная функция(в случае о котором упомяналось) вещественная.
Re[2]: Дискретная контрамоция
От: McSeem2 США http://www.antigrain.com
Дата: 21.06.10 06:54
Оценка:
Здравствуйте, AndreyM16, Вы писали:

AM>Здравствуйте, McSeem2, Вы писали:


AM>Если передаточная функция фильтра вещественнозначная, а она такая в данном случае(см здесь), то никакого искажения фазы быть не может.


Это именно та статья, на которой я сделал Gaussian Blur. Просто я заметил, что этот блюр в одном направлении смазывает изображение вправо, что собственно и означает вращение фазы. А в обратную сторону — возвращает все на место. Мой поинт в том, что в обработке звука я такого не встречал пока. В основном, скажем, в цифровых эквалайзерах используется FIR, насколько я понимаю.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[3]: Дискретная контрамоция
От: AndreyM16  
Дата: 21.06.10 07:17
Оценка: 30 (1)
Здравствуйте, McSeem2, Вы писали:

MS>Здравствуйте, AndreyM16, Вы писали:


AM>>Здравствуйте, McSeem2, Вы писали:


AM>>Если передаточная функция фильтра вещественнозначная, а она такая в данном случае(см здесь), то никакого искажения фазы быть не может.


MS>Это именно та статья, на которой я сделал Gaussian Blur. Просто я заметил, что этот блюр в одном направлении смазывает изображение вправо, что собственно и означает вращение фазы. А в обратную сторону — возвращает все на место. Мой поинт в том, что в обработке звука я такого не встречал пока. В основном, скажем, в цифровых эквалайзерах используется FIR, насколько я понимаю.


Все таки скорее не та, т.к. вы используете(в реализации agg) готовые коэфициенты для фильтра, а в той статье они вычисляются. Кстати, если интересно, для вычисления граничных условий для обратного фильтра есть такая статья. С обработкой звука дела не имел, поэтому ничего сказать не могу.
Re[6]: Дискретная контрамоция
От: McSeem2 США http://www.antigrain.com
Дата: 21.06.10 13:56
Оценка:
Здравствуйте, denisko, Вы писали:

D>Походи по ссылкам приведенным в статье, там будет сайт мужика, на котором описаны его работы и применения фильтров для звука в том числе и двунаправленных.


http://www.linkwitzlab.com/filters.htm — Вот это? Но там чисто цепи, в которых обращение времени прнинципиально невозможно в силу устройства этого мира. Хотя, статья интересная. Никак не привыкну к этим дурацким обозначениям резисторов на схемах. Мне все время кажется, что это индуктивности. Какой идиот придумал так рисовать резисторы?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[4]: Дискретная контрамоция
От: McSeem2 США http://www.antigrain.com
Дата: 21.06.10 14:20
Оценка:
Здравствуйте, AndreyM16, Вы писали:

AM>Все таки скорее не та, т.к. вы используете(в реализации agg) готовые коэфициенты для фильтра, а в той статье они вычисляются. Кстати, если интересно, для вычисления граничных условий для обратного фильтра есть такая статья. С обработкой звука дела не имел, поэтому ничего сказать не могу.


Спасибо! Да, скорее всего это другая статья. Но я точно помню, что был какой-то ПДФ, это уже потом я нашел в ХТМЛ. А вычисление граничных условий — штука интересная, спасибо еще раз. Узнал несколько новых страшных слов... Блиннн, матана мне все-таки катастрофически не хватает.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.