Jump to content
    

"Универсальный" БИХ-фильтр на FPGA

Зравствуйте, товарищи. Нужна Ваша помощ (очень-очень сильно). Занимаюсь написанием диплома по выше указанной теме. Универсальность фильтра состоит в следующем:

1. Перезагружаемые коэффициенты

2. Выбор порядка фильтра

Теории налил достаточно, проделал работу в MatLab. Вообщем, воды хватает. Для окончания работы осталось описать выбранную структурную схему на VHDL и создать test-bench. Все это для Vertex-II из-за наличия аппартных умножителей 18Х18.

БИХ-фильтр задуман как последовательное соединение звеньев 2-го порядка (максимальный порядок N=12). MatLab позволяет расчитать матрицу коэффициентов именно для такого порядка фильтра. Выбрано звено 2-го порядка: post-34480-1201491807_thumb.jpg

Это общая структурная схема (моя).

post-34480-1201491266_thumb.jpg

В ее целесообразности я не уверен.

 

Вот некоторые задумки.

 

1. Последовательность ввода данных следующая:

=> ввод порядка фильтра за такт в параллельном коде

=> ввод коэффициентов звеньев в параллельном коде (максимум за 30 тактов т.к. максимальный порядок фильтра 12, следовательно 6 звеньев 2-го порядка по 5 коэффициентов в каждом)

=> отсчеты входного сигнала с АЦП также поступают в параллельном коде.

 

Синтезируется счётчик для тактирования ввода данных:

process(clk)

begin

if rising _edge(clk) then

takt = takt +1;

if (takt=1) then

porydok <= data

else if ((takt>1) and (takt<52)) then

'далее присвоение коэффициентов'

else if (takt>51) then

'входные отсчеты (отсчет за такт с АЦП)'

 

Я так понимаю, что проще работать с целыми числами, поэтому перед вводом коэффициентов необходимо домножать их например, на 1024, а выходной сигнал с фильтра сдвигать на 10 отсчетов.

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

 

Мои сложности:

1. Слабое представление об Xilinx ISE и VHDL.

2. Сроки сжаты.

Прошу помощи как реализации звена 2-го порядка на VHDL, представленного на рисунке выше, так и всего проекта. Как в дружбу так и в службу(за деньдюшки).

Если здесь так не принято (я совсем новичок), прошу прощения и и жду советов по работе.

Спасибо. С уважением ко всем прочитавшим, я.

Edited by fantom4ik

Share this post


Link to post
Share on other sites

С фиксированной точкой универсальным БИХ фильтр никогда не будет. Разве что с плавающей. Ну для студенческого сойдет, точите язык для дискуссий. 18х18 умножителей у меня иногда не хватало для работы с 12разрядными входными данными. Реализация видна в МАТЛАБЕ. Открываете Filter designer-проектируете фильтр-затем слева нажимаете Realize model - ставите галочку build model using basic elements- - нажимаете realize model. открывается новое окно Simulinka. там икона вашего фильтра двойной клик но ней и Вы увидете схему с разрядами.

Да - там еще была на уровне Filter designer иконка - set quantanization parameters - ее тоже надо выбрать и в ней выбрать параметры.

Share this post


Link to post
Share on other sites

Можно попробовать AcselDSP или SystemGenerator которые позволяют генерировать код (VHDL Verilog) из Matlab

Share this post


Link to post
Share on other sites

Можно попробовать AcselDSP или SystemGenerator которые позволяют генерировать код (VHDL Verilog) из Matlab

 

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

Edited by alexadmin

Share this post


Link to post
Share on other sites

Можно попробовать AcselDSP или SystemGenerator которые позволяют генерировать код (VHDL Verilog) из Matlab

Так ведь сам MATLAB, в частности и fdatool позволяют генерировать HDL код.

fdatool: меню Targets->Generate HDL.

fdatool не позводяеь делать презагружаемые коэффициенты, но это можно сделать в SIMULINK, у которого тоже есть Simulink HDL coder.

Share this post


Link to post
Share on other sites

Действительно, матлаб умеет сам генерировать чистый синтезируемый код фильтров, а блок для ввода нужных коэффициентов написать самостоятельно (можно даже в том же матлаб - Embedded Matlab Function) Насчет универсальности БИХ-фильтра не так все просто, как с КИХ-фильтрами. Можете также добавить в диплом анализ устойчивости вашего (довольно длинного) БИХ-фильтра, учета конечной разрядности, анализ на шумы квантования.

Share this post


Link to post
Share on other sites

Разрядность БИХ фильтра и его устойчивость получаются очень тесно связаны. А при увеличении разрядности понижается общая максимальная частота работы схемы.

Share this post


Link to post
Share on other sites

Спасибо за советы коллеги ). Буду пробовать FDATool. О результатах сообщу уже под утро. Пока не очень получается с тест-бенчем для MATLAB чтобы посмореть на результаты фильтрации. Как это грамотно сделать для сгенеренного фильтра? Т.е. хочется посмотреть как скомпиленный ТБ в симулинке пройдет через сгенеренный блок фильтра! А еще не понял как подгружать коэффициенты в МАТЛАБЕ в блок фильтра.

Share this post


Link to post
Share on other sites

А вообще решил усоренными темпами освоить VERILOG :wacko: ... И на нем описать свой проект. :07: А то адекватно на fdatool не получается :crying: Вернее, он по своему делат (своё звено 2-го порядка) да код страшный какой-то. Жду помощи! :help:

Share this post


Link to post
Share on other sites

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

Код может казаться страшным, если не знать какую структуру БИХ-фильтра реализует HDL-кодер. Наберите в матлабе команду "doc dfilt.df2sos" или "dfilt.df2tsos" - откроется подробная схема реализации секции 2-го порядка (из пакета Filter Design Toolbox). Про структуры реализации БИХ-фильтров лучше всего почитать какую-нибудь книгу по ЦОС (например Айфичер Э. Джервис Б. Цифровая обработка сигналов - 562-я страница и далее). Не все структуры одинаково полезны. По вашей картинке если честно не понял что у вас за структура.

Share this post


Link to post
Share on other sites

Есть такая программка. Генерирует VHDL код БИХ фильтра для FPGA Xilinx.

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

В программе встроенный симулятор фильтра с частотным анализом.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...