Проектирование цифровых фильтров в системе MATLAB / Simulink и САПР ПЛИС Quartus

№ 6’2008
PDF версия
Одна из распространенных операций цифровой обработки сигналов - фильтрация. Для ее реализации могут быть использованы программно-аппаратные ресурсы цифровых сигнальных процессоров; ПЛИС по архитектуре FPGA; различные операционные устройства: регистры, умножители, сумматоры и соответствующее управляющее устройство. Может быть также проведена программная реализация с помощью высокоуровневых языков.

Одна из распространенных операций цифровой обработки сигналов — фильтрация. Для ее реализации могут быть использованы программноаппаратные ресурсы цифровых сигнальных процессоров; ПЛИС по архитектуре FPGA; различные операционные устройства: регистры, умножители, сумматоры и соответствующее управляющее устройство. Может быть также проведена программная реализация с помощью высокоуровневых языков.

Вид импульсной характеристики цифрового фильтра определяет их деление на фильтры с конечной импульсной характеристикой (КИХ-фильтры) и фильтры с бесконечной импульсной характеристикой (БИХ-фильтры). Широкое применение цифровых КИХ-фильтров вызвано тем, что свойства их хорошо исследованы. Особенности архитектуры ПЛИС FPGA позволяют проектировать компактные и быстрые КИХ-фильтры на основе распределенной арифметики. Использование распределенной арифметики для реализации арифметических функций обеспечивает выигрыш в объеме задействованных ресурсов ПЛИС [1, 2].

Рассмотрим особенности расчета КИХ-фильтра в системе MATLAB/Simulink (пакет Signal Processing, среда FDATool) и с помощью мегафункции Mega Core FIR Compiler САПР ПЛИС Quartus. Для расчета КИХ-фильтра применяются следующие данные: частота взятия отчетов FS; порядок фильтра n; граница полосы пропускания ƒp; граница полосы задерживания (подавления) ƒs; неравномерность АЧХ в полосе пропускания δ1; минимальное затухание в полосе задерживания δ2. На практике, как правило, вместо δ1, δ2 задают логарифмические величины Rp , Rs, измеряемые в децибелах:

Цель примера — спроектировать два одинаковых по характеристикам КИХ-фильтра в среде FDATool и на основе мегафункции Mega Core FIR Compiler. Главным достоинством среды FDATool по сравнению с другими программами расчета КИХ-фильтров является возможность генерации кода языка VHDL с помощью Simulink HDL Coder. Однако код языка VHDL в САПР ПЛИС Quartus непосредственно использовать нельзя. Сгенерированный код языка VHDL можно применить в ModelSim (Mentor Graphics HDL simulator).

Исходные данные для расчета КИХ-фильтра нижних частот показаны в таблице.

Таблица. Исходные данные для расчета КИХ-фильтра нижних частот
Исходные данные для расчета КИХ-фильтра нижних частот

Пример расчета КИХ-фильтра в среде FDATool показан на рис. 1. Среда FDATool представляет графический интерфейс для расчета фильтров и просмотра их характеристик. На вкладке Design Filter зададим тип синтезируемой АЧХ — фильтр нижних частот, тип фильтра — нерекурсивный (FIR), метод синтеза — метод окон (синтез с использованием весовых функций). Более подробную информацию по работе со средой FDATool можно найти в работе [3]. Среда FDATool поддерживает больше методов синтеза, чем мегафункция Mega Core FIR. Преимущество мегафункции в том, что порядок проектируемого КИХ-фильтра (число отводов) оценивается автоматически. Но синтез АЧХ осуществляется методом окон. Этот недостаток компенсируется возможностью загрузки коэффициентов проектируемого фильтра, полученных, например, с использованием среды FDATool. При проектировании КИХ-фильтра в среде FDATool применяются следующие методы: Equiriple — синтез фильтров с равномерными пульсациями АЧХ методом Ремеза; Least-Squares — минимизация среднеквадратичного отклонения АЧХ от заданной и метод окон (Window). В разделе Filter Order зададим порядок КИХ-фильтра, и именно тот, который рекомендует выбрать мегафункция Mega Core FIR (следует обратить внимание на достаточно высокий порядок КИХ-фильтра, выявляемый с ростом отношения FS/FС, что считается одним из недостатков его использования). Мегафункция также предлагает и метод синтеза — окно Блекмена (Blackman). Расчет фильтра осуществляется после нажатия кнопки Design Filter. На рис. 1 показана АЧХ, вычисленная с помощью формата с плавающей запятой (пунктир) и формата с фиксированной запятой (непрерывная линия).

Интерфейс среды FDATool

На рис. 2 показана синтезируемая АЧХ (задается комплексный коэффициент передачи |H(ƒ)|, определенный в диапазоне частот от нуля до FS/2). Частота среза FС равна 9600 Гц. В мегафункции Mega Core FIR Compiler задается переходная полоса (Transition Bandwith), равная 2400 Гц, и частота среза, равная 9600 Гц (обозначается как cutoff freq (1)).

Характеристики синтезируемой АЧХ КИХ-фильтра в среде FDATool

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

Вкладка Realize Model позволяет импортировать спроектированный КИХ-фильтр (модель) в Simulink (рис. 3). На рис. 3а показана модель КИХ-фильтра (имя модели Filter simulink), построенная как с использованием базовых элементов (задержка, сумма, коэффициент усиления) цифровых фильтров, так и с использованием S-функции (модель КИХ-фильтра, построенная с использованием мегафункции Mega Core FIR Compiler). На рис. 3б показан сигнал до фильтрации, а на рис. 3в–г — после нее. Меню Targets и опция Generate HDL позволяют сгенерировать код фильтра на языке VHDL (рис. 4). Выберем параллельную архитектуру КИХ-фильтра, обладающую высокой производительностью.

Окно Simulink HDL Coder

Рассмотрим расчет КИХ-фильтра с помощью мегафункции Mega Core FIR Compiler в САПР ПЛИС Quartus (данная мегафункция может быть также использована и в САПР Max+Plus II). Применение Mega Core FIR Compiler позволяет быстро спроектировать цифровой КИХ-фильтр исходя из заданных параметров. Быстрота и малая трудоемкость расчетов делает данное программное обеспечение незаменимым при проектировании КИХ-фильтров в базисе ПЛИС фирмы Altera.

Настроим мегафункцию так, чтобы АЧХ и импульсные характеристики совпадали с характеристиками фильтра, построенного с использованием FDATool системы MATLAB/Simulink. При запуске мегафункции Mega Core FIR Compiler открываются диалоговые окна мастера, в котором последовательно предлагается задать имя проекта, разрядность входной шины данных КИХ-фильтра, способ представления входных данных: signed — десятичное число со знаком, unsigned — десятичное число без знака.

После нажатия клавиши «Далее» появляется окно выбора способа расчета и формата представления весовых коэффициентов КИХ-фильтра (отводов). Существует возможность чтения коэффициентов как из текстового файла (коэффициенты могут быть получены, например, с использованием системы MATLAB/Simulink), так и генерация с помощью встроенного модуля мегафункции Core FIR Compiler с учетом заданных параметров. Вид окна представлен на рис. 5. Мегафункция автоматически оценивает число отводов КИХ-фильтра при заданном пользователем типе окна.

Характеристики проектируемого КИХ-фильтра

Мегафункция представляет возможность проанализировать влияние преобразования из формата с плавающей запятой в формат с фиксированной запятой с заданной точностью и влияние величины масштабирования коэффициентов КИХ-фильтра на АЧХ.

Следующий шаг — графический анализ влияния ошибок квантования коэффициентов фильтра на его АЧХ. Ошибки квантования — представление коэффициентов фиксированным набором битов, например 8 бит. Операции сложения и вычитания в формате с фиксированной запятой не приводят к необходимости округления результатов — они могут лишь вызвать переполнение. В отличие от сложения умножение чисел с фиксированной запятой приводит к увеличению числа значащих цифр результата и, следовательно, к необходимости округления. Если результат умножения по модулю не превышает единицы, то применение формата с плавающей запятой даст большую точность [4]. Однако операции сложения в формате с плавающей запятой могут приводить к потере точности. В данном примере выбирается опция преобразования из формата с плавающей запятой в формат с фиксируемой запятой (закладка Floating point to fixed point conversion) c последующим масштабированием коэффициентов с точностью 8 бит. В соответствии с заданной точностью, мегафункция автоматически находит масштабный коэффициент. В нашем случае он составляет 318,8. При масштабировании фильтра все его коэффициенты делятся на 318,8 и на это же значение умножается рассчитанный выходной сигнал. Поэтому на рис. 3а сигнал с выхода КИХ-фильтра (модель под именем Altera FIR filter) умножается на 0,0031368. Временные диаграммы на рис. 3в–г показывают, что спроектированные фильтры работают одинаково, что и требовалось в нашем примере. В качестве масштабирующего множителя можно также задать степень двойки (радиокнопка scale by a factor of) — 256. Покажем коэффициенты КИХ-фильтра в формате с плавающей и с фиксированной запятой, подвергнутые масштабированию:

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

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

На рис. 6а показана тестовая схема КИХ-фильтра (параллельная архитектура), полученная с использованием мегафункции Core FIR Compiler. На вход clock подается последовательность синхроимпульсов с периодом 40 нс. Вход clken является разрешающим сигналом подачи синхроимпульса clock, поэтому на него подается постоянный сигнал логической единицы. На вход Data[3..0] подается сигнал, подлежащий фильтрации, а с выхода DataOut[3..0] снимаем профильтрованный сигнал. Для того чтобы протестировать спроектированный КИХ-фильтр, подадим на вход Data[3..0] единичный импульс — аналог дельта-функции. В этом случае выходной сигнал Yout[13..0] является рассчитанным коэффициентом КИХ-фильтра, который представлен в формате с фиксированной запятой и масштабирован с точностью 8 бит. Результаты моделирования (импульсная характеристика) демонстрируются на рис. 6б.

Результаты моделирования работы КИХ-фильтра нижних частот

Приведем фрагмент кода языка VHDL с использованием Simulink HDL Coder, описывающего КИХ-фильтр с параллельной архитектурой:

Приведем фрагмент кода VHDL-теста КИХ-фильтра, полученный с использованием Simulink HDL Coder:

В комментариях приводятся сведения по настройке арифметики проектируемого КИХ-фильтра (вкладка Set quantization parameters, FDATool). Для расчета был выбран формат с фиксированной запятой (Fixed point). Коэффициенты фильтра представляются с помощью двухэлементного вектора [16,16], что соответствует формату 1.16 (MN, где M — общее число двоичных разрядов, используемое для представления чисел; N — число разрядов дробной части, Numerator), часто применяемому для представления чисел в цифровых 16-битовых сигнальных процессорах. Входной сигнал представляется с помощью вектора [16,15] или в формате 1.15. Выходной сигнал фильтра и результат суммирования произведений представляется с помощью вектора [33,31], результат умножения (свертки) — вектором [31,31], то есть с двойной длиной. Это связано с тем, что типичная конфигурация сигнального процессора содержит 32-битовый умножитель-накопитель. Так же указывается диапазон нормализации мантиссы в формате с плавающей запятой. На рис. 7 показано моделирование работы КИХ-фильтра в ModelSim SE с использованием теста. Данные настройки влияют на ошибки квантования коэффициентов и ошибки округления при квантовании арифметических операций.

Моделирование работы КИХ-фильтра в ModelSim SE

Применение пакета Signal Processing (среда FDATool) системы MATLAB/Simulink совместно с ModelSim SE позволяет проводить проектирование цифровых фильтров в базисе универсальных и специализируемых процессоров цифровой обработки сигналов с использованием арифметики с фиксированной и плавающей запятой. Основными этапами проектирования является выбор спецификации фильтра, расчет коэффициентов, архитектурная реализация, анализ ошибок (шум округления при квантовании результатов арифметических операций, ошибки квантования коэффициентов и влияние длины входного слова — эффекты конечной разрядности) и реализация в аппаратной и/или программной форме. Программной поддержкой служит генерация кода языка С/C++ вместе c Real-Time Workshop, а генерация кода языка VHDL и Verilog — с HDL Coder для тестирования фильтров в ModelSim SE.

Мегафункция Mega Core FIR Compiler САПР ПЛИС Quartus позволяет проектировать цифровые КИХ-фильтры в базисе ПЛИС фирмы Altera.

Литература

  1. Мистюков В. Г., Капитанов В. Д. Реализация высокопроизводительных сверхкомпактных КИХ-фильтров на ПЛИС // Scan Engineering Telecom, 1999.
  2. Стешенко В. Б. ПЛИС фирмы Altera: элементная база, система проектирования и языки описания аппаратуры. М.: Додэка-XXI, 2002.
  3. Сергиенко А. Б. Цифровая обработка сигналов. СПб.: Питер, 2003.
  4. Айфичер Э. С., Джервис Б. У. Цифровая обработка сигналов: практический подход, 2-е издание / Пер. с англ. М.: Вильямс, 2004.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *