Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Фильтр на основе частотной выборки по Р. Лайонсу
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
otshelnik86
синтезировал на С++ фильтр на основе частотной выборки (ФОЧВ) типа IV по Р.Лайонсу. Это КИХ фильтр на основе гребенчатого фильтра и набора резонаторов. Написано, что его ИХ имеет длину N.
Подаю на вход одну единицу и (N - 1) нулей, т.е. цифровую дельта-функцию. Т.о. на выходе должна быть ИХ фильтра. Получаю ее, беру ДПФ и получаю спектр. Предварительно, чтобы получить более точный спектр добавляю после ИХ 3*N нулей. В результате получается спектр такой, который я задавал сразу. Т.е. меня это на 100% удовлетворяет.
А потом возникает такая ситуация... Когда подаю на вход одну единицу и, к примеру, 3*N нулей, то на выходе получаю ПОВТОРЯЮЩУЮСЯ несколько раз ИХ фильтра - т.е периодический сигнал. Почему так? Ведь отклик должен затухнуть. 01.gif

И еще такой вопрос. В книге приводится формула, где отсутствует в знаменателе гребенчатого фильтра N. Надо ли еще делить выходной отсчет на N? sad.gif
P.S. использую значение r<1 для устойчивости фильтра. 05.gif
Самурай
Цитата(otshelnik86 @ Nov 3 2008, 12:26) *
синтезировал на С++ фильтр на основе частотной выборки (ФОЧВ) типа IV по Р.Лайонсу. Это КИХ фильтр на основе гребенчатого фильтра и набора резонаторов. Написано, что его ИХ имеет длину N.
Подаю на вход одну единицу и (N - 1) нулей, т.е. цифровую дельта-функцию. Т.о. на выходе должна быть ИХ фильтра. Получаю ее, беру ДПФ и получаю спектр. Предварительно, чтобы получить более точный спектр добавляю после ИХ 3*N нулей. В результате получается спектр такой, который я задавал сразу. Т.е. меня это на 100% удовлетворяет.
А потом возникает такая ситуация... Когда подаю на вход одну единицу и, к примеру, 3*N нулей, то на выходе получаю ПОВТОРЯЮЩУЮСЯ несколько раз ИХ фильтра - т.е периодический сигнал. Почему так? Ведь отклик должен затухнуть. 01.gif

И еще такой вопрос. В книге приводится формула, где отсутствует в знаменателе гребенчатого фильтра N. Надо ли еще делить выходной отсчет на N? sad.gif
P.S. использую значение r<1 для устойчивости фильтра. 05.gif


Так как Ричарда Лайонса книги у меня нет, то могу только предположить, что речь идет о следующих фильтрах:

Hk(z) = [1 - (z^-N)]/[1 - 2*r*cos(2*pi*k/N)*(z^-1) +r*r*(z^-2)] (1)

Действительно, суммируя (с весовыми коэффициентами) выходы нескольких таких фильтров можно получить АЧХ в принципе любого вида.
Но, если r<1 (как в Вашем случае), то каждый из фильтров (1) будет по сути БИХ фильтром, так как полюс знаменателя не компенсирует ноль числителя (все нули располагаются на единичной окружности на z плоскости, а все полюса располагаются на окружности радиуса r).
В этом случае, если на вход такого фильтра подать цифровую дельта-функцию, то выходом фильтра будет бесконечная последовательность состоящая из коэффициентов ИХ фильтра.

А теперь можно попытаться объяснить, почему мы видим периодическое повторение ИХ фильтра (если я прав и если это не банальная ошибка в программеsmile.gif, то ИХ должна повториться дважды, причем второй раз с большим затуханием).

Представим фильтр (1) в виде последовательного соединения двух фильтров:
- гребенчатого фильтра Hg(z) = 1 - (z^-N) (2)
- резонатора Hr(z) = 1 - 2*r*cos(2*pi*k/N)*(z^-1) +r*r*(z^-2) (3)

Импульсная характеристика фильтра (2) будет представлять собой два единичных всплеска с амплитудой +1 и -1 разделенных интервалом в N отсчетов.
Импульсная характеристика (бесконечная) фильтра (3) это отсчеты из затухающей косинусоиды.

Таким образом, в момент времени 0 мы возбуждаем резонатор (3) единичным (положительным) импульсом. На выходе резонатора появляется затухающая косинусоида. Далее, через N отсчетов мы еще раз возбуждаем резонатор единичным (отрицательным) импульсом, на выходе резонатора снова появляется затухающая последовательность из отсчетов косинусоиды, но уже в противофазе.

Если r=1(нет затухания резонатора) то две косинусоиды начиная с момента N полностью компенсируют друг друга и на выходе фильтра с этого момента времени будут идти нули, т.е. ИХ в этом случае, это ИХ КИХ фильтра.

На рисунках показана ИХ для r=0.999, r=0.95 и r=0.9 (N=32):
Самурай
Так, книгу нашелsmile.gif Прочтение книги показало, что я чуть-чуть ошибсяsmile.gif. Два разаsmile.gif.
Формулу (1) надо переписать несколько по-другому, я малость поспешил в первый раз:

Hk(z) = [1 - r^N*(z^-N)]*[1 - r^2*(z^-2)]/[1 - 2*r*cos(2*pi*k/N)*(z^-1) +r*r*(z^-2)] (1.1)

Тем самым мы размещаем нули не на единичной окружности, а на окружности радиуса r^N. В этом случае у нас получается именно КИХ фильтр, так как полюса полностью компенсируются нулями. Естественно, это только для идеального случая, когда нет округления результата и все коэффициенты абсолютно точные. ИХ каждого фильтра в этом случае как раз и будет представлять собой N отсчетов затухающей синусоиды (косинусоиды).

В общем смотрите, похоже у Вас все-таки где-то ошибка (очепятка) smile.gif.

Да, еще один момент, если r<1 то каждый фильтр (1) или (1.1) уже не будет обладать линейной ФЧХ.
otshelnik86
Цитата(Самурай @ Nov 3 2008, 17:42) *
Так, книгу нашелsmile.gif Прочтение книги показало, что я чуть-чуть ошибсяsmile.gif. Два разаsmile.gif.
Формулу (1) надо переписать несколько по-другому, я малость поспешил в первый раз:

Hk(z) = [1 - r^N*(z^-N)]*[1 - r^2*(z^-2)]/[1 - 2*r*cos(2*pi*k/N)*(z^-1) +r*r*(z^-2)] (1.1)

Тем самым мы размещаем нули не на единичной окружности, а на окружности радиуса r^N. В этом случае у нас получается именно КИХ фильтр, так как полюса полностью компенсируются нулями. Естественно, это только для идеального случая, когда нет округления результата и все коэффициенты абсолютно точные. ИХ каждого фильтра в этом случае как раз и будет представлять собой N отсчетов затухающей синусоиды (косинусоиды).

В общем смотрите, похоже у Вас все-таки где-то ошибка (очепятка) smile.gif.

Да, еще один момент, если r<1 то каждый фильтр (1) или (1.1) уже не будет обладать линейной ФЧХ.


ДА-ДА-ДА и еще раз ДА!!! Спасибо вам, что вы обратили на сообщение внимание. Приведенные графики соответсвуют некоторым моим. Я снял сигнал после гребенчатого фильтра и получил тоже две дельта функции, одна из которых по сути возбуждает резонаторы, а другая - глушит их. Потом снял графики после резонатора для ФНЧ - и получил такой же график, который вы привели на первом скрине. Но вот для ФВЧ и ПФ - почему-то наоборот - вначале идет синусоида с меньшей амплитудой, затем с большей...
Насчет линейной фазовой характеристикой - ну, тут уже ничего не попишешь, жизнь есть жизнь - не все карты козырные))). Я беру r = 1 - 10^-12.

Очень вам благодарен за ваше терпение и потраченное время. Буду искать свою ошибку. Может чего и получится. Интересно, может ли она быть в индексации, т.е. например, не учел какой-то резонатор (крайний), или наоборот - лишний добавил. В общем, большое вам спасибо, буду пробовать! beer.gif

P.S. Приятно иметь единомышленников. a14.gif
otshelnik86
нашел ошибку - действительно в индексации. Некорректно аппроксимировал АЧХ...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.