Как построить АЧХ цифрового фильтра выполненного на ПЛИС

Программирование конфигурационной ПЗУ EPCSПостроить АЧХ цифрового фильтра несложно если использовать Matlab. Но как построить АЧХ цифрового фильтра, который находится в реальном железе, например в ПЛИС? Можно например приладить к ПЛИС АЦП и ЦАП, подавать на вход нужную частоту, пошагово изменяя ее регистрировать средний положительный уровень сигнала на выходе ЦАП и по точкам строить кривую. На мой взгляд все это достаточно муторно. Ведь вполне можно обойтись и без АЦП и ЦАП если использовать цифровой формирователь гармонического сигнала на базе фазового накопителя. В ПЛИС фирмы Altera это компонент NCO.

Как все можно сделать? Один из возможных вариантов - подавать на цифровой вход цифрового фильтра выход данных NCO пошагово меняя его выходную частоту за счет коэффициента инкремента фазы (Phase Increment Value). А результаты свертки по выборкам передавать на компьютер по любому возможному интерфейсу rs232, USB или даже Ethernet. Задача персонального компьютера - принять заданное количество данных через заданный конкретный промежуток времени (например 0.5... 5 сек), вычислить среднее положительное значение и отобразить его в относительных величинах на графике.

Для того, чтобы опробовать на практике задуманное можно воспользоваться отладочной платой от Terasic типа DE0Nano. Для обмена данными между ПЛИС и персональным компьютером вполне подойдет интерфейс Ethernet выполненный на базе процессора Nios II. Далее все как описано выше. Компьтер с помощью небольшой тестовой программы созданной на C++Builder посылает по интерфейсу Ethernet на модуль DE0Nano, в котором скофигурирован цифровой фильтр и модуль NCO, короткий пакет в котором в одном из байтов указан номер посылки. Программа Nios анализирует посланный пакет и отправляет в свою очередь на модуль NCO 32_х битный код частоты, которую он должен сформировать для подачи на фильтр. Одновременно с этим производится запуск фильтра с передачей результатов оцифровки с помощью SG-DMA в SDRAM подключенную к процессору Nios II. При заполнениии нужного количества памяти результатами выборок, обычно 1000...3000 производится останов оцифровки и передача результатов работы фильтра на персональный копьютер по тому же интерфейсу Ethernet.

Теперь тестовая программа производит простейшую обработку принятых данных осредняя их положительные значения и выводит точку на график. Далее все повторяется, только со сменой на один шаг частоты формируемой модулем NCO, например на 1кГц. Таким образом через выбранное количество шагов на экране компа будет нарисована амплитудно частотная характеристика цифрового фильтра. Для наглядности картинка ниже по тексту. На ней показана АЧХ полосового фильтра (децимирование на 5) с центральной частотой 450кГц и полосой 430...470кГц.

При большем количестве выборок картинка будет выглядеть почти идеально. Конечно желательно такую систему сделать универсальной для любого типа ПЛИС. Для этого можно поступить следующим образом: Интерфейс поменять на UART, модуль NCO выполнить в виде открытого проекта на VHDL (VERILOG), данные оцифровки заносить в обычную двухпортовую память, которая синтезируется практически в любой современной ПЛИС_ине. Качели с пуском фильтра и выдачей на комп данных остаются прежними. Это позволит создать проект встраиваемый практически в любую ПЛИС с помощью которого можно на базе реального железа быстро без шума и пыли просмотреть АЧХ любого цифрового фильтра. Ну а комповую прогу нужно будет выполнить с возможностью настройки под любые возможные варианты фильтров и частот. У кого какие предложения и замечания просьба пройти по ссылке для добавления комментов.

Top.Mail.Ru