xponuk 0 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба День добрый! Собственно начал изучать недавно Quartus II с VHDL. Вопрос состоит в том, как лучше реализовать низко добротный полосовой фильтр с помощью VHDL? Имеется его реализация на плате и рассчитанная для него передаточная функция в MatLab. Где лучше почитать или посмотреть об этом? В целом очень нужен совет с чего лучше начать) В заранее спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба Сгенерите в матлабе исходник на VHDL,изучите его структуру и подумайте - можно ли сделать лучше. B) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hobgoblin 0 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба ИМХО исходник, который генерит Матлаб - абсолютное зло для человека, который только начал разбираться в VHDL . Не знаю, как для обычного 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EvgenyNik 0 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба При реализации фильтров через fdatool Matlab'а не делаю экспорт в HDL, а тычу "реализовать модель" в графике, смотрю там все задержки, коэффициенты, сумматоры и уж потом это описываю так, как мне удобно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба А я не зря сказал можно ли сделать лучше. :rolleyes: Для простого КИХ там ничего страшного нет, только очень уж неоптимально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 23 декабря, 2010 Опубликовано 23 декабря, 2010 · Жалоба День добрый! Собственно начал изучать недавно Quartus II с VHDL. Вопрос состоит в том, как лучше реализовать низко добротный полосовой фильтр с помощью VHDL? Имеется его реализация на плате и рассчитанная для него передаточная функция в MatLab. Где лучше почитать или посмотреть об этом? В целом очень нужен совет с чего лучше начать) В заранее спасибо! попробуйте вот это там в общем про это рассказано... и кажется даже пример приведен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xponuk 0 24 декабря, 2010 Опубликовано 24 декабря, 2010 · Жалоба За книгу отдельное спасибо, попробую изучить) На счет генерирования в матлабе исходник на VHDL, вопрос наверно глупый но чем генерировать? Слышал про программу альтеры dsp builder, но работать она отказалась требуя лицензию, а собственно откуда у студента деньги на лицензию) Иль там каким другим способом можно код получить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 24 декабря, 2010 Опубликовано 24 декабря, 2010 · Жалоба За книгу отдельное спасибо, попробую изучить) На счет генерирования в матлабе исходник на VHDL, вопрос наверно глупый но чем генерировать? Слышал про программу альтеры dsp builder, но работать она отказалась требуя лицензию, а собственно откуда у студента деньги на лицензию) Иль там каким другим способом можно код получить? В FDA Tool матлаба есть меню Targets/Generate HDL,запускаете после реализации фильтра с нужными параметрами,предварительно проквантовав фильтр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hobgoblin 0 24 декабря, 2010 Опубликовано 24 декабря, 2010 · Жалоба Второй вариант: Для объектов 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 26 декабря, 2010 Опубликовано 26 декабря, 2010 · Жалоба ИМХО исходник, который генерит Матлаб - абсолютное зло для человека, который только начал разбираться в VHDL Абсолютно с Вами согласен. xponuk, Вы определитесь пожалуйста какой Вы фильтр хотите получить БИХ или КИХ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 27 декабря, 2010 Опубликовано 27 декабря, 2010 · Жалоба Короче, прилагаю свои реализации БИХ и КИХ фильтров. Там два файла 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xponuk 0 11 января, 2011 Опубликовано 11 января, 2011 · Жалоба Собственно говоря хочу получить код Vhdl для БИХ фильтра ( фильтр полосовой ), низко добротного (добротность где то 2), с резонансной частотой 10 000 Гц в принципе больше требований нет принципиальных. Уважаемый Zed, можно попросить Вас немного пояснить как собственно программы данные запускаются, честно не понял, попробовал через симулинк не вышло, какой блок ее вызывает?. И собственно vhdl код насколько я понимаю Вы получаете с помощью встроенного в матлаб кодера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 11 января, 2011 Опубликовано 11 января, 2011 · Жалоба Собственно говоря хочу получить код Vhdl для БИХ фильтра ( фильтр полосовой ), низко добротного (добротность где то 2), с резонансной частотой 10 000 Гц в принципе больше требований нет принципиальных. Для Ваших требований - открывайте хелп и смотрите, какие полосовые фильтры есть и какие у них есть параметры. Все вот это clear all clc Fs = 500*1000; % Частота дискретизации data_size = 16; % Разрядность данных coef_size = 16; % Разрядность коэффициентов вводится прямо в окне матлаб (как Вам уже сказали все эти параметры для конкретного случая). В нем же можно ввести для данной реализации функцию generatehdl (все параметры, так же как и язык реализации подробно описаны в хелпе) созданного объекта Hd. В результате получите созданный объект на требуемом языке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 12 января, 2011 Опубликовано 12 января, 2011 · Жалоба Уважаемый Zed, можно попросить Вас немного пояснить как собственно программы данные запускаются, честно не понял, попробовал через симулинк не вышло, какой блок ее вызывает? Ну во-первых это файлы с расширением *.m, значит они Matlab'овские. Т.е. открываеть его нужно в Matlab, а не Simulink. Далее нажимаете запуск (Run) и на диске C у вас появится файл с названием filter.vhd. И собственно vhdl код насколько я понимаю Вы получаете с помощью встроенного в матлаб кодера? Нет с помощью Matlab'а я получаю коэффициенты фильтра с заданными характеристиками и перевожу их в дополнительный код. Также мой Matlab'овский файл содержит "скелет" VHDL-кода, написанного мной, куда просто подставляются коэффициенты. Далее этот код записывается в файл C:\filter.vhd. Когда откроете файл Вы все поймете, там достаточно комментариев. Если что-то не понятно, спрашивайте. Успехов! P.S. Также вы можете менять параметры фильтра: полосу пропускания, частоту дискретизации, неравномеерность в полосе пропускания и т.д. Затем Вы снова нажимаете Run и получаете новый файл filter.vhd уже с новыми параметрами (коэффициентами). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xponuk 0 12 января, 2011 Опубликовано 12 января, 2011 · Жалоба Возникла проблема с программой. Собственно поменял код, для полосового фильтра, получил его АЧХ в матлабе, но vhdl код не создается. Собственно с чем это может быть связано? Или я не так понял и корректировка параметров фильтра происходит в vhdl коде? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться