ZED 0 January 12, 2011 Posted January 12, 2011 · Report post корректировка параметров фильтра происходит в vhdl коде Именно так! Quote Share this post Link to post Share on other sites More sharing options...
xponuk 0 January 13, 2011 Posted January 13, 2011 · Report post Тогда последний вопрос) Собственно если мне нужно получить полосовой фильтр, то vhdl код тоже надо подкорректировать?)) А потом туда загонять уже расчитаные коэффициенты из матлаба? Quote Share this post Link to post Share on other sites More sharing options...
ZED 0 January 13, 2011 Posted January 13, 2011 · Report post Собственно если мне нужно получить полосовой фильтр, то vhdl код тоже надо подкорректировать?)) А потом туда загонять уже расчитаные коэффициенты из матлаба? Зачем? Изменяй m-файл! Я же тебе даже примерно написал, что нужно изменять всообщении. И нажимай Run. Далее пихай VHDL-файл в свой проект, предварительно протестив. Quote Share this post Link to post Share on other sites More sharing options...
xponuk 0 January 13, 2011 Posted January 13, 2011 · Report post С матлабом все нормально) Переписал согласно форуму, чтоб было для полосового фильтра, параметры я подобрал для фильтра полосового, ачх получил требуемое) Беда в том что он не создает потом vhdl файл. Quote Share this post Link to post Share on other sites More sharing options...
ZED 0 January 14, 2011 Posted January 14, 2011 · Report post Беда в том что он не создает потом vhdl файл. Как вы это определили? Matlab в командном окне выводит какое-нибудь сообщение? Quote Share this post Link to post Share on other sites More sharing options...
xponuk 0 January 17, 2011 Posted January 17, 2011 · Report post ??? No appropriate method, property, or field Numerator for class dfilt.df1sos. Error in ==> Filter_FIR at 58 b_q = round(Hd.Numerator*2^(coef_size-1)); Собственно эту ошибку выдает. Хотя ачх строит. Quote Share this post Link to post Share on other sites More sharing options...
xponuk 0 January 19, 2011 Posted January 19, 2011 · Report post Всем спасибо! Разобрался заработало все отлично) Quote Share this post Link to post Share on other sites More sharing options...
bArtwin 0 July 29, 2014 Posted July 29, 2014 · Report post Доброго времени суток. Написал тестбенч для бих фильтра,а на выходе фильтра 0. Может есть у вас свой тестбенч? Короче, прилагаю свои реализации БИХ и КИХ фильтров. Там два файла 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. Если кто-то сделал лучше, пусть не только заявит об этом, но и приведет пример своей реализации. Надеюсь Вам будет полезна моя работа, успехов! Quote Share this post Link to post Share on other sites More sharing options...