Перейти к содержанию
    

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

Допустим есть каскад 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 пойдёт дальше как есть. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

У вас принципиальная ошибка  -   если у вас 4 битной разрядности интегратор  то как вы можете получить -15 ? :unknw:

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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итд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, thermit said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

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

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

 

Отлично.

Изменено пользователем thermit

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, DASM said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, DASM сказал:

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 минуты назад, thermit сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

 

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

 

ЗЫ.

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

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

Изменено пользователем avtoneru

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...