Главная > DSP > Цифровые фильтры — это не страшно! Не, правда. (Часть 1)

Цифровые фильтры — это не страшно! Не, правда. (Часть 1)

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

Эта история всколыхнула во мне воспоминания о третьем, что ли, курсе, когда я сам сдавал ЦОС, и подвигла написать статью для всех тех, кому интересно, как же работают цифровые фильтры, но кого закономерно пугают забористые формулы и психоделичные рисунки в серьезных статьях (я уже не говорю про учебники).

Вообще, по моему опыту, ситуация с учебниками описывается известной фразой про то, что за деревьями бывает не видно леса. И то сказать, когда тебя сходу начинают пугать Z-преобразованием и формулами с делением полиномов, которые часто бывают длиннее двух досок, интерес к теме иссякает крайне быстро. Мы же начнем с простого, благо для понимания происходящего совсем необязательно расписывать длинные комплексные выражения.

Итак, для начала несколько простых базовых понятий.

1. Импульсная характеристика.

Положим, у нас есть коробка с четырьмя выводами. Мы без понятия, что там внутри, но зато точно знаем, что два левых вывода — вход, а два правых — выход. Давайте попробуем подать на нее очень короткий импульс очень большой амплитуды и посмотрим, что будет на выходе. Ну а чего, все равно что внутри этого четырехполюсника — неясно, потому как его описывать — непонятно, а так хоть что-то увидим.

iresp

Тут надо сказать, что короткий (вообще говоря, бесконечно короткий) импульс большой (вообще говоря, бесконечной) амплитуды в теории называется дельта-функцией. К слову, самое смешное, что интеграл от этой бесконечной функции равен единице. Такая вот нормировка.

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

2. Свертка.

Если говорить коротко, то свертка — это математическая операция, сводящаяся к интегрированию произведения функций:

Обозначается, как видно, звездочкой. Также видно, что при свертке одна функция берется в своем «прямом» порядке, а вторую мы проходим «задом наперед». Разумеется, в более ценном для человечества дискретном случае свертка, как и всякий интеграл, переходит в суммирование:

Казалось бы, некая унылая математическая абстракция. Однако на самом деле свертка — пожалуй самое волшебное явление этого мира, по удивительности уступающее разве только появлению человека на свет, с той лишь разницей, что откуда берутся дети большинство людей узнает в самом крайнем случае годам к восемнадцати, в то время как про то, что такое свертка и чем она полезна и удивительна, огромная часть населения Земли совершенно не догадывается всю свою жизнь.

Так вот, мощь этой операции заключается в том, что если f — любой произвольный входной сигнал, а g — импульсная характеристика четырехполюсника, то результат свертки этих двух функций будет аналогичен тому, что мы получили бы, пропустив сигнал f через этот четырехполюсник.

То есть, импульсная характеристика представляет собой полный слепок всех свойств четырехполюсника по отношению к входному воздействию, и свертка входного сигнала с оной позволяет восстановить соответствующий ему выходной сигнал. Как по мне, это просто потрясающе!

3. Фильтры.

С импульсной характеристикой и сверткой можно творить много интересного. Например, если сигнал звуковой, можно организовывать реверберацию, эхо, хорус, флэнджер и много, много другого; можно дифференцировать и интегрировать… В общем, творить что угодно. Для нас же сейчас важнее всего то, что, разумеется, с помощью свертки так же легко получаются и фильтры.

Собственно цифровой фильтр и есть свертка входного сигнала с импульсной характеристикой, соответствующей желаемому фильтру.

Но, разумеется, импульсную характеристику надо как-то получить. Мы, конечно, выше уже разобрались как ее померять, но в такой задаче толку в этом немного — если мы уже собрали фильтр, зачем еще что-то мерять, можно использовать его как есть. Да и, кроме того, самая главная ценность цифровых фильтров состоит в том, что они могут иметь характеристики, недостижимые (или очень трудно достижимые) в реальности — например, линейную фазу. Так что тут промерять вообще никак, надо просто считать.

4. Получение импульсной характеристики.

В этом месте в большинстве публикаций по теме авторы начинают вываливать на читателя горы Z-преобразований и дробей из полиномов, запутывая его окончательно. Я не буду этого делать, просто кратко поясню, к чему все это и почему на практике для прогрессивной общественности оно не сильно необходимо.

Предположим, мы определились, чего хотим от фильтра, и составили уравнение, которое его описывает. Далее, чтобы найти импульсную характеристику, можно подставить в выведенное уравнение дельта-функцию и получить искомое. Единственная проблема состоит в том, как это сделать, ибо дельта-функция во временной области задается хитрой системой, и вообще там всякие бесконечности. Так что на этом этапе все оказывается страшно непросто.

Вот здесь, бывает, и вспоминают, что существует такая штука как преобразование Лапласа. Само по себе оно не фунт изюму. Единственной причиной того, что его терпят в радиотехнике, как раз и является тот факт, что в пространстве того аргумента, переходом к которому является это преобразование, некоторые вещи действительно становятся проще. В частности, очень легко выражается та самая дельта-функция, которая доставляла нам столько хлопот во временной области — там это просто единица!

Z-преобразование (aka преобразование Лорана) — версия преобразования Лапласа для дискретных систем.

То есть, применив преобразование Лапласа (или Z-преобразование, по необходимости) к функции, описывающей желаемый фильтр, подставив в полученное единицу и преобразовав обратно, мы получим импульсную характеристику. Звучит легко, желающие могут попробовать. Я не рискну, ибо, как уже было сказано, преобразование Лапласа — суровая вещь, особенно обратное. Оставим его на крайний случай, а сами поищем какие-нибудь более простые способы получения искомого. Их есть несколько.

Во-первых, можно вспомнить про еще один удивительный факт природы — амплитудно-частотная и импульсная характеристики связаны между собой добрым и знакомым преобразованием Фурье. Это значит, что мы можем нарисовать любую АЧХ на свой вкус, взять от нее обратное преобразование Фурье (хоть непрерывное, хоть дискретное) и получить импульсную характеристику той системы, что ее реализует. Это просто потрясающе!

Тут, правда, не обойдется без проблем. Во-первых, импульсная характеристика, которую мы получим, скорее всего будет бесконечной (не буду пускаться в объяснения почему; так устроен мир), так что нам придется волевым решением обрезать ее в какой-то точке (положив равной нулю дальше этой точки). Но это не пройдет просто так — следствием этого, как и следует ожидать, будут искажения АЧХ рассчитанного фильтра — она станет волнистой, а частотный срез размоется.

fresp

Для того, чтобы минимизировать эти эффекты, к укороченной импульсной характеристике применяются различные сглаживающие оконные функции. В результате АЧХ обычно размывается еще больше, зато исчезают неприятные (особенно в полосе пропускания) осцилляции.iresp2

Собственно, после такой обработки мы получаем рабочую импульсную характеристику и можем строить цифровой фильтр.

Второй метод рассчета еще проще — импульсные характеристики наиболее популярных фильтров давно выражены в аналитическом виде за нас. Остается только подставить свои значения и применить к результату оконную функцию по вкусу. Так что можно даже не считать никаких преобразований.

Ну и, конечно, если стоит цель эмулировать поведение какой-то конкретной схемы, можно получить ее импульсную характеристику в симуляторе:

imp_sim

Здесь я подал на вход RC-цепи импульс напряжением 100500 вольт (да, 100.5 кВ) длительностью 1 мкс и получил ее импульсную характеристику. Понятно, что в реальности такого не сделать, но в симуляторе этот метод, как видно, прекрасно работает.

5. Примечания.

Вышесказанное насчет укорочения импульсной характеристики относилось, конечно, к т.н. фильтрам с конечной импульсной характеристикой (FIR/КИХ-фильтрам). Они обладают кучей ценных свойств, включая линейную фазу (при определенных условиях построения импульсной характеристики), которая дает отсутствие искажений сигнала при фильтрации, а также абсолютную стабильность. Есть и фильтры с бесконечной импульсной характеристикой (IIR/БИХ-фильтры). Они менее ресурсоемки в смысле рассчетов, но уже не имеют перечисленных преимуществ.

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

Рубрики:DSP
  1. Роман
    03/02/2015 в 02:39

    я смотрю вы неплохо шарите в матане и фильтрах, а что вы посоветуете для реализации детектора одной единственной частоты на МК?
    т.е. допустим у нас в МК с АЦП получаются выборки некоего сигнала, т.е.идет оцифровка звука пусть с частотой 8000Гц и мы хотим в этом сигнале обнаружить наличие или отсутствие сигнала определнной частоты (синус 1000Гц) что лучше подходит для данной задачи?
    я знаю что существуют различные алгоритмы типа БФП, алгоритм Герцеля, еще вроде есть цифровые фильтры с конечной и бесконечной хар-кой.
    что из этого лучше всего подходит для указанной задачи при условии что ресурсы ограничены?

    • YS
      03/02/2015 в 15:51

      Ну, тут смотря насколько ограничены ресурсы и что за задача. БПФ, понятное дело, отпадает сразу, поскольку оно хотя и быстрое, но на мелких МК выполняется крайне медленно, особенно если мы хотим приличное разрешение.

      Можно попробовать согласованный фильтр.

      Но вообще, я бы, скорее всего, применил преобразование Гёрцеля (разумеется, переписанное на фиксированную точку). Оно удобно тем, что не требует заполнять буфер, выборки можно обрабатывать прямо по мере их поступления.

      P.S.

      Матан я в свое время еле-еле сдал на три, а элементы ЦОС, где были фильтры, кажется, на четыре. : D

  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s