Jump to content
    

Реализация полосового фильтра на VHDL

корректировка параметров фильтра происходит в vhdl коде

Именно так!

Share this post


Link to post
Share on other sites

Тогда последний вопрос)

Собственно если мне нужно получить полосовой фильтр, то vhdl код тоже надо подкорректировать?)) А потом туда загонять уже расчитаные коэффициенты из матлаба?

Share this post


Link to post
Share on other sites

Собственно если мне нужно получить полосовой фильтр, то vhdl код тоже надо подкорректировать?)) А потом туда загонять уже расчитаные коэффициенты из матлаба?

Зачем? Изменяй m-файл! Я же тебе даже примерно написал, что нужно изменять всообщении. И нажимай Run. Далее пихай VHDL-файл в свой проект, предварительно протестив.

Share this post


Link to post
Share on other sites

С матлабом все нормально) Переписал согласно форуму, чтоб было для полосового фильтра, параметры я подобрал для фильтра полосового, ачх получил требуемое) Беда в том что он не создает потом vhdl файл.

Share this post


Link to post
Share on other sites

Беда в том что он не создает потом vhdl файл.

Как вы это определили? Matlab в командном окне выводит какое-нибудь сообщение?

Share this post


Link to post
Share on other sites

??? 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));

 

Собственно эту ошибку выдает. Хотя ачх строит.

Share this post


Link to post
Share on other sites

Доброго времени суток. Написал тестбенч для бих фильтра,а на выходе фильтра 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. Если кто-то сделал лучше, пусть не только заявит об этом, но и приведет пример своей реализации. Надеюсь Вам будет полезна моя работа, успехов!

 

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...