Jump to content

    
Sign in to follow this  
xponuk

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

Recommended Posts

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

Собственно если мне нужно получить полосовой фильтр, то 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

Доброго времени суток. Написал тестбенч для бих фильтра,а на выходе фильтра 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.

Sign in to follow this