Разностное уравнение ких фильтра 2 порядка

Разностное уравнение ких фильтра 2 порядка

21.6. ЦИФРОВЫЕ ФИЛЬТРЫ, ИХ РАЗНОСТНЫЕ УРАВНЕНИЯ, ПЕРЕДАТОЧНЫЕ ФУНКЦИИ И ИМПУЛЬСНЫЕ ХАРАКТЕРИСТИКИ

Цифровой фильтр описывается тремя характеристиками — разностным уравнением , которому может быть поставлена в соответствие передаточная функция K ( z ) или полученная в результате обратного z -преобразования K ( z ) его дискретная импульсная характеристика h [ k ] . Из приведенных примеров следует, что существуют два принципиально различных класса цифровых фильтров. Фильтры первого класса — нерекурсивные — описываются разностным уравнением, в котором выходная величина y [ k ] выражается только через конечное число значений входного сигнала x [ n ] . Таким, например, является уравнение усреднения, рассмотренное выше.

Фильтры второго класса — рекурсивные — описываются уравнением, в котором выходная переменная y [ k ] выражается не только через значения входного сигнала x [ n ], но и через предшествующие значения выходного сигнала y [ k – m ] . Сюда, например, относится разностное уравнение u2[ k + 1] = u2[ k ] e -T/ t + u1[ k ][h(T) – h(TTи)], описывающее преобразование прямоугольных сигналов RС -цепью (см. п. 20.4), а также дискретные модели любых других аналоговых динамических систем (в частности, электрических цепей).

Нерекурсивный цифровой фильтр сохраняет информацию о входном сигнале за конечное число шагов — его импульсная характеристика конечна, а передаточная функция имеет вид ряда по степеням z (который включает и отрицательные показатели).

Информация, поступившая на вход рекурсивного фильтра, сохраняется в нем бесконечно долго; он имеет бесконечную по длительности импульсную характеристику и описывается передаточной функцией в виде рациональной дроби. Максимальная разность индексов переменных в разностном уравнении, который отвечает разность степеней z в числителе и знаменателе передаточной функции, определяет порядок цифрового фильтра.

Так, нерекурсивный цифровой фильтр второго порядка описывается разностным уравнением f 2 [ n ] = a 0 f 1 [ n ] + a 1 f 1 [ n – 1] + a 2 f 1 [ n – 2], его передаточная функция K ( z ) = a 0 + a 1 z –1 + a 2 z –2 , а импульсная характеристика определяется коэффициентами, h [ n ] = a 0 , a 1 , a 2 , 0, 0, 0, 0, .

Рекурсивный цифровой фильтр второго порядка описывается разностным уравнением f 2 [ n ] = a 0 f 1 [ n ] + a 1 f 1 [ n – 1] + a 2 f 1 [ n – 2] + b 1 f 2 [ n – 1] + b 2 f 2 [ n – 2],

а его передаточная функция — .

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

Блок-схемы цифровых фильтров обоих классов 2-го порядка, включающие перечисленные блоки, показаны на рис. 21.10 ( а – нерекурсивный; б – рекурсивный).

Преобразование Лапласа дискретного сигнала. Z-преобразование. Разностное уравнение дискретного фильтра

DSPL-2.0 — свободная библиотека алгоритмов цифровой обработки сигналов

Распространяется под лицензией LGPL v3

В предыдущих разделах мы подробно рассмотрели расчет аналоговых фильтров с заданными характеристиками. Пришло время переходить к анализу цифровых фильтров. Необходимо разделить понятия дискретного и цифрового фильтра.

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

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

На практике все рассчитанные фильтры являются цифровыми, так как разрядность представления числа ограничена. Однако использование компьютера позволяет производить операции с 64-битными числами с плавающей точкой, что минимизирует ошибки округления, поэтому можно предполагать, что рассчитанные с такой разрядностью фильтры «почти дискретные».

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

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

Графически процесс дискретизации сигнала показан на рисунке 1.

Рассмотрим преобразование Лапласа дискретного сигнала :

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

Кружочками условно показаны нули образа , а крестиками — полюсы.

Важно отметить, что периодичность дискретного преобразования Лапласа соответствует периодичности преобразования Фурье дискретного сигнала . Однако, как мы знаем из теории дискретного преобразования Фурье, на каждом периоде повторения спектр дискретного сигнала может быть искажен эффектом алиасинга, т.е. наложением «хвостов» исходной спектральной плотности из высших зон Найквиста (заполненная точками область на карте нулей и полюсов образа соответствует высшим зонам Найквиста).

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

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

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

Первый случай. — образ дискретного сигнала, удовлетворяет (3), а — передаточная характеристика непрерывного фильтра, и свойство (3) не выполняется, значит также не удовлетворяето (3). Тогда можно сделать вывод о том, что при прохождении дискретного сигнала через аналоговый фильтр, выходной сигнал получается аналоговым. Аналоговый фильтр производит восстановление непрерывного сигнала по имеющемуся дискретному.

Второй случай. удовлетворяет (3), также удовлетворяет (3) (импульсная характеристика фильтра является дискретной), причем интервалы дискретизации сигнала и фильтра одинаковые и равны . Тогда в результате произведения также удовлетворяет (3). Таким образом, при прохождении дискретного сигнала через дискретный фильтр, выходной сигнал получается дискретным, с той же частотой дискретизации.

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

Основное правило — для дискретных и цифровых фильтров интервалы дискретизации сигнала и фильтра должны быть равны.

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

Если у дискретного фильтра количество коэффициентов ограничено, то такой фильтр называют фильтром с конечной импульсной характеристикой (КИХ-фильтром) [1] , а если количество коэффициентов бесконечно, то такой фильтр называют фильтром с бесконечной импульсной характеристикой (БИХ-фильтр) [2] .

При переходе от аналогового фильтра к цифровому, происходит периодическое размножение передаточной характеристики вдоль оси . При этом, переменная в образах дискретного преобразования Лапласа всегда присутствует только в показателе экспоненты, для обеспечения периодичности передаточных характеристик дискретных систем [1, стр 155].

В результате периодизации также происходит периодическое размножение нулей и полюсов, что доставляет некоторые неудобства. Для облегчения анализа вводят переменную вида:

Отображение не является конформным [2, стр. 145], потому что множество точек плоскости отображается в одну точку плоскости .

Графически отображение -плоскости в комплексную -плоскость показано на рисунке 3.

Рассмотрим некоторые особенности отображения (7).

Если , где , то для всех этих точек .

Если чисто вещественно, то и также вещественное, причем 0″/>. Заметим, что при , (внутри единичной окружности), а при величина (вне единичной окружности).

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

Левая полуплоскость комплексной плоскости отображается внутрь единичной окружности плоскости . Действительно если , то представляет вектор длины повернутый на угол рад. При , длина вектора .

Правая полуплоскость комплексной плоскости отображается вне единичной окружности плоскости .

При переходе из комплексной -плоскости в комплексную -плоскость все бесконечно-повторяющиеся нули и полюса дискретного фильтра в -плоскости отображаются в конечное количество нулей и полюсов в -плоскости. Тогда выражение для передаточной характеристики дискретного фильтра может быть представлено при помощи подстановки (7) через конечное количество нулей и полюсов в -плоскости как:

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

Рассмотрим некоторые свойства -преобразования. При этом мы будем рассматривать свойства относительно индексов отсчетов в предположении . В результате мы можем опустить период дискретизации в выражениях -преобразования.

Линейность. -образ суммы двух сигналов равен сумме -образов этих сигналов. Действительно, пусть есть два дискретных сигнала и , . Найдем -преобразование их суммы :

Можно показать, что данное свойство также справедливо и для циклической задержки ограниченной выборки сигнала:

Теорема о свертке. Пусть дано два сигнала ограниченной длительности и , . Найдем -преобразование их циклической свертки :

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

Аналогично, используя свойство задержки, можно показать, что -образ линейной свёртки сигналов равен произведению их -образов:

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

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

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

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

Заметим, что здесь мы также ведем рассмотрение относительно индексов отсчетов сигналов, в предположении c.

Общее разностное уравнение линейного цифрового фильтра имеет вид:

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

Рассмотрим -преобразование разностного уравнения (16). -образ выходного сигнала равен:

Цифровая фильтрация на ПЛИС – Часть 2

Это вторая публикация на тему «Цифровая фильтрация на ПЛИС». Вторая часть будет посвящена практической реализации КИХ фильтров на FPGA. В процессе подготовки материала я понял, что она раздуется до небывалых размеров, но делить ее на несколько частей не хочется. Поэтому все тонкости теории и синтеза FIR фильтров будут в одной статье, разбитой на взаимосвязанные разделы. Начну обзор с теоретической части, в частности — расскажу об особенностях и методах расчета коэффициентов фильтров. Подробно рассмотрю создание КИХ фильтров в различных средах — MATLAB, CoreGENERATOR, Vivado HLS. Всех заинтересовавшихся прошу под кат.

Часть 2. КИХ фильтр

Теория

Рассмотрим простой пример реализации FIR фильтров. Как известно, существует два больших класса фильтров — БИХ, с бесконечной импульсной характеристикой и КИХ, с конечной импульсной характеристикой. Остановимся на втором типе: КИХ фильтрах (англ. FIR — «finite impulse response»). КИХ фильтр — это линейный цифровой фильтр, основной особенностью которого является ограниченность во времени его импульсной характеристики, то есть с определенного момента времени она становится равной нулю. Как правило, большинство КИХ фильтров выполнено без обратной связи, поэтому практически все КИХ фильтры — нерекурсивные.

Вот так выглядит реализация КИХ фильтра в общем виде, в частности — на ПЛИС.

Все КИХ-фильтры описываются следующими уравнениями:

где y(n) — выходной сигнал (функция текущего и прошедших значений на входе), x(n) — входное воздействие, h(k) — коэффициенты импульсной характеристики, N — длина фильтра (количество коэффициентов фильтра), H(z) — передаточная характеристика фильтра.

В чем секрет КИХ фильтров?
Самая важная особенность КИХ фильтров заключается в возможности получения точной линейной фазовой характеристики. У читателя возникает закономерный вопрос — «а зачем это надо?». Остановимся на этом моменте подробнее. Сигнал подвергается различным преобразованиям при прохождении через фильтр. В частности, изменяются амплитуда и фаза сигнала в зависимости от частотной характеристики фильтра (амплитудной, АЧХ и фазовой, ФЧХ). Для многочастотных сигналов недопустимо, чтобы при прохождении блоков обработки, фаза сигнала искажалась. Причем, если АЧХ в полосе пропускания сделать практически постоянной не составляет труда, то с ФЧХ возникают проблемы. Для оценки искажений фазы удобно ввести понятия фазовой и групповой задержек.
Фазовая задержка — это величина задержки для каждой из частотных компонент сигнала. Определяется как угол сдвига фазы, деленный на частоту. Групповая задержка — это средняя временная задержка всего многочастотного сигнала. Определяется как производная фазы по частоте. Математически фазовая и групповая задержки записываются следующим образом:

Из формулы для групповой задержки становится очевидно условие линейности ФЧХ фильтра. Если ФЧХ — линейна, то групповая задержка после взятия производной равна константе, то есть постоянна для всех частотных компонент. Логично, что фильтр с нелинейной ФЧХ будет вносить искажения в фазу сигнала.
Таким образом, линейность фазовой характеристики — одна из важнейших особенностей КИХ-фильтров. Остановимся на изучении этого класса фильтров.

КИХ фильтры с линейной ФЧХ

sin(x)/x независимо от типа фильтра (ФНЧ, ФВЧ, ПФ, РФ, дифференциатор). Для решения практических задач зачастую не приходится задумываться о том, какого типа фильтр выбран. Доказательство условия симметрии коэффициентов приводить не буду, но любопытный читатель может найти его сам в различной литературе, ссылки на которую я привожу в конце статьи.

Проектирование КИХ фильтров

Под «расчетом FIR фильтра» в большинстве случаев понимают поиск его коэффициентов по значениям частотной характеристики. Не могу припомнить случаев, когда решалась бы обратная задача за исключением академического интереса.

При создании нового цифрового КИХ фильтра любой инженер проходит через определенные стадии разработки*:

  • Спецификация фильтра. Задается тип фильтра (ФНЧ, ФВЧ, полосовой, режекторный), количество коэффициентов N, требуемая частотная характеристика, с допусками на нелинейность в полосе затухания и полосе пропускания и т. д.
  • Вычисление коэффициентов. Любыми доступными способами и средствами вычисляются коэффициенты фильтра, удовлетворяющие спецификации из предыдущего пункта.
  • Анализ следствий конечной разрядности. На этом этапе оценивается влияние эффектов квантования на коэффициенты фильтра, промежуточные и выходные данные.
  • Реализация. На этой стадии происходит разработка фильтра на доступном языке программирования или реализация фильтра путем создания готовых IP-ядер.

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

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

  • Apass — неравномерность в полосе пропускания,
  • Astop — уровень затухания в полосе подавления,
  • Fpass — граничная частота полосы пропускания,
  • Fstop — граничная частота полосы затухания,
  • N — порядок фильтра (количество коэффициентов фильтра).

На практике, параметры Apass и Astop задают в децибелах (дБ), а расстояние между Fpass и Fstop выражает ширину полосы перехода фильтра. Логично, что значение Apass должно быть как можно меньше, Apass как можно больше, а отношение Fpass/Fstop в идеале стремится к единице (идеально прямоугольная АЧХ). Количество коэффициентов не зря вносится в спецификацию фильтра. Как будет показано далее, от порядка фильтра N и разрядности коэффициентов зависят параметры частотной характеристики фильтра, а также объем занимаемых ресурсов ПЛИС.

Вычисление коэффициентов фильтра

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

Основным методом расчета коэффициентов для многих фильтров является модифицированный алгоритм Ремеза — «Parks-McClellan algorithm». По своей сути это косвенный итерационный метод для нахождения оптимальных значений с Чебышевской характеристикой фильтра. Особенность метода заключается в минимизации ошибки в полосе затухания и пропускания путем Чебышевской аппроксимации импульсной характеристики. Вполне логично, что чем больше количество коэффициентов, тем меньше неравномерность АЧХ и тем она прямоугольнее.
От выбора метода зависит конечный результат, но все они сводятся к одним и тем же целям — минимизации выбросов в полосе пропускания и увеличении «прямоугольности» АЧХ.

Анализ следствий конечной разрядности

Разрядность коэффициентов — главный фактор, от которого зависит вид частотной характеристики. В современных ПЛИС разрядность коэффициентов может быть выбрана любой, но разумные цифры лежат в пределах от 16 до 27 битов. Для высоких порядков фильтра часто требуется обеспечить большой динамический диапазон разрядной сетки, но если этого не удается сделать, рано или поздно начинают проявляться ошибки квантования. Из-за ограниченной разрядности коэффициентов модифицируется частотная характеристика, а в некоторых случаях она искажается настолько сильно, что приходится жертвовать параметрами из частотной спецификации для достижения приемлемого результата. Так или иначе, разрядность представления коэффициентов прямо влияет на максимально возможное затухание Astop. Поэтому при использовании слишком ограниченной разрядной сетки коэффициентов, порой невозможно достичь желаемого подавления даже при огромных порядках фильтра!

Разрядность промежуточных данных и арифметическое переполнение — факторы, от которых также зависит вид частотной характеристики и результат на выходе фильтра. Во многих ПЛИС проблема устраняется использованием аккумуляторов большой разрядности в блоках DSP. Например, в ПЛИС Xilinx 6 и 7 серии в ячейках DSP48E1 используются 48-битные аккумуляторы и перемножители. На следующем рисунке представлен стандартный блок DSP48E1, на котором реализуются КИХ фильтры.

Встроенные DSP блоки современных ПЛИС выполнены таким образом, чтобы максимально удобно проводить задачи ЦОС. В первую очередь — для реализации FIR фильтров.

Для реализации простейших фильтров требуется совсем немного логических операций. Основной узел, с помощью которого реализуется FIR фильтр — DSP блок ПЛИС. В этом блоке происходят все математические операции — перемножение входных отсчетов с коэффициентами фильтров, задержка входного сигнала, суммирование данных. Современные узлы DSP содержат предварительный сумматор, поэтому даже операции суммирования для фильтров с симметричной ИХ можно делать внутри этого узла. Помимо DSP блока, фильтру нужна память для хранения коэффициентов (распределенная или блочная). Больше фильтр ничего не использует. На рисунке приведена реализация КИХ фильтра с использованием перемножителей, аккумуляторов, линий задержки и памяти для хранения коэффициентов.

Расчет фильтра в MATLAB

Существует множество приложений, в которых можно проводить расчет фильтра и поиск его коэффициентов. Например, LABView, Scope FIR, FDATool из MATLAB или бесплатного аналога Octave. Пожалуй, самым удобным средством расчета КИХ фильтра является MATLAB. Для запуска средства создания и анализа фильтров необходимо в командном окне среды набрать ключевое слово fdatool. Появится примерно вот такое окно (в зависимости от версии MATLAB оно может иметь чуть иной вид):

Основные параметры задаются в окне Filter Specifications. В зависимости от настроек фильтра в области главного окна могут появляться те или иные параметры.

  • Filter Order — определяет порядок фильтра (минимальный или заданный пользователем)**.
  • Frequency Specifications — определяет частотные параметры характеристики фильтра.
  • Magnitude Specifications — определяет амплитудные параметры характеристики фильтра.
  • Density Factor — для типа Equiripple задает сетку точек, по которым происходит аппроксимация АЧХ фильтра.

** — в FDATool порядок фильтра N на единицу больше заданного (если задать N = 7, то утилита рассчитывает 8 коэффициентов).

Response type — тип передаточной характеристики фильтра. В этом поле выбирается любой фильтр, какой только существует в природе, например:

  • Lowpass — фильтр нижних частот,
  • Raised cosine — фильтр «приподнятого косинуса»,
  • Highpass — фильтр верхних частот,
  • Bandpass — полосовой фильтр,
  • Bandstop — режекторный (заграждающий) фильтр,
  • Differentiator — дифференциатор,
  • Nyquist — фильтр Найквиста,
  • Multiband — многополосный фильтр,
  • Hilbert transformer — преобразователь Гильберта,
  • Arbitrary magnitude — фильтры с произвольной АЧХ.

и т.д.

Причем, в зависимости от типа фильтра, средство анализа укажет на ограничения по типу фильтра и предложит ввести корректное значение N.

Design Method — выбирается метод проектирования фильтра и его тип (БИХ или КИХ). Для БИХ фильтров доступны варианты:

  • Butterworth — фильтры с характеристикой Баттерворта,
  • Chebyshev Type I, II — фильтры Чебышева,
  • Elliptic — эллиптический фильтр,
  • Maximally flat — фильтр с максимально плоской характеристикой в полосе пропускания,

и т. д.

Для КИХ фильтров доступны варианты***:

  • Equiripple — фильтр с равномерно пульсирующей АЧХ,
  • Least-squares — фильтр по методу наименьших квадратов,
  • Window — фильтр с оконным взвешиванием различными функциями****,
  • Complex Equiripple — комплексный фильтр с равномерно пульсирующей АЧХ,
  • Maximally flat — фильтр с максимально плоской характеристикой в полосе пропускания,

и т.д.

*** — наибольший практический интерес представляют фильтры типа Equiripple и Window.
**** — при выборе этой опции появляется панель доступа к оконным функциям и их параметрам.

Для метода Equiripple производится самый простейший расчет КИХ фильтра по модифицированному алгоритму Ремеза. Пользователь задает параметры из спецификации на фильтр и сразу видит результат. В случае неудовлетворительных результатов можно в любой момент изменить один или несколько параметров фильтра и получить другую частотную характеристику. Расчет проводится до тех пор, пока не получены требуемые характеристики. Если не удалось добиться значений по заданию, то рано или поздно придется жертвовать той или иной величиной из спецификации, либо существенно увеличивать порядок фильтра N.

Для метода Window доступно несколько вариантов оконных функций: Bartlett, Blackman, Blackman-Harris, Chebyshev, Flat Top, Gaussian, Hamming, Hann, Kaiser, Rectangular и т. д., вплоть до пользовательских оконных функций (User-defined). Все эти функции обладают своими особенностями и могут давать различные параметры частотной характеристики КИХ фильтра. Часть оконных функций рассчитывается без параметров, а часть фильтров задается через определенные параметры, влияющие на АЧХ фильтра.
Из всех представленных оконных функций, на мой взгляд, самой удобной является окно Кайзера. Для построения АЧХ требуется задать всего один параметр Beta, который влияет на уровень подавления в полосе затухания и на прямоугольность частотной характеристики.

Слева снизу относительно главной рабочей области средство FDATool содержит дополнительные вкладки, в которых можно указать тип фильтра (дециматор или интерполятор), имя модели для вставки в Simulink, тип и разрядность коэффициентов и входных данных и многое другое. В практических целях самые основные вкладки это Design Filter — в ней происходит расчет фильтра, и Quantinization Parameters — в этой вкладке задается тип и разрядность данных.
На верхней панели находятся кнопки, с помощью которых можно посмотреть АЧХ и ФЧХ фильтра, групповую и фазовую задержку, импульсную и переходную характеристики, карту нулей и полюсов фильтра, рассчитанные коэффициенты и т.д.

График АЧХ и ФЧХ фильтра:

График импульсной характеристики фильтра:

График диаграммы нулей и полюсов:

Помимо всего этого, FDATool позволяет импортировать и экспортировать модели фильтров и рассчитанные коэффициенты. Например, можно рассчитать фильтр и отправить его модель в Simulink в виде модели на стандартных примитивах. Можно рассчитать коэффициенты и сохранить их в отдельном файле, например, как файл с расширением *.h (header).

Кроме того, можно создать файл коэффициентов *.COE в специальном формате для Xilinx. Для этого нужно выбрать тип коэффициентов с фиксированной точкой и задать их разрядность. Затем нажать Targets -> Xilinx Coefficient (.COE) File, в результате чего в главном окне MATLAB отобразится содержимое файла — глобальные настройки и коэффициенты в HEX-формате.

Видно, что при подаче на вход единичного импульса, на выходе образуется не что иное, как импульсная характеристика фильтра (график из Simulink).

Xilinx FIR Compiler

Как и в случае с CIC фильтром, приведу подробное описание средства создания FIR фильтров от Xilinx. Отмечу, что описание содержит не просто перевод из даташита, а замечания и рекомендации из личного опыта и опыта моих коллег.

FIR Compiler — Вкладка 1:

Component name — имя компонента (используются латинские буквы a-z, цифры 0-9 и символ «_»).
Рекомендую использовать осмысленные имена, в которых зашифрованы главные параметры фильтра. Например, xfir128t_d1_b18_4c_w6_a7 — фильтр, сделанный для Xilinx, N = 128 (taps), децимация не используется, разрядность коэффициентов 18, четыре канала, применена оконная функция Кайзера с параметром beta = 6, кристалл ПЛИС — Artix-7.

Filter Coefficients:

  • Select source — выбор источника коэффициентов (Vector — вектор, заданный вручную или COE File — файл с набором коэффициентов). Предпочтительно использовать перегружаемые *.COE файлы.
  • Coefficient Vector — вектор коэффициентов, задаваемый вручную.
  • Coefficient File — вектор коэффициентов, считываемый из файла.
  • Number of Coefficient Sets — количество реально используемых DSP блоков для обработки коэффициентов. Количество коэффициентов должно делиться нацело на указанное значение. Полезная опция при работе на высокой частоте относительно частоты дискретизации, позволяет существенно экономить ресурсы ПЛИС.
  • Number of Coefficient (per set) — количество коэффициентов, обрабатываемых единовременно DSP блоками. Значение в поле автоматически устанавливается при считывании количества коэффициентов и предыдущего параметра.

Filter Specification:

  • Filter type — тип фильтра: простой / интерполирующий / децимирующий / полифазный.
  • Rate Change Type — изменение скорости обработки. Может быть целочисленным или дробным.
  • Interpolation / Decimation Rate Value — коэффициент интерполяции / децимации.
  • Zero Pack Factor — для интерполирующих фильтров параметр определяет количество нулей, вставляемых между коэффициентами.
  • Number of channels — количество независимых каналов фильтрации: 1-64.

Hardware Oversampling Specification: эти параметры влияют на выходную частоту дискретизации, количество тактов, требуемых для обработки данных. От этих параметров также зависит уровень параллелизма внутри ядра и количество занимаемых ресурсов.

  • Select format — выбор частотных соотношений фильтра: Frequency Specification / Sample period.
  • Frequency Specification — Частотная спецификация: пользователь задает частоту дискретизации и частоту обработки данных.
  • Sample period — Тактовая спецификация: пользователь задает отношение частоты обработки к тактовой частоте данных.
  • Input Sampling Frequency — входная частота дискретизации: *.
  • Clock frequency — частота обработки фильтра: *****.
  • Input Sampling period — отношение частоты обработки к частоте входного тактового сигнала: *****.

***** — диапазон зависит от общих настроек и коэффициента дискретизации R.

FIR Compiler — Вкладка 2:

Filter Architecture — задает реализуемую архитектуру фильтра.

  • Systolic Multiply Accumulate — систолический фильтр с накоплением,
  • Transpose Multiply Accumulate — перестраиваемый фильтр с накоплением,
  • Distributed Arithmetic — фильтр на распределенной логике ПЛИС.

Coefficient Options — параметры для коэффициентов

  • Use Reloadable Coeffcients — использовать перегружаемые коэффициенты. Полезная опция для реализации в одном фильтре перегружаемых частотных характеристик.
  • Coefficient Structure — структура коэффициентов, 5 типов: несимметричные, симметричные, отрицательно симметричные, полуполосные и с преобразованием Гильберта. По умолчанию FIR compiler пытается сам определить тип коэффициентов (inferred).
  • Coefficient Type — тип коэффициентов: знаковый или беззнаковый.
  • Quantization — задает метод округления: целочисленные коэффициенты, округление к ближайшему целому или максимальный динамический диапазон (масштабирует коэффициенты относительно максимального).
  • Coefficient Width — разрядность коэффициентов. Значение в этом поле влияет на частотную характеристику фильтра, что можно наблюдать в соответствующем окне (Freq. Response).
  • Best Precision Fraction Length — автоматически устанавливает наилучшее соотношение для целой и дробной частей разрядной сетки.
  • Coefficient Fractional Bits — определяет позицию для разделения целой части от дробной в разрядной сетке представления коэффициентов.

Datapath Options — опции входных данных

  • Number of Paths — определяет количество параллельных каналов для обработки. Количество DSP ядер пропорционально значению в этом поле. Для этой опции на вход фильтра поступает несколько независимых потоков данных, в то время как для параметра Number of Channels данные поступают на один вход и обрабатываются последовательно.
  • Input Data Type — тип данных на входе фильтра (знаковый или беззнаковый).
  • Input Data Width — разрядность входных данных.
  • Input Data Fractional Bits — определяет количество бит, приходящихся на дробную часть представления входных данных. Значение в этом поле не влияет на реализацию фильтра! (число с фиксированной точкой можно представить как угодно: с дробной частью или вовсе без нее, но результат один и тот же).
  • Output Rounding Mode — режим округления выходных данных: полная точность, отбрасывание младших значащих битов, округление до целого вниз/вверх, округление до четного/нечетного. Во многих задачах не требуется менять этот параметр и можно оставить Full Precision — полную точность.
  • Output Width — разрядность выходных данных фильтра.
  • Output Fractional Bits — количество бит, определяющих дробную часть выходных данных. Поле информативное и не влияет на реализацию фильтра.
  • Allow Rounding Approximation — для режимов Symmetric Rounding Mode опция разрешает аппроксимацию при округлении без дополнительных затрат ресурсов (автоматическое определение знакового бита в слове).
  • Registered Output — активная опция добавляет на выход фильтра дополнительный регистр для увеличения производительности (максимальной частоты обработки) фильтра.

FIR Compiler — Вкладка 3:

Optimization Goal — определяет цель оптимизации при создании фильтра (Area — по площади, Speed — по скорости). В большинстве случаев удается одновременно достичь максимальной скорости и минимальной затраты ресурсов, но в специфических случаях при указании Speed фильтр оптимальным образом расставляет внутренние регистры в критических путях между логическими функциями.

  • SCLR — синхронный сброс фильтра (логическая единица на входе производит сброс).
  • Use Deterministic SCLR Behavior — определяет поведение внутренних данных фильтра типа Multiply-Accumulate в процессе сброса. При активной опции сигнал сброса очищает внутренние регистры, память данных и хранения коэффициентов.
  • ND — «New data», входной сигнал, определяющий поступление данных на вход фильтра. Вместе с сигналом RFD позволяют организовать пакетную обработку данных. Как правило, сигналы ND и RFD подключают к управляющим сигналам FIFO.
  • CE — «Clock Enable», сигнал разрешения тактирования фильтра. При низком уровне на входе этого сигнала приостанавливается любая обработка внутри фильтра, независимо от того, поступают новые данные или нет.
  • DATA_VALID — сигнал валидности выходных данных. Опция полезна только в многоканальном режиме (Number of Channels > 1).

Memory Options — глобальные настройки выбора типа памяти для хранения входных данных, коэффициентов фильтра, промежуточных и выходных данных. Выбирая блочную память вместо распределенной, в некоторых случаях можно в сотни раз сэкономить логические ресурсы ПЛИС!
Для Data / Coefficient / Input / Output Buffer Type возможны режимы Auto / Block / Distributed.
Preference for Other Storage — определяет тип памяти для промежуточных данных. Также доступны режимы Auto / Block / Distributed.

DSP Slice Column Options — определяет настройки распределения DSP блоков между колонками ПЛИС. Для некоторых архитектур фильтров, например, с симметричными коэффициентами недоступен режим Multi-Colomn Support, поэтому необходимо следить за возможной реализацией фильтра.

  • Device Column Lengths — определяет длину колонок DSP блоков. Полезное информативное поле, в котором можно заранее определить верхнюю границу порядка фильтра и максимальное количество реализуемых фильтров.
  • Column Configuration — определяет конфигурацию и положение DSP блоков в колонках. С этим параметром нужно работать осторожно, поскольку при разрыве фильтра между несколькими колонками может возникнуть большая задержка, следовательно — упадет максимальная тактовая частота.
  • Inter-column Pipe Length — определяет количество дополнительных регистров между колонками DSP блоков для устранения негативного эффекта задержки распространения.

FIR Compiler — Вкладка 4:

Summary — эта вкладка в виде списка отражает конечные настройки фильтра (количество каналов, порядок фильтра, параметры частот, разрядность входных, выходных и промежуточных данных, разрядность коэффициентов, задержка в фильтре, количество используемых DSP блоков, наличие сигналов контроля и т.д.).

В левой части окна FIR Compiler есть три полезные дополнительные вкладки:

  • IP-symbol — схематичный вид IP-блока с активными портами ввода/вывода.
  • Freq. response — частотная характеристика FIR-фильтра.
  • Implementation Details — оценка занимаемых ресурсов DSP и RAMB, суммарная задержка, количество коэффициентов и порядок их загрузки.

Абстрактный пример

Условие
Проведем расчет широкополосного фильтра первичной обработки, обладающего следующими параметрами:

  • Частота дискретизации Fs: 250 МГц,
  • Частота среза фильтра Fpass: 55 МГц,
  • Коэффициент прямоугольности: > 0.88 (Fpass/Fstop),
  • Подавление в полосе пропускания (Apass): 50 дБ.

Реализовать шесть независимых каналов фильтрации на микросхеме Artix-7 XC7A100T-FGG484. Коэффициенты ИХ – перегружаемые, симметричные и независимые для каждого канала фильтра.

Шаг 1: Оценка ресурсов ПЛИС
Необходимо понять, сколько доступно ресурсов кристалла для реализации подобного фильтра. В DS180 можно найти, что микросхема имеет 240 DSP48E1 блоков, выстроенных в три колонки (это важно!). Из ТЗ известно, что ИХ – симметрична, а это значит, что для фильтра порядка N потребуется N/2 блоков DSP48E1. Следовательно, на выбранной микросхеме возможна реализация 2 фильтров с длиной характеристики N = 240, либо 6 фильтров с длиной N = 80. В практических целях при обработке сигналов длину ИХ выбирают кратному степени двойки. Например, N = 64, 128 или 256. Либо, N = (128 + 64), (32 + 16 + 8). В нашем случае необходимо реализовать 6 фильтров на 240 DSP блоках. С учетом симметрии для каждого фильтра возможно использовать длину N 0.85 найдем частоту заграждения Fstop Красивые рисунки разводки проекта

Схематический вид части IP-ядра FIR фильтра:

Разводки платы в FPGA Editor (Zoom нижней части):

Разводка платы в FPGA Editor:

Практические советы

Конечно, переход к Window спасает не всегда, и на практике есть несколько иных методов, которые так или иначе упростят жизнь разработчику.

  1. Заранее определить возможную децимацию сигнала (по отношению частоты дискретизации и граничной частоте в спектре сигнала). Использовать дешевые CIC-фильтры для целей децимации. После децимации возможно сократить количество используемых DSP блоков кристалла.
  2. Определить отношение частоты дискретизации и частоты обработки в кристалле ПЛИС. Если частота обработки в несколько раз превышает частоту дискретизации, можно во столько же раз сэкономить количество ресурсов на реализацию FIR фильтра.
  3. Реализовать фильтр на распределенной логике ПЛИС, если это возможно и не критично с точки зрения частот обработки. Этот метод очень сложен в реализации и не будет стабильно работать для больших порядков фильтра N.
  4. Для реализации фильтров с симметричной ИХ предварительно оценить размер колонок DSP блоков и количество этих колонок в ПЛИС. Для реализации длинных фильтров с симметричной ИХ требуется каскадное соединение DSP блоков и при размещении фильтра внутри ПЛИС в одной колонке может не хватить ячеек DSP. С другой стороны, при реализации независимых каналов фильтров, может попросту не хватить колонок, если в каждой колонке умещается только один фильтр. Придется либо уменьшать длину характеристики, либо делать два небольших фильтра с меньшим числом коэффициентов.******
  5. Для современных кристаллов ПЛИС (Altera и Xilinx) при реализации фильтра с симметричной ИХ использовать предварительный сумматор в узле DSP, а не на распределенной логике. Внутренний pre-adder значительно экономит не только логические ячейки, но и трассировочные ресурсы кристалла! *******

****** — Для Xilinx фильтр гарантированно не разведется, если фильтр с симметричной ИХ не влезает в одну колонку (в PlanAhead колонки DSP блоков выделены зеленым цветом). На Altera – не проверял. Буду рад, если кто-то поделится своими опытами.
******* — для микросхем ПЛИС фирмы Xilinx 7 серии и старше этот метод спасает только в том случае, если разрядность коэффициентов не превышает 18. Для убер-современных по состоянию на 2015-2016 г. микросхем Xilinx Ultra-Scale возможно реализовать предварительный сумматор с разрядностью коэффициентов 24.

Vivado HLS

Современные методы создания узлов задач цифровой обработки сигналов на ПЛИС сводятся к двум принципам:

  • уменьшение времени проектирования (понятие «time-to-market«),
  • уменьшение порога вхождения (популяризация ПЛИС среди С++ разработчиков).

Оба принципа возникли не случайно и происходят в первую очередь от постоянного увеличения логической емкости FPGA. Xilinx заявляет, что старые методы программирования (на языках VHDL и Verilog) уже не справляются с современными задачами, и есть большая вероятность, что в будущем программирование на ПЛИС будет вестись исключительно на языках высокого уровня типа С и С++. Xilinx несколько лет назад анонсировал новое средство проектирования под названием Vivado HLS и предлагает все большие проекты частично или полностью переводить на новый уровень. Разработка на Vivado HLS сводится к тому, что можно уйти от понятия «тактовая частота» и разрабатывать сложные алгоритмы без привязки к ПЛИС, а всю оптимизацию под ПЛИС уже делать на последней стадии проекта. Посмотрим, что можно сделать с помощью новой среды и разработаем простейший КИХ-фильтр в Vivado HLS.

В качестве примера я взял одну из лабораторных работ от Xilinx, в которой в первом приближении показана вся мощь современных средств. Основная разработка с помощью Vivado HLS базируется на взаимосвязанных задачах: написание кода и его оптимизация по скорости (Speed) и занимаемой площади (Area) с помощью директив.

Xilinx предлагает следующее поведение при проектировании:

  • – C Validation/Simulation (Project -> Run C Simulation): написание алгоритма, отладка проекта, выявление ошибок в коде, сравнение данных с эталоном и т.д.
  • – C Synthesis (Solution -> Run C Synthesis): синтез проекта из C-кода в RTL форму и анализ полученных данных: оценка производительности (latency, trip count, speed etc.), оценка ресурсов, полученный интерфейс ввода/вывода.*
  • – RTL Verification (Solution -> Run C/RTL Cosimulation): повторное использование C-модели теста main() для анализа RTL-модели (self-checking).
  • – IP Creation (Solution -> Export RTL): создание IP-ядра для дальнейшего использования в основном проекте (Xilinx ISE, Vivado и т.д)

* — Мощь Vivado HLS в создании уникальных решений (solutions), различающихся способами оптимизации. Правильный подход заключается в создании множества решений и выборе оптимального, нежели в отладке одного единственного!

Как сделать различные решения? Использовать директивы — инструмент для оптимизации проектов в Vivado HLS. Директивы можно добавлять в исходный код (Source file) или в отдельный файл директив (Directive file).

  • Source file – подходит для задания директив, которые НЕ БУДУТ меняться на протяжении создания проекта. Например, директивы для интерфейса портов I/O не меняются. В проекте эти директивы обозначаются префиксом: #HLS.
  • Directive file – подходит для задания условий и ограничений, которые влияют на оптимизацию по скорости и размещению. Как правило, в проекте можно сравнить в различных solutions несколько ограничений и выбрать оптимальное. В проекте эти директивы обозначаются префиксом: %HLS.

Приведу пример исходников для простейшего КИХ фильтра. Обратите внимание на директивы в исходном коде.

Директивы в отдельном файле выглядят следующим образом:

Замечание: В процессе оптимизации разработчику часто приходится сравнивать различные результаты по производительности и ресурсам. Поэтому зачастую большая часть директив записывается в отдельный файл. Если разработчик уверен, что конкретная оптимизация нужна для всех решений, то её можно занести в исходные тексты!

Для проекта FIR создадим три разных решения:

  • без использования директив (синтезатор использует минимум ресурсов — последовательная обработка данных),
  • с использованием директив для портов (синтезатор оптимизирует интерфейс ввода/вывода),
  • с использованием директивы UNROLL (для разворачивания цикла FOR и параллельной обработки каждой итерации цикла).

В результате синтеза в Vivado можно провести полный анализ по занимаемым ресурсам и максимальной производительности, увидеть интерфейс портов ввода/вывода для создаваемого ядра. Кроме того, можно увидеть, как исполняются те или иные функции, сколько ресурсов они занимают и сколько тактов выполняются.

Сравнение трех решений:

Директивы:

Вкладка Performance:

Вкладка Resources:

  • Чтение порта x и запись порта y происходит за один такт. Чтение порта c за два такта, потому что он описан как интерфейс памяти RAM;
  • Используется два умножителя;
  • Сдвиговый регистр shift_reg используется для операции чтения и записи;
  • Остальные ресурсы не используются совместно, потому что существуют в единственном виде (в выражениях в коде).

Ресурсы кристалла:

Процесс создания нового проекта и все шаги проектирования описывать не буду, поскольку статья и так уже разрослась до небывалых размеров. Но если вам интересна тема использования Vivado HLS в своих проектах – я с удовольствием поделюсь своим опытом. Также можно воспользоваться помощью хабраюзера urock. В этом деле он мастер!


источники:

http://ru.dsplib.org/content/filter_ztransform/filter_ztransform.html

http://habr.com/ru/post/274847/