Jump to content

    
Sign in to follow this  
avtoneru

Новый алгоритм быстрого реверсивного фильтра IIR, с возможностью линейной фазы

Recommended Posts

Допустим есть каскад I-C, где I интегратор, а С дифференциатор H(z) =1-z^-1. Допустим аккумулятор интегратора 4 бита. На вход поступают одни единицы

1 1 1 1 1 1...

По идее такой каскад на выходе ничего не должен менять, потому что числитель H(z) равен знаменателю, но при 4 битной разрядности интегратора когда он досчитает до 15 на следующем такте он переполнится и выдаст 0. Дифференциатор выдаст разницу 0-15 = - 15 и потом снова 1 1 1 1...  и через 15 тактов снова на выходе - 15. Если вы используете дециматор, то он отбросит эту левую -15, а если каскад просто используется как фильтр скользящего среднего, то в выходном сигнале - 15 пойдёт дальше как есть. 

Share this post


Link to post
Share on other sites

думаю пришло время ссылки на оригинальную статью Хогенауэра https://ieeexplore.ieee.org/document/1163535 

и да, CIC фильтр принципиально работает с переполнениями) 

Share this post


Link to post
Share on other sites
12 минут назад, bahurin сказал:

Допустим есть каскад I-C, где I интегратор, а С дифференциатор H(z) =1-z^-1. Допустим аккумулятор интегратора 4 бита. На вход поступают одни единицы

1 1 1 1 1 1...

По идее такой каскад на выходе ничего не должен менять, потому что числитель H(z) равен знаменателю, но при 4 битной разрядности интегратора когда он досчитает до 15 на следующем такте он переполнится и выдаст 0. Дифференциатор выдаст разницу 0-15 = - 15 и потом снова 1 1 1 1...  и через 15 тактов снова на выходе - 15. Если вы используете дециматор, то он отбросит эту левую -15, а если каскад просто используется как фильтр скользящего среднего, то в выходном сигнале - 15 пойдёт дальше как есть. 

Досчитает до 7, перекинется в -8. Дифференциатор даст 1итд.

Share this post


Link to post
Share on other sites

чайниковский вопрос - как вообще можно бесконечный фильтр реверсировать в прошлое время , не превратив его в конечный ? :) Или мелким шрифтом с достатчной для практического применения точностью?

Share this post


Link to post
Share on other sites
1 минуту назад, DASM сказал:

чайниковский вопрос - как вообще можно бесконечный фильтр реверсировать в прошлое время , не превратив его в конечный ? :) Или мелким шрифтом с достатчной для практического применения точностью?

Чайниковский ответ - никак. Физически не реализуемо. Статья мусорная. Хотя в списке ссылок есть интересное.

Share this post


Link to post
Share on other sites
3 minutes ago, thermit said:

Чайниковский ответ - никак. Физически не реализуемо. Статья мусорная. Хотя в списке ссылок есть интересное.

а нет ли тут каких-то аналогий по превращению КИХ линейно - фазового в минимально фазовый отражением его полюсов во внутрь единичного круга методом cepstrum ?

Хотя мне это все звучит как магия, просто пользуюсь практически, надеюсь когда нибудь выделить время и разобраться с сутью. 

Share this post


Link to post
Share on other sites

 

1 минуту назад, bahurin сказал:

Согласен при равной разрядности аккумулятора интегратора и дифференциатора все будет хорошо :bye:

 

Отлично.

Edited by thermit

Share this post


Link to post
Share on other sites
1 minute ago, DASM said:

а нет ли тут каких-то аналогий по превращению КИХ линейно - фазового в минимально фазовый отражением его полюсов во внутрь единичного круга методом cepstrum ?

Хотя мне это все звучит как магия, просто пользуюсь практически, надеюсь когда нибудь выделить время и разобраться с сутью. 

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

Share this post


Link to post
Share on other sites
2 минуты назад, DASM сказал:

а нет ли тут каких-то аналогий по превращению КИХ линейно - фазового в минимально фазовый отражением его полюсов во внутрь единичного круга методом cepstrum ?

Хотя мне это все звучит как магия, просто пользуюсь практически, надеюсь когда нибудь выделить время и разобраться с сутью. 

Вообще-то в рабинере нашем голде эта тема раскрыта на 110%.

Только что, bahurin сказал:

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

Есть. Не может не быть.

Share this post


Link to post
Share on other sites
34 минуты назад, thermit сказал:

Чайниковский ответ - никак. Физически не реализуемо. Статья мусорная. Хотя в списке ссылок есть интересное.

для приложений где у сигнала есть начало и конец - вполне себе физически реализуемо.

Share this post


Link to post
Share on other sites
Только что, bahurin сказал:

Ну как бы они все стянуты в ноль.

Не как бы. А именно есть. И именно в нуле.

4 минуты назад, Lmx2315 сказал:

для приложений где у сигнала есть начало и конец - вполне себе физически реализуемо.

К физ реализуемости это никакого отношения не имеет.

Share this post


Link to post
Share on other sites

Насколько я понял написанное в статье. БИХ фильтр делится на две части. Та часть, которая формирует нули - остается без изменений. Вторая часть преобразуется в некое подобие КИХ фильтра и реверсируется по времени... При этом количеством каскадов регулируется точность, на сколько результат будет отличаться от исходного БИХ фильтра.
В этом случае - фильтра с линейной фазой не получается. Получается фильтр с АЧХ, идентичной БИХ фильтру и с зеркальной, относительно исходного БИХ фильтра, ФЧХ.

В случае последующей фильтрации данных, полученных с выхода данного фильтра, исходным БИХ фильтром - получаем двойную фильтрацию, с линейной результирующей ФЧХ.

Всё это, по идее автора, должно быть аналогично тому варианту обработки данных, когда осуществлялась двойная фильтрация с реверсированием времени, только в реальном времени.

Что не так с алгоритмом из статьи?, почему это мусор?

 

Очень похоже на коррекцию ФЧХ с помощью allpass фильтров - вводится частотно-зависимая задержка сигнала для более высоких частот, в результате чего фильтр превращается в линию задержки с нормированной АЧХ.

 

ЗЫ.

Увы, не в реальном времени. Чуток поразмыслив, до меня дошло, что между двумя фильтрами должна находиться линия задержки. Вот тогда на выходе может получиться что-то боле-менее нормальное, хотя могу ошибаться, надо моделировать, а время будет только на новогодние праздники.

Надо думать и делать мат. анализ предлагаемого, а мат. анализ в последний раз глаза видели лет 30 назад, восстанавливать знания и перечитывать (считай учить заново) - мозх заранее хочет отказаться и заболеть...

Edited by avtoneru

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this