Фильтр с конечной импульсной характеристикой. Цифровые фильтры с конечной импульсной характеристикой (КИХ-фильтры)

для n =0, 1, ..., (N /2)–1, когда N четное, и для n =0, 1,..., (N –1)/2, когда N нечет­ное, то цифровой фильтр будет обладать линейной фазовой характеристикой.

В большинстве случаев именно потребность в линейной фазе или постоянном групповом времени вызывает необходимость применения цифровых КИХ-фильтров.

1. Метод частотной выборки.

Заданный уравнением (33) цифровой КИХ-фильтр имеет эквивалентное ДПФ-преобразование вида:

где k =0, 1, 2, …, N –1. Используя непосредственно данные соотношения (38), можно получить подходящую КИХ-передаточную функцию из уравнения (37). Эта методика обеспечивает совпадение полученной и требуемой частотных характеристик в точках дискретизации q =2pk /N для k =0, 1, 2,..., N –l.

2. Метод взвешивания.

Поскольку частотная характеристика Н j q ) любого цифрового фильтра представляет собой периодическую функцию частоты q , она имеет разложение в ряд Фурье:

, (39)
где . (40)

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

Одним из возможных способов получения цифровых КИХ-фильтров, аппроксимирующих функцию Н j q ), является усечение бесконечного ряда (39) до конечного числа членов. Однако из хорошо известного явления Гиббса следует, что усечение бесконечного ряда вызывает выбросы и колебания в требуемой частотной характеристике до и после любой точки разрыва. Кроме того, величина этих выбросов и колебаний не уменьшается с увеличением длины последовательности при условии сохранения ее конечности. Это по существу означает, что прямое усечение уравнения (39) для получения аппроксимации цифрового КИХ-фильтра не обеспечивает хороших результатов.



Метод взвешивания используется для получения конечных весовых последовательностей w (n ), называемых окнами, которые модифицируют коэффициенты Фурье в уравнении (39) для получения требуемой импульсной характеристики h d (n ) конечной длительности, где:

h d (n )=h (n )w (n ), (41)

а w (n ) – последовательность конечной длительности, т. е. w (n )=0 для n >N и n <0. Из соотношения (41) следует, что результирующая импульсная характеристика h d (n ) также имеет протяженность N отсчетов.

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

Для завершения этого подраздела приведем некоторые характерные функции окна:

а) прямоугольное окно:

б) окно Бартлетта или треугольное окно:

в) окно Ханна:

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

2.3.3 Представление цифровых фильтров на z- плоскости.

Цифровой фильтр может быть синтезирован путем размещения полюсов и нулей передаточной функции на z- плоскости, основанном на следующих правилах:

1. Полюса и нули должны быть либо действительными, либо иметь комплексно-сопряженную пару.

2. Полюс в точке z=0 оказывает влияние на фазо-частотную характеристику фильтра и не изменяет амплитудно-частотную.

3. Полюс (или ноль) на единичной окружности означает, АЧХ на данной частоте бесконечно возрастает (или обращается в ноль).

4. Полюс вне единичной окружности означает, что фильтр нестабилен, т.е. отклик фильтра на импульс не затухает, а возрастает.

Амплитудно-частотная характеристика и представление на z- плоскости цифрового полосовой фильтр 6-го порядка, где:

– ноль, –полюс.


ИЗУЧЕНИЕ СВОЙСТВ И ПАРАМЕТРОВ ЦИФРОВЫХ ФИЛЬТРОВ

Целью работы является генерация сигнала, состоящего из нескольких гармоник, в системе MATLAB 6.1 и исследование в приложении действия фильтров нижних, верхних частот, полосовых и режекторных фильтров на этот сигнал.

Первой задачей является генерация сигнала. Для этого запустите MATLAB 6.1. В начале создания некоторого сигнала зададим вектор-столбец времени t. Для этого в окне Command Window наберите строку:

>> t=(0:.01:2)’;

Эта команда задает изменение t от 0 до 2 с шагом 0,01 и обеспечивает дискретизацию сигнала по времени.

Теперь зададим вектор некоторой функции y(t) , которая представляет собой сумму синусоиды с амплитудой 1 и частотой 1 Гц с синусоидой, имеющей амплитуду 0.25 и частоту 3 Гц:

>> y=sin(2*pi*1*t)+0.25*sin(2*pi*3*t);

Обратите внимание на то, что в этом выражении t – вектор, а потому и y тоже будет вектором. Частота f =1 Гц в первой компоненте сигнала указана в явном виде (как 1) только ради наглядности. Полезно учесть, что в большинстве расчетов MATLAB не использует размерные величины, поэтому лучше сразу привыкнуть к безразмерным величинам.

Теперь можно задать построение графика y(t) :

>> plot(t,y);

Обрабатывать сигналы удобно используя приложение Signal Processing Tool (SPTool) , которое вызывается следующей командой:

Чтобы импортировать сохраненный нами сигнал в это приложение выберите в меню File пункт Import… В раскрывшимся окне поставьте переключатель Source в положение From Workspace . В поле Workspace Contents выберите строку, в которой записано имя функции описывающей сигнал (в данном примере это y ), и нажмите на верхнюю кнопку со стрелкой. В поле Sampling Frequency введите частоту дискретизации. Эта величина обратна шагу изменения времени t , заданному при формировании сигнала (в данном примере шаг изменения t равен 0,01, а частота дискретизации, следовательно, равна 100).

(42)

В поле Name записано имя, под которым будет значиться данный сигнал в приложении SPTool . На данной стадии это имя можно изменить по собственному усмотрению. Нажмите кнопку Ok .

Теперь в списке Signals наряду с именами встроенных сигналов появилось имя импортированного сигнала. Нажав кнопку View под списком Signals , можно посмотреть график выделенного сигнала.

В данном приложении можно проектировать и использовать цифровые фильтры для обработки сигналов. В списке Filters записаны имена трех встроенных фильтров. При нажатии кнопки View под списком Filters , появится окно Filter Viever . В нем можно посмотреть:

АЧХ-фильтра (амплитуду можно задать либо в линейном, либо в логарифмическом масштабе либо в децибелах; частоту – либо в линейном, либо в логарифмическом масштабе);

ФЧХ-фильтра (угол можно задать либо в радианах, либо в градусах; частоту – либо в линейном, либо в логарифмическом масштабе);

Групповое время задержки фильтра;

Нули и полюса фильтра;

Отклик на единичный импульс.

Нажав на кнопку New , получаем возможность проектирования фильтров. Кнопка Edit дает возможность редактировать ранее созданные фильтры. В раскрывшемся окне Filter Designer задаются параметры фильтра, производится расчет порядка фильтра и вывод АЧХ.

В поле Sampling Frequency введите частоту дискретизации обрабатываемого сигнала. В поле Algorithm можно выбрать один из следующих видов цифровых фильтров:

КИХ-фильтр Ремеза;

КИХ-фильтр с минимальным среднеквадратическим отклонением;

КИХ-фильтр с окном Кайзера;

БИХ-фильтр с аппроксимацией Баттерворта;

БИХ-фильтр с аппроксимацией Чебышева;

БИХ-фильтр с аппроксимацией инверсной Чебышева;

БИХ-фильтр с эллиптической аппроксимацией.

Выбрав пункт Pole/Zero Editor можно задать с помощью мыши или вводя координаты на Z -плоскости полюса и нули передаточной функции.

Порядок фильтра либо рассчитывается (если стоит птичка в поле Minimum Order ), если вводится в поле Order (если птичка снята). В данной работе порядок фильтров будет рассчитываться.

В поле Type задается тип фильтра: ФНЧ, ФВЧ, полосовой или режекторный фильтр.

Ниже вводятся граничные частоты и затухания полос пропускания и задерживания.

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

Чтобы отфильтровать сигнал, выберите его в списке Signals , затем в списке Filters выберите фильтр и нажмите на кнопку Apply . В раскрывшимся окне введите (или оставьте введенное по умолчанию) имя отфильтрованного сигнала. Нажмите Ok . Теперь это имя добавилось в списке Signals . Посмотреть график отфильтрованного сигнала можно описанным выше способом.


Задание

1. Сгенерируйте сигнал, состоящий из трех гармоник с частотами 1 , 3, и 5 Гц, имеющих амплитуды 1, 0.5 и 0.75 соответственно. Импортируйте этот сигнал в приложение SPTool и отфильтруйте его так, чтобы:

а) выделить первую гармонику;

б) выделить вторую гармонику;

в) выделить третью гармонику;

г) подавить только вторую гармонику;

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

2. Создайте БИХ-фильтр с аппроксимацией Баттерворта. Не меняя параметров фильтра, измените аппроксимацию с Баттерворта на Чебышева, затем на инверсную Чебышева и эллиптическую. Как при этом меняется АЧХ и порядок фильтра.

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

4. Сформируйте два синусоидальных сигнала частотой 10 Гц и 20 Гц, длительностью 5 секунд и частотой дискретизации 1000 Гц.

Создайте полосовой БИХ-фильтр с аппроксимацией Чебышева со следующими параметрами:

Частота дискретизации – 1000 Гц;

Левая граничная частота полосы задерживания – 2 Гц;

Левая граничная частота полосы пропускания – 5 Гц;

Правая граничная частота полосы пропускания – 495 Гц;

Правая граничная частота полосы задерживания – 498 Гц;

Максимальное затухание в полосе пропускания – 1дБ;

Минимальное затухание в полосе задерживания – 60дБ.

Создайте полосовой КИХ-фильтр Чебышева (Equiripple FIR ) с аналогичными параметрами.

Отфильтруйте сформированные сигналы с помощью созданных фильтров. Сравните сдвиг фазы между сигналами до фильтрации и после при использовании БИХ- и КИХ-фильтра.

5. С помощью редактора Pole/Zero Editor синтезируйте:

а) фильтр нижних частот;

б) фильтр верхних частот;

в) полосовой фильтр;

г) режекторный (заградительный) фильтр.

6. Запустите приложение Filter Design & Analysis Tool с помощью команды

В данном приложении сформируйте полосовой КИХ-фильтр использую метод взвешенных функций (FIR Window ) со следующими параметрами:

Порядок фильтра – 50;

Частота дискретизации – 2000 Гц;

Левая граничная частота – 250 Гц;

Правая граничная частота – 750 Гц.

Определите использование какой оконной функции дает наибольшее затухание передаточной функции на частоте 200 Гц. Какой минимальный порядок фильтра, передаточная функция которого имеет затухание 40 дБ на частоте 200 Гц?


Контрольные вопросы

1. Назовите 4 основных вида аналоговых фильтров-прототипов.

2. Какие фильтры являются рекурсивными (БИХ), а какие нерекурсивными (КИХ)?

3. Что такое групповое время задержки?

4. Назовите методы расчета БИХ-фильтров.

5. Достоинства и недостатки метода взвешивания при проектировании КИХ-фильтров.

6. Преимущества и недостатки БИХ- и КИХ-фильтров.

7. Как необходимо включать фильтры при создании эквалайзера.

Наиболее простой подход при расчете КИХ-фильтров сводится к получению импульсной характеристики конечной длины путем усечения последовательности импульсной характеристики бесконечной длины. Если предположить, что является идеальной требуемой частотной характеристикой, то

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

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

как это явление неравномерной сходимости проявляет себя в расчете КИХ-фильтров.

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

В других случаях.

В общем случае можно представить в виде произведения требуемой импульсной характеристики и «окна» конечной длины т. е.

где в примере для выражения (5.50)

При использовании теоремы о комплексной свертке, приведенной в гл. 2, видно, что

Это значит, что является круговой сверткой требуемой частотной характеристики с преобразованием Фурье «окна». Поэтому частотная характеристика будет «размьпой» версией требуемой характеристики На рис. 5.31а показаны типичные функции как это требуется согласно (5.53).

Рис. 5.31. Процесс свертки, подразумеваемый как усечение требуемой импульсной характеристики и типовая аппроксимация, образующаяся в результате применения функции окна к требуемой импульсной характеристике (б)

(Обе они показаны как действительные функции только для удобства в отображении процесса свертки.)

Из (5.53) видно, что если является узкой по сравнению с изменениями то будет «подобной» Таким образом, выбор окна определяется требованием иметь минимально возможной длины для того, чтобы минимизировать вычисления при выполнении фильтра, обеспечивая в то же время минимально узкой по частоте так, чтобы точно

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

Частотная характеристика показана на рис. 5.32 для фазовая характеристика, как видно из (5.54), является линейной. С ростом ширина «главного лепестка» уменьшается. (Главный лепесток определяется произвольно как область между значениями

Рис. 5.32. Амплитудная характеристика, полученная в результате преобразования Фурье для прямоугольного окна

Рис. 5.33. Используемые окна для расчета КИХ-фильтров

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

показаны на рис. 5.33. Эти окна определяются следующими выражениями : для прямоугольного

для окна Бартлета (Bartlett)

для окна с хэннингом (Hanning)

для окна Хемминга (Hamming.)

для окна Блэкмана (Blackman)

Функция вычерчена на рис. 5.34 для каждого из этих окон при Заметим, что поскольку эти окна являются симметричными, то фазовая характеристика оказывается линейной. Очевидно, что прямоугольное окно имеет самый узкий главный лепесток и, таким образом, для заданной длины должно давать самые крутые спады характеристики переходных полос в точках резкого изменения Однако, поскольку первый боковой лепесток оказывается ниже главного пика только примерно на 13 дБ, возникают колебания значительной величины при резком изменении . С помощью постепенного сужения окна до нуля боковые лепестки значительно понижаются, однако при этом появляются гораздо более широкий главный лепесток и более широкие переходные полосы в точках резких изменений На Кайзер предложил универсальное семейство окон, определяемых выражением

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

Рис. 5.34. (см. скан) Преобразования Фурье для окон рис. 5.33: а) прямоугольного; б) Бартлета (треугольного); в) с хэннингом; г) Хемминга; д) Блэкмана

лепестка. Типичные значения лежат в диапазоне

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

Соответствующая импульсная характеристика имеет вид

Очевидно, что имеет бесконечную длину. Чтобы создать

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

Рис. 5.35. Усеченная импульсная характеристика идеального фильтра нижних частот (задержка равна 25 отсчетам, общая длина - 51 отсчету, а частота среза -

Рис. 5.36. (см. скан) Влияние различных окон для примера рис. 5.35:

а) прямоугольного; б) Бартлета; в) с хэннингом; г) Хемминга; д) Блэкмана

На рис. 5.36 показаны зависимости для импульсной характеристики рис. 5.35 с учетом взвешивания для каждого из пяти окон рис. 5.34. Отмечаем, что увеличение ширины переходной полосы соответствует

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

Из (5.54) следует, что ширина центрального лепестка обратно пропорциональна N. Это в общем случае верно и иллюстрируется для окна Хемминга на рис. 5.37.

Рис. 5.37. (см. скан) Зависимость ширнны центрального лепестка при преобразовании Фурье для окна Хемминга от длины окна:

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

Рис. 5.38. (см. скан) Влияние длины окна при расчете фильтра (фильтр нижних частот, и окно Хемминга): а)

непропускания остается, по существу, постоянным, будучи зависимым от формы окна, в то время как ширина переходной области: при резком изменении зависит от длины окна.

Приведенные примеры иллюстрируют основные принципы метода использования окон при проектировании КИХ-фильтра. За счет выбора формы окна и его длины можно осуществить некоторое управление процессом расчета. Например, для заданного ослабления в полосе непропускания, как правило, оказывается справедливо условие типа где - ширина переходной полосы [приблизительно ширина главного лепестка и А - постоянная, зависящая от формы окна. Как было показано, форма, окна является существенной при определении минимального ослабления в полосе непропускания. Для окон, которые мы рассмотрели, основные параметры для расчета фильтра нижних частот сведены в табл. 5.2. Следует отметить, что величины в табл. 5.2 являются приближенными; они зависят до некоторой степени от и частоты среза требуемого фильтра.

ТАБЛИЦА 5.2 (см. скан)

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

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

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

В этой статье на примере простого проекта цифрового фильтра с конечной импульсной характеристикой обсуждаются некоторые ключевые особенности архитектуры процессоров Blackfin, повышающие производительность в задачах цифровой обработки сигналов. А также рассмотрен вопрос интерфейса между отдельными частями кода, написанными на языке ассемблера и языке C/C++.

Все статьи цикла:

Цифровые КИХ-фильтры

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

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

где у[к] - отсчет выходного сигнала в момент времени t = kT S ; x - отсчет входного сигнала в момент времени t = (k–n)T S ; h(n) - n-й коэффициент фильтра; N - порядок фильтра; а Т S - интервал дискретизации входного сигнала.

Из этой формулы следует, что вычисление отдельно взятого выходного отсчета КИХ-фильтра сводится к выполнению в цикле перемножения двух чисел (входного отсчета и коэффициента) и накопления результата. Наличие выделенного аппаратного блока, осуществляющего операцию умножения двух операндов и накопления результата в выходном регистре (Multiply-Accumulate, MAC) за один процессорный цикл, является характерным свойством любого цифрового сигнального процессора, однако помимо этого цифровые сигнальные процессоры имеют еще целый ряд свойств, направленных на дальнейшую оптимизацию вычисления свертки. К ним относятся циклическая адресация буферов в памяти, аппаратная поддержка циклов, наличие многофункциональных команд, возможность одновременной выборки нескольких операндов из памяти за один процессорный цикл и многофункциональные команды. Стоит отметить, чтообсуждаемые архитектурные особенности повышают эффективность не только при создании цифровых фильтров, но и во многих других задачах цифровой обработки сигналов. Далее мы подробно рассмотрим каждое из этих свойств на примере архитектуры процессоров Blackfin.

Рис. 1. Структурная схема КИХ-фильтра

Циклическая адресация

Циклическая адресация - это один из специализированных режимов адресации процессора, который может быть использован для организации цифровых линий задержки. Поддержка циклической адресации позволяет программисту настраивать в памяти процессора циклические (кольцевые) буферы и автоматически, без программного вмешательства выполнять адресацию их элементов со смещением указателя. Генератор адресов в процессоре может работать со смещениями, отличными от единицы, и, что более важно, автоматически выполняет возврат к началу буфера при выходе за его границу, как показано на рис. 2. В случае обычной линейной адресации для организации циклического буфера потребовалось бы при каждом положительном (отрицательном) приращении указателя сравнивать его значение с адресом последней (первой) ячейки буфера, что неизбежно привело бы к непроизводительным издержкам.

Рис. 2. Адресация циклических буферов

Для реализации циклических буферов в процессоре ВЪскйп имеется четыре набора специализированных регистров:

  • Индексные регистры (10-13), которые содержат значение, выдаваемое генератором адресов данных на шину адреса процессора.
  • Регистры модификации (М0-М3), которые определяют величину положительного или отрицательного приращения индексного регистра, выполняемого после каждого обращения к памяти.
  • Регистры длины L0-L3), которые определяют размер циклического буфера и диапазон адресов индексных регистров.
  • Регистры базового адреса (В0-В3), в которых хранится адрес первого элемента циклического буфера.

Каждая пара регистров В и L всегда используется только совместно с соответствующим регистром I (например, В0, L0, 10). На регистры М это правило не распространяется, и они могут быть использованы с любым из регистров I.

Рассмотрим, как этот режим адресации применяется для программной реализации КИХ-фильтров. В операции вычисления каждого выходного отсчета КИХ-фильтра участвует текущий входной отсчет и N-1 предыдущих входных отсчетов (N - порядок фильтра). То есть циклический буфер для линии задержки сигнала, равно как и буфер, в котором хранятся коэффициенты, должен иметь N элементов. Как показано на рис. 3, очередной принимаемый входной отсчет x[k], соответствующий моменту времени kТ S , записывается в ячейку буфера линии задержки (буфер А) с номером j поверх содержащегося в ней самого старого отсчета x, соответствующего моменту времени (k–N)T S . При этом указатель буфера А смещается на одну позицию, так что при первом чтении буфера А из памяти будет выбран отсчет x.

Указатель буфера коэффициентов (буфер В) на данном этапе не изменяется и должен указывать на первый элемент буфера, в котором хранится последний коэффициент фильтра, h[N]. После выполнения N операций чтения данных из буферов А и В, необходимых для вычисления выходного отсчета y[k], указатель В возвращается на исходную позицию (в начало буфера), а указатель А будет указывать на ячейку, где хранится отсчет x. Следует учесть, что, в общем случае, как показано на рис. 3, значения в буфер коэффициентов должны записываться в порядке, обратном реальному порядку следования коэффициентов фильтра. То есть в первой ячейке буфера должен храниться последний коэффициент фильтра, во второй ячейке - предпоследний коэффициент и т. д. Однако в большинстве ситуаций на практике предпочтительнее использовать КИХ-фильтры с симметричными коэффициентами, имеющие линейную фазовую характеристику, и в таком случае подобное упорядочивание не требуется.

Рис. 3. Буферы линии задержки и коэффициентов КИХ-фильтра

Аппаратные циклы

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

Для организации программных циклов без непроизводительных издержек в процессоре Blackfin имеется два набора регистров адреса начала цикла (LT0, LT1), адреса конца цикла (LB0, LB1) и счетчика цикла (LC0, LC1). Наличие двух наборов регистров позволяет реализовывать не только одиночные, но и вложенные двухуровневые циклы. При этом цикл 1, настраиваемый при помощи регистров LT1, LB1 и LC1, имеет больший приоритет (внутренний цикл). При написании программ на языке ассемблера каждый из трех регистров цикла может быть инициализирован по отдельности, однако удобнее использовать для этой цели специальную команду LSETUP, которая имеет формат:

LSETUP(loop_start, loop_end) LCx = preg;

Здесь loop_start - метка, отмечающая начало цикла, или непосредственное значение смещения первой команды цикла относительно команды LSETUP; loop_end - метка, отмечающая конец цикла, или непосредственное значение смещения последней команды цикла относительно команды LSETUP; reg - один из регистров указателей P0-P5.

Пример настройки одиночного цикла без вложения:

LSETUP(lp_start, lp_end) LCO = P5;

... //Одна или несколько команд цикла

lp_end: ... //Последняя команда цикла

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

Оптимальное размещение данных

Для максимально эффективного выполнения операции умножения с накоплением необходимо, чтобы процессор мог за один процессорный цикл выбирать из памяти команду и два операнда (в случае применения КИХ-фильтра - отсчет из линии задержки сигнала и коэффициент фильтра). В разных сигнальных процессорах эта возможность достигается по-своему. Так, например, в самых первых сигнальных процессорах Analog Devices ADSP-21xx (вплоть до ADSP-219x), имеющих классическую модифицированную гарвардскую архитектуру, данные могут храниться как в памяти данных, так и в памяти программ, а обращение к памяти программ происходит на удвоенной частоте (в первой половине процессорного цикла происходит выборка команды, а во второй - слова данных). Процессоры ADSP-219x и ADSP-2106x/2116x также основаны на модифицированной гарвардской архитектуре, однако вместо обращения к памяти программ на удвоенной частоте в них используется аппаратный кэш команд. Таким образом, за один процессорный цикл в этих процессорах может выполняться выборка одного операнда из памяти данных, одного операнда из памяти программ и команды из кэша.

В процессорах Blackfin в памяти программ могут содержаться только команды, однако память данных состоит из двух банков, каждый из которых, в свою очередь, разделен на несколько блоков. Сложная структура внутренних шин позволяет одновременно обращаться к любой паре таких блоков за один цикл. Таким образом, для оптимизации обращений к памяти при выполнении свертки в процессорах Blackfin следует разместить массивы линии задержки и коэффициентов фильтра в разных блоках памяти. Для этого необходимо сделать две вещи. Во-первых, при написании кода на языке ассемблера или языке C необходимо в явном виде указать, что массивы должны помещаться в разные секции генерируемого объектного кода (входные секции). Во-вторых, в файле описания линкера (Linker Description File, LDF) необходимо надлежащим образом установить соответствие между входными секциями и сегментами физической памяти процессора.

Размещением команд и данных во входные секции при написании программ на языке ассемблера управляет директива:

SECTION section_name;

Здесь section_name - это имя входной секции. Все переменные или команды, которые следуют в тексте программы за этой директивой, будут располагаться во входной секции с указанным именем. При создании программ на языках C/C++ для этих же целей используется квалификатор section("section_name"), который добавляется при объявлении переменной или функции перед указанием ее типа. По умолчанию компилятор C/C++ процессоров Blackfin использует следующие имена секций: program для кода программы, datai для глобальных и статических переменных, constdata для переменных, объявленных как const, bsz для глобальных переменных, инициализированных нулями, stack для хранения стека и, наконец, heap для «кучи» (динамически выделяемой памяти).

Файл описания линкера содержит управляющие директивы, которые используются на этапе компоновки для формирования исполняемого файла. Как и объектные файлы, исполняемые файлы разбиваются на выходные секции, привязанные к карте памяти процессора. В файле LDF определяется соответствие между входными и выходными секциями, а также приводится дополнительная информация, необходимая для компоновки.

Типовой файл LDF имеет следующую структуру (рис. 4).

  • Команда ARCHITECTURE{ADSP-xxxxx} задает архитектуру процессора, для которого формируется исполняемый файл. Эта команда естественным образом диктует возможную разрядность и диапазон памяти, набор регистров и другую информацию, используемую отладчиком, линкером и загрузчиком.
  • Команда SEARCH_DIR{} указывает пути для поиска библиотек и объектных файлов.
  • При помощи команды $LIBRARIES программист указывает набор библиотек и объектных файлов, в которых линкер будет осуществлять поиск символов, на которые существуют ссылки в исходных файлах.
  • С помощью макроса $OBJECTS задается список входных файлов, в которых линкер будет искать компонуемые объекты. Макросы упрощают чтение LDF-файла, позволяя вместо многократных перечислений одних и тех же имен файлов использовать более компактные записи. Например, запись вида:

$OBJECTS = main.doj, fft.doj;

dxe_program {INPUT_SECTIONS ($DOJS(program))} > mem_

эквивалентна следующей записи:

INPUT_SECTIONS (main.doj(program)

fft.doj(program))} > mem_program

  • Команда MEMORY{} описывает физическую память разрабатываемой системы. Каждая из строк, являющихся ее аргументами, задает имя, границы, разрядность и тип сегмента памяти. Имена сегментов образуют отдельное пространство имен и могут, в общем случае, пересекаться с именами входных или выходных секций. Команда PROCESSOR формирует исполняемый DXE-файл. Аргументами команды PROCESSOR являются команда OUTPUT, задающая имя выходного файла, и команда SECTIONS{}, которая непосредственно управляет размещением отдельных объектов из объектных и библиотечных файлов в физической памяти системы. Аргументы команды SECTIONS{} имеют следующий синтаксис:

имя_выходной_секции [тип_секции] {команды/выражения} [>сегмент_памяти]

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

Рис. 4. Структура файла LDF

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

Многофункциональные команды и вычисления в режиме SIMD

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

Первой командой, как правило, является команда умножителя или АЛУ. Иногда в качестве первой команды используется команда MNOP - 32-битная версия команды NOP (No Operation - «Нет операции»). В качестве 16-битных команд могут использоваться команды загрузки значения в регистр из памяти, сохранения значения регистра в память или модификации индексного регистра, а также обычная 16-битная команда NOP. На применение данных команд накладывается целый ряд ограничений, которые подробно описаны в руководстве по программированию процессоров Blackfin (Blackfin Processor Programming Reference). В тексте программы на языке ассемблера отдельные команды, входящие в состав многофункциональной, разделяются двумя вертикальными чертами ("11").

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

Ax += Dreg_lo_hi * Dreg_lo_hi || Dreg = || Dreg = ;

Здесь Ax - это регистр аккумулятора (A0 или A1), Dreg - один из регистров регистрового файла данных (Ry, y = 0-7), Dreg_lo_hi - младшая или старшая половина регистра, Ireg - индексный регистр (Iz, z = 0-3). При использовании подобной многофункциональной команды для вычисления свертки удобно выполнить первую загрузку данных до входа в цикл, а последнюю операцию умножения с накоплением - после выхода из цикла. Тогда цикл будет включать в себя только указанную выше команду.

И наконец, поскольку в состав ядра процессора Blackfin входят два идентичных вычислительных блока, он может выполнять сразу две операции умножения-накопления за один процессорный цикл над четырьмя входными операндами в режиме SIMD (одна команда, разные данные). Такой режим позволяет в два раза уменьшить количество итераций, необходимых для вычисления одного выходного отсчета обычного КИХ-фильтра, или реализовать эффективную обработку двух потоков данных (например, комплексного сигнала и стереофонического аудиосигнала). Пример команды, осуществляющей одновременно две операции умножения-накопления:

A1 += R1.H * R2.L, A0 += R1.L * R2.H;

В первой операции старшая половина 32-битного регистра R1 умножается на младшую половину 32-битного регистра R2 и складывается с содержимым аккумулятора А1. Во второй операции младшая половина регистра R1 умножается на старшую половину R2 и складывается с содержимым аккумулятора АО.

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

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

КИХ-фильтр

Фильтр с конечной импульсной характеристикой (нерекурсивный фильтр , КИХ-фильтр , FIR-фильтр ) - один из видов линейных электронных фильтров , характерной особенностью которого является ограниченность по времени его импульсной характеристики (с какого-то момента времени она становится точно равной нулю). Такой фильтр называют ещё нерекурсивным из-за отсутствия обратной связи . Знаменатель передаточной функции такого фильтра - некая константа.

Динамические характеристики

Разностное уравнение, описывающее связь между входным и выходным сигналами фильтра: где P - порядок фильтра, x (n ) - входной сигнал, y (n ) - выходной сигнал, а b i - коэффициенты фильтра. Иными словами, значение любого отсчета выходного сигнала определяется суммой масштабированных значений P предыдущих отсчетов. Можно сказать иначе: значение выхода фильтра в любой момент времени есть значение отклика на мгновенное значение входа и сумма всех постепенно затухающих откликов P предыдущих отсчетов сигнала, которые всё ещё оказывают влияние на выход (после P -отсчетов импульсная переходная функция становится равной нулю, как уже было сказано, поэтому все члены после P -го тоже станут равными нулю). Запишем предыдущее уравнение в более ёмком виде:

x (n ) = δ(n )

где δ(n ) - дельта-функция . Тогда импульсная характеристика КИХ-фильтра может быть записана как:

Ссылки

Wikimedia Foundation . 2010 .

Смотреть что такое "КИХ-фильтр" в других словарях:

    - (Нерекурсивный фильтр, КИХ фильтр) или FIR фильтр (FIR сокр. от finite impulse response конечная импульсная характеристика) один из видов линейных цифровых фильтров, характерной особенностью которого является ограниченность по времени … Википедия

    Линейные электронные фильтры Фильтр Баттерворта Фильтр Чебышева Эллиптический фильтр Фильтр Бесселя Фильтр Гаусса Фильтр Лежандра Фильтр Габора … Википедия

    - (Рекурсивный фильтр, БИХ фильтр) или IIR фильтр (IIR сокр. от infinite impulse response бесконечная импульсная характеристика) линейный электронный фильтр, использующий один или более своих выходов в качестве входа, то есть… … Википедия

    Фильтр с конечной импульсной характеристикой (нерекурсивный фильтр, КИХ фильтр, FIR фильтр) один из видов линейных электронных фильтров, характерной особенностью которого является ограниченность по времени его импульсной характеристики (с какого … Википедия

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

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

    Фильтр с бесконечной импульсной характеристикой (Рекурсивный фильтр, БИХ фильтр) линейный электронный фильтр, использующий один или более своих выходов в качестве входа, то есть образует обратную связь. Основным свойством таких фильтров является … Википедия

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

    У этого термина существуют и другие значения, см. Скользящая средняя (значения). Блок схема простого КИХ фильтра второго порядка, реализующего скользящее среднее Скользящая средняя, скользящее среднее разновидность цифрового фильтра с… … Википедия

    Пример использования медианного фильтра к зашумленному изображению с 3 различными значениями радиуса окна фильтрации. Обработка изображения выполнена в Adobe Photoshop. Медианны … Википедия

Материал из Модулярная арифметики

Фильтр с конечной импульсной характеристикой (Нерекурсивный фильтр , КИХ-фильтр ) или FIR-фильтр (FIR сокр. от finite impulse response - конечная импульсная характеристика) - один из видов линейных цифровых фильтров, характерной особенностью которого является ограниченность по времени его импульсной характеристики (с какого-то момента времени она становится точно равной нулю). Такой фильтр называют ещё нерекурсивным из-за отсутствия обратной связи. Знаменатель передаточной функции такого фильтра - некая константа.

Динамические характеристики

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

Для того, чтобы найти ядро фильтра положим

где - дельта-функция. Тогда импульсная характеристика КИХ-фильтра может быть записана как:

Z-преобразование импульсной характеристики даёт нам передаточную функцию КИХ-фильтра:

Свойства

КИХ-фильтр обладает рядом полезных свойств, из-за которых он иногда более предпочтителен в использовании, чем БИХ-фильтр. Вот некоторые из них:

  • КИХ-фильтры устойчивы.
  • КИХ-фильтры при реализации не требуют наличия обратной связи.
  • Фаза КИХ-фильтров может быть сделана линейной

Прямая форма КИХ фильтра

КИХ фильтры могут быть реализованы с использованием трех элементов: умножитель, сумматор и блок задержки. Вариант, показанный на рисунке, есть прямая реализация КИХ-фильтров типа 1.

Пример программ

Построение КИХ-фильтров

Построение КИХ-фильтров заключается в выборе коэффициентов фильтра таким образом, чтобы полученная система имела требуемые характеристики. Чаще всего фильтр строят по заданной амплитудно-частотной характеристике. Существуют разные методы построения КИХ-фильтров:

Программные пакеты такие как MATLAB, GNU Octave, Scilab, и SciPy реализуют описанные выше методы.

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

Построение методом окна

В данном методе сначала строится идеальный БИХ-фильтр, затем к нему применяется Функция окна – во временной области, умножением бесконечной импульсной характеристики на функцию окна. Затем выполняется свёртка полученного результата с откликом на функцию окна. Если идеальная АЧХ достаточно проста, например, как прямоугольный отклик, результат свёртки можно сравнительно легко определить. На самом деле обычно сначала определяют требуемый результат и решают обратную задачу определения подходящей функции окна. Для этого метода особенно хорошо подходят окна Кайзера.

Пример КИХ-фильтра

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

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