Перейти к содержанию
    

"Универсальный" БИХ-фильтр на 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, представленного на рисунке выше, так и всего проекта. Как в дружбу так и в службу(за деньдюшки).

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

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

Изменено пользователем fantom4ik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Изменено пользователем alexadmin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...