реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Реализация полосового фильтра на VHDL, Поделитесь опытом пожалуйста)
xponuk
сообщение Dec 23 2010, 06:17
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 22-12-10
Пользователь №: 61 792



День добрый!

Собственно начал изучать недавно Quartus II с VHDL.
Вопрос состоит в том, как лучше реализовать низко добротный полосовой фильтр с помощью VHDL?
Имеется его реализация на плате и рассчитанная для него передаточная функция в MatLab.
Где лучше почитать или посмотреть об этом?
В целом очень нужен совет с чего лучше начать)

В заранее спасибо!
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Dec 23 2010, 07:35
Сообщение #2


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(xponuk @ Dec 23 2010, 11:17) *

Сгенерите в матлабе исходник на VHDL,изучите его структуру и подумайте - можно ли сделать лучше. cool.gif
Go to the top of the page
 
+Quote Post
hobgoblin
сообщение Dec 23 2010, 07:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 2-10-06
Из: Петербург
Пользователь №: 20 881



ИМХО исходник, который генерит Матлаб - абсолютное зло для человека, который только начал разбираться в VHDL biggrin.gif . Не знаю, как для обычного FIR фильтра, но когда я увидел исходник для полифазного, то немного подофигел.
Может быть топикстартеру имеет смысл поискать в сети книгу Uwe Meyer-Baese "Digital Signal Processing with Field Programmable Gate Arrays". Не помню были там примеры на VHDL или Verilog, Но это не суть важно. Важнее определиться как будет ложиться структура фильтра на структуру FPGA. Здесь наверное пригодится часть из Stratix Device Hadbook, посвященная DSP: http://www.altera.com/literature/hb/stx/st...ion_4_vol_2.pdf.
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Dec 23 2010, 07:47
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



При реализации фильтров через fdatool Matlab'а не делаю экспорт в HDL, а тычу "реализовать модель" в графике, смотрю там все задержки, коэффициенты, сумматоры и уж потом это описываю так, как мне удобно.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Dec 23 2010, 07:47
Сообщение #5


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(hobgoblin @ Dec 23 2010, 12:43) *


А я не зря сказал можно ли сделать лучше. rolleyes.gif

Для простого КИХ там ничего страшного нет, только очень уж неоптимально.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Dec 23 2010, 09:38
Сообщение #6


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(xponuk @ Dec 23 2010, 11:17) *
День добрый!

Собственно начал изучать недавно Quartus II с VHDL.
Вопрос состоит в том, как лучше реализовать низко добротный полосовой фильтр с помощью VHDL?
Имеется его реализация на плате и рассчитанная для него передаточная функция в MatLab.
Где лучше почитать или посмотреть об этом?
В целом очень нужен совет с чего лучше начать)

В заранее спасибо!

попробуйте вот это

там в общем про это рассказано... и кажется даже пример приведен


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
xponuk
сообщение Dec 24 2010, 07:25
Сообщение #7





Группа: Участник
Сообщений: 11
Регистрация: 22-12-10
Пользователь №: 61 792



За книгу отдельное спасибо, попробую изучить)
На счет генерирования в матлабе исходник на VHDL, вопрос наверно глупый но чем генерировать? Слышал про программу альтеры dsp builder, но работать она отказалась требуя лицензию, а собственно откуда у студента деньги на лицензию) Иль там каким другим способом можно код получить?
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Dec 24 2010, 07:40
Сообщение #8


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(xponuk @ Dec 24 2010, 12:25) *
За книгу отдельное спасибо, попробую изучить)
На счет генерирования в матлабе исходник на VHDL, вопрос наверно глупый но чем генерировать? Слышал про программу альтеры dsp builder, но работать она отказалась требуя лицензию, а собственно откуда у студента деньги на лицензию) Иль там каким другим способом можно код получить?


В FDA Tool матлаба есть меню Targets/Generate HDL,запускаете после реализации фильтра с нужными параметрами,предварительно проквантовав фильтр.
Go to the top of the page
 
+Quote Post
hobgoblin
сообщение Dec 24 2010, 08:35
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 2-10-06
Из: Петербург
Пользователь №: 20 881



Второй вариант: Для объектов dfilt или mfilt функция
GENERATEHDL Generate HDL.
GENERATEHDL(Hb) automatically generates VHDL or Verilog code for
the quantized filter, Hb. The default language is VHDL; to generate
Verilog, supply the property/value pair 'TargetLanguage','Verilog'.
The default file name is the name of the filter variable, e.g.
Hb.vhd for VHDL and Hb.v for Verilog. The file is written to
the HDL source directory which defaults to 'hdlsrc' under the
current directory. This directory will be created if necessary.
Go to the top of the page
 
+Quote Post
ZED
сообщение Dec 26 2010, 06:49
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 264
Регистрация: 17-04-07
Из: Москва
Пользователь №: 27 102



Цитата
ИМХО исходник, который генерит Матлаб - абсолютное зло для человека, который только начал разбираться в VHDL

Абсолютно с Вами согласен.

xponuk, Вы определитесь пожалуйста какой Вы фильтр хотите получить БИХ или КИХ.
Go to the top of the page
 
+Quote Post
ZED
сообщение Dec 27 2010, 06:28
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 264
Регистрация: 17-04-07
Из: Москва
Пользователь №: 27 102



Короче, прилагаю свои реализации БИХ и КИХ фильтров. Там два файла Matlab/ В каждом из них сначала задаются параметры фильтра, потом вычисляются коэффициенты, далее генерируется VHDL-код. Выходной файл имеет название Filter.vhdl Откроете его и посмотрите как все реализовано.
Замечание: БИХ-фильтр реализован в виде секций 2-ого порядка. Еще одно важное замечание, фильтры не полосовые, а ФНЧ! Чтобы получить полосовой фильтр, нужно изменить Matlab'овский файл, а именно его начало на:
Код
clear all
clc

Fs = 500*1000;  % Частота дискретизации

data_size = 16; % Разрядность данных
coef_size = 16; % Разрядность коэффициентов

Fstop1 = 5*10;      % Начало полосы задерживания
Fpass1 = 1*1000;     % Начало полосы пропускания
Fpass2 = 50*1000;     % Конец полосы пропускания
Fstop2 = 51*1000;     % Конец полосы задерживания
Astop1 = 60;      % Ослабление в полосе задерживания (дБ)
Apass  = 1;       % Уровень пульсаций в полосе пропускания (дБ)
Astop2 = 60;      % Ослабление в полосе задерживания (дБ)
match  = 'both';  % Оптимизация по уровню пульсаций (Оптимизировать в полосе пропускания и в полосе задерживания)

% Синтез Фильтра:
h  = fdesign.bandpass(Fstop1, Fpass1, Fpass2, Fstop2, Astop1, Apass, Astop2, Fs);
Hd = design(h, 'ellip', 'MatchExactly', match);

% Преобразование в секции второго порядка:
Hd = convert(Hd, 'df1sos');

% Установка свойств арифметики с фиксированной запятой

set(Hd, 'Arithmetic', 'fixed', ...
    'CoeffWordLength', coef_size, ...
    'CoeffAutoScale', true, ...
    'ProductMode', 'Fullprecision', ...
    'AccumMode', 'KeepMSB', ...
    'AccumWordLength', 40, ...
    'NumStateWordLength', data_size, ...
    'DenStateWordLength', data_size, ...
    'NumStateFracLength', data_size - 1, ...
    'DenStateFracLength', data_size - 1, ...
    'InputWordLength', data_size, ...
    'inputFracLength', data_size - 1, ...
    'OutputWordLength', data_size, ...
    'OutputMode', 'AvoidOverflow', ...
    'signed',        true, ...
    'RoundMode',     'convergent', ...
    'OverflowMode',  'Saturate', ...
    'CastBeforeSum', false);
denormalize(Hd);

%% АЧХ фильтра
[b_sos, a_sos] = sos2tf(Hd.sosMatrix, Hd.ScaleValues); % Преобразование секций второго порядка в коэффициенты числителя и знаменателя
[h_sos, f_sos] = freqz(b_sos, a_sos, 2048); % Построение АЧХ фильтра по коффициентам числителя и знаменателя


Важно! Мои примеры не претендуют на роль единственно верных. Просто мне особо никто не бодсказывал и до всего этого я дошел сам, ковыряясь с примерами от Simulink'a. В итоге получилось это. Надо сказать, что моя реализация работает быстрее, чем реализация от Simulink. Если кто-то сделал лучше, пусть не только заявит об этом, но и приведет пример своей реализации. Надеюсь Вам будет полезна моя работа, успехов!
Прикрепленные файлы
Прикрепленный файл  Altera_Filter.rar ( 4.21 килобайт ) Кол-во скачиваний: 94
 
Go to the top of the page
 
+Quote Post
xponuk
сообщение Jan 11 2011, 09:48
Сообщение #12





Группа: Участник
Сообщений: 11
Регистрация: 22-12-10
Пользователь №: 61 792



Собственно говоря хочу получить код Vhdl для БИХ фильтра ( фильтр полосовой ), низко добротного (добротность где то 2), с резонансной частотой 10 000 Гц в принципе больше требований нет принципиальных.

Уважаемый Zed, можно попросить Вас немного пояснить как собственно программы данные запускаются, честно не понял, попробовал через симулинк не вышло, какой блок ее вызывает?. И собственно vhdl код насколько я понимаю Вы получаете с помощью встроенного в матлаб кодера?
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Jan 11 2011, 11:46
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(xponuk @ Jan 11 2011, 15:48) *
Собственно говоря хочу получить код Vhdl для БИХ фильтра ( фильтр полосовой ), низко добротного (добротность где то 2), с резонансной частотой 10 000 Гц в принципе больше требований нет принципиальных.

Для Ваших требований - открывайте хелп и смотрите, какие полосовые фильтры есть и какие у них есть параметры.
Все вот это
Код
clear all
clc
Fs = 500*1000;  % Частота дискретизации
data_size = 16; % Разрядность данных
coef_size = 16; % Разрядность коэффициентов

вводится прямо в окне матлаб (как Вам уже сказали все эти параметры для конкретного случая). В нем же можно ввести для данной реализации функцию generatehdl (все параметры, так же как и язык реализации подробно описаны в хелпе) созданного объекта Hd. В результате получите созданный объект на требуемом языке.
Go to the top of the page
 
+Quote Post
ZED
сообщение Jan 12 2011, 05:46
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 264
Регистрация: 17-04-07
Из: Москва
Пользователь №: 27 102



Цитата
Уважаемый Zed, можно попросить Вас немного пояснить как собственно программы данные запускаются, честно не понял, попробовал через симулинк не вышло, какой блок ее вызывает?

Ну во-первых это файлы с расширением *.m, значит они Matlab'овские. Т.е. открываеть его нужно в Matlab, а не Simulink. Далее нажимаете запуск (Run) и на диске C у вас появится файл с названием filter.vhd.
Цитата
И собственно vhdl код насколько я понимаю Вы получаете с помощью встроенного в матлаб кодера?

Нет с помощью Matlab'а я получаю коэффициенты фильтра с заданными характеристиками и перевожу их в дополнительный код. Также мой Matlab'овский файл содержит "скелет" VHDL-кода, написанного мной, куда просто подставляются коэффициенты. Далее этот код записывается в файл C:\filter.vhd. Когда откроете файл Вы все поймете, там достаточно комментариев. Если что-то не понятно, спрашивайте. Успехов!

P.S. Также вы можете менять параметры фильтра: полосу пропускания, частоту дискретизации, неравномеерность в полосе пропускания и т.д. Затем Вы снова нажимаете Run и получаете новый файл filter.vhd уже с новыми параметрами (коэффициентами).
Go to the top of the page
 
+Quote Post
xponuk
сообщение Jan 12 2011, 09:38
Сообщение #15





Группа: Участник
Сообщений: 11
Регистрация: 22-12-10
Пользователь №: 61 792



Возникла проблема с программой. Собственно поменял код, для полосового фильтра, получил его АЧХ в матлабе, но vhdl код не создается. Собственно с чем это может быть связано? Или я не так понял и корректировка параметров фильтра происходит в vhdl коде?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 11:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01604 секунд с 7
ELECTRONIX ©2004-2016