Перейти к содержанию
    

Simulink, фильтр первого порядка и реальность

Добрый день.

 

Пытаюсь разобраться с симулинком. Мне нужно сделать фильтр первого порядка в ПЛИС вида 1/(0.02p+1) - это по классификации типовых динамических звеньев бесколебательное 1 порядка

Ему отвечает дифференциальное уравнение вида 0.02(y2-y1)/T + y1 = x

Т.е. y2 = Tx/0.02 + y1(1 - T/0.02)

где T это как я понимаю частота дискретизации сигнала, в моем случае он берется с ацп с некоторой частотой.

 

Мне нужно проверить верилог код на правильность работы. Как совместить результаты верилога, если у меня с одной стороны фильтр получен в преобразовании лапласа, а в реальности будет задействована частота дискретизации, такое ощущение что они совпадать не будут...

 

Вообще у меня такое чувство, что я здесь чего то недопонимаю и в моих рассуждениях где-то есть ошибка. Помогите пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас ведь цифровой БИХ-фильтр , верно? Значит он обрабатывает цифровой поток с какой-то частотой дискретизации.

 

Как это представляется в жизни. У вас есть непрерывный сигнал и аналоговый фильтр. Фильтр характеризуется непрерывной передаточной функцией.

Когда вы хотите смоделировать такую ситуацию, то вы на самом деле используете уже цифровой вариант, и сигнал у вас дискретный и передаточная функция дискретная, просто частота дискретизация по сравнению с частотой сигнала настолько большая, что не оказывает видимых искажений.

Потом вы хотите получить реализуемый цифровой фильтр, тут вы должны учесть несколько факторов в частности необходимо определиться с частотой дискретизации и представлением чисел (double на плис это довольно дорого).

 

А маршрут примерно такой:

1. определяетесь с характеристиками;

2. создаете псевдо-непрерывную модель;

3. в этом же файле модели создаете полностью реализуемую цифровую модель( частота дискретизации, представление чисел, конвееризацию, все вот это вот), и сравниваете результаты;

4. переносите цифровую модель в плис. фактически это гарантирует вам отсутствие алгоритмических ошибок.

 

fdatool и HDL coder в помощь.

 

Надеюсь я верно понял ваши затруднения и хоть немного помог.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну получается, чтобы посчитать следующее значение, надо использовать предыдущее - значит БИХ...

 

Давайте по порядку

Вот у меня нарисована модель, там post-36928-1427467906_thumb.png

На осциллографе вижу такое post-36928-1427467938_thumb.png

 

 

Ну фильтрует, да... Это все было, когда в источниках синуса было sample time -1

Затем пытаюсь сделать все дискретно

Ставлю sample time в источниках синуса 0.0001

Моделька такая post-36928-1427468673_thumb.png

 

Результат такой post-36928-1427468693_thumb.png

 

Тоже фильтрует и вроде даже сходится с первым вариантом...

По сему вопросов несколько:

1) при использовании discrete filter который с z, у меня возникает на осциллографе белиберда, а он же тоже должен фильтровать... Где я могу ошибиться?

2) solver в дискретной симуляции использовать дискретный? или континиус тоже пойдет?

3) в дискретной симуляции не могу сравнить два фильтра - свой и библиотечный, а в континиус моя реализация работает!!!!! Как сравнить?

post-36928-1427469300_thumb.png

Эта последняя картинка сравнения моего фильтра, библиотечного и осциллограмма входного сигнала в непрерывных сигналах...

 

 

Модель симулинка http://rghost.ru/8fy79lYVd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я немного посмотрел, но нет особо времени разбираться, пора домой, пятница как ни как.

 

возникает не белиберда, а фильтр в неустойчивом состоянии, он автогенерирует, если можно так сказать.

Я не силен в этой теме, но мне кажется что нельзя коэффициенты из формы Лапласа просто так перенести в Z-форму. Как-то коэффициенты должны измениться. Хотя могу ошибаться.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Полностью не разбирался в вашей проблеме. Скажу лишь про синтез цифрового фильтра. Для получения цифрового фильтра из аналогового прототипа необходимо использовать билинейное преобразование. Какая у вас частота дисретизации? Судя по sample time, 10 кГц. Тогда как-то так:

[numd,dend] = bilinear(1, [0.02 1], 1e4)

Почитайте про билинейное преобразование и посмотрите похожий на ваш пример: http://dsp.stackexchange.com/questions/113...r-transformatio

Вы уверены, что у вас такая узкая полоса должна быть? Всего около 8 Гц получается.

Изменено пользователем Grizzzly

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Фильтр разрабатывал не я. Так что уверен. Частоту дискретизации взял наобум, в реальном железе она другая. И собственно судя по алгоритмам фильтр убивает ВЧ помехи

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну тогда рассчитайте с помощью билинейного преобразования цифровой фильтр на требуемую частоту дискретизации, попутно проверив на всякий случай его устойчивость (fvtool(numd,dend)), и повторите моделирование.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...