Процесс проектирования цифрового фильтра состоит из таких этапов, как формирование спецификации, выбор типа и архитектуры фильтра, расчет коэффициентов фильтра, анализ эффектов конечной разрядности, аппаратная реализация фильтра – например, на ячейках цифровой обработки сигналов ПЛИС или высокопроизводительных сигнальных процессорах[1, 2, 4].
В настоящее время разработка цифровых фильтров осуществляется с привлечением различных сред математических и инженерных расчётов, наиболее популярной из которых является среда MATLAB. При использовании MATLAB коэффициенты цифровых фильтров представлены в формате с плавающей запятой, а разрядность ячеек памяти для их хранения может составлять 32 или 64 бита.
Если цифровой фильтр предполагается реализовать на устройстве, работающем в формате с фиксированной запятой и имеющем невысокую разрядность (16-18 бит), потребуется смена формата представления коэффициентов фильтра и ограничение их разрядности. В подобном же формате будут представлены и отсчёты входного сигнала цифрового фильтра. Может также потребоваться округление результатов перемножения коэффициентов фильтра на отсчёты входного сигнала, а также результатов суммирования произведений.
Вследствие перечисленных выше мер появляются шум квантования отсчётов входного сигнала, искажение АЧХ фильтра, шум округления результатов вычислений и, возможно, переполнение разрядной сетки, которые называются эффектами конечной разрядности [3]. Так, например, на рис. 1 представлено ухудшение АЧХ цифрового фильтра вследствие перехода к представлению его коэффициентов в формате с фиксированной запятой и ограничения разрядности его коэффициентов. На рисунке видно, что уровень подавления частот в зоне заграждения фильтра существенно снижается.
Рис. 1. Ухудшение АЧХ цифрового фильтра при переходе к формату с фиксированной точкой и ограничении разрядности коэффициентов – до 12 и 16 бит
Рис. 2. Модель КИХ-фильтра, учитывающая эффекты конечной разрядности
Анализ эффектов конечной разрядности для КИХ-фильтра позволяет решить две задачи:
- выяснить, соответствуют ли требованиям спецификации на фильтр его характеристики, полученные после ограничения разрядности коэффициентов;
- оценить снижение качества сигнала на выходе фильтра, произошедшее вследствие эффектов конечной разрядности.
В данной работе рассмотрен вариант использования среды MATLAB для анализа эффектов конечной разрядности в цифровых КИХ-фильтрах [3]. Анализ выполняется на основе модели (рис. 2), учитывающей изменение импульсной характеристики фильтра, шум квантования входного сигнала и ошибку округления выходного сигнала [5].
Шум квантования отсчетов входного сигнала Δx(k) имитируется случайным шумом с равномерным распределением в интервале где q – шаг квантования АЦП [5]. Квантованный сигнал xq(k), поступающий на вход КИХ-фильтра, является результатом суммирования шума квантования и входного сигнала x(k).
Квантование коэффициентов КИХ-фильтра h(i) моделируется фильтром с коэффициентами Δh(i), включенным параллельно с исходным. Коэффициенты Δh(i) являются разницей между h(i) и результатами их квантования hq(i).
Выходной сигнал КИХ-фильтра y(k) рассчитывается по формуле (1):
(1)
Разрядность произведений x(k – i)•h(i) в два раза выше, чем разрядность x(k – i) и h(i). Если для суммирования произведений необходимо предварительно выполнять их округление, ошибка округления добавляется к каждой частной сумме произведений, а суммарная ошибка округления пропорциональна порядку фильтра N.
В случае использования для реализации КИХ-фильтра ЦОС-ячеек ПЛИС отдельные произведения x(k – i)•h(i) и конечный результат фильтрации y(k) можно не округлять. Округление выходного сигнала y(k) может потребоваться, если он подается на вход устройства с меньшей разрядностью. Ошибка округления выходного сигнала, Δy(k), моделируется случайным шумом с равномерным распределением в интервале .
Во фрагменте MATLAB-скрипта, приведенном ниже, на основе вектора b коэффициентов созданного ранее фильтра f2 создается фильтр f_fp, работающий в формате с фиксированной запятой при разрядности коэффициентов 18 бит. Вектор b формируется с помощью функции impz. Фильтр f_fp создается с помощью функции dfilt[3].
% создаём спецификацию фильтра
f1=fdesign.lowpass('Fp,Fst,Ap,Ast', 0.2,0.3,0.1,80);
% создаём фильтр в соответствии со спецификацией
f2=design(f1,'kaiserwin');
% получаем вектор коэффициентов ИХ фильтра f2
% в формате с плавающей запятой и разрядностью 64 бита
b=impz(f2);
% создаем фильтр f_fp,
% работающий в формате с фиксированной запятой
f_fp=dfilt.dffir(b);
%задаем формат и разрядность 18 бит коэффициентов фильтра f_fp:
set(f_fp,'arithmetic','fixed','CoeffWordLength',18);
Чтобы MATLAB-модель фильтра учитывала шумы квантования входного сигнала и округления выходного сигнала, необходимо задать дополнительные параметры функции dfilt, в частности, разрядность представления отсчетов входных и выходных сигналов [3].
Таким образом, в среде MATLAB можно провести анализ эффектов конечной разрядности КИХ-фильтра, учитывая влияние квантования коэффициентов и отсчетов входного сигнала, а также округления выходного сигнала фильтра.