Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Simulink, фильтр первого порядка и реальность
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
_Ivan_33
Добрый день.

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

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

Вообще у меня такое чувство, что я здесь чего то недопонимаю и в моих рассуждениях где-то есть ошибка. Помогите пожалуйста.
Swup
У вас ведь цифровой БИХ-фильтр , верно? Значит он обрабатывает цифровой поток с какой-то частотой дискретизации.

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

А маршрут примерно такой:
1. определяетесь с характеристиками;
2. создаете псевдо-непрерывную модель;
3. в этом же файле модели создаете полностью реализуемую цифровую модель( частота дискретизации, представление чисел, конвееризацию, все вот это вот), и сравниваете результаты;
4. переносите цифровую модель в плис. фактически это гарантирует вам отсутствие алгоритмических ошибок.

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

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

Давайте по порядку
Вот у меня нарисована модель, там Нажмите для просмотра прикрепленного файла
На осциллографе вижу такое Нажмите для просмотра прикрепленного файла


Ну фильтрует, да... Это все было, когда в источниках синуса было sample time -1
Затем пытаюсь сделать все дискретно
Ставлю sample time в источниках синуса 0.0001
Моделька такая Нажмите для просмотра прикрепленного файла

Результат такой Нажмите для просмотра прикрепленного файла

Тоже фильтрует и вроде даже сходится с первым вариантом...
По сему вопросов несколько:
1) при использовании discrete filter который с z, у меня возникает на осциллографе белиберда, а он же тоже должен фильтровать... Где я могу ошибиться?
2) solver в дискретной симуляции использовать дискретный? или континиус тоже пойдет?
3) в дискретной симуляции не могу сравнить два фильтра - свой и библиотечный, а в континиус моя реализация работает!!!!! Как сравнить?
Нажмите для просмотра прикрепленного файла
Эта последняя картинка сравнения моего фильтра, библиотечного и осциллограмма входного сигнала в непрерывных сигналах...


Модель симулинка http://rghost.ru/8fy79lYVd
Swup
Я немного посмотрел, но нет особо времени разбираться, пора домой, пятница как ни как.

возникает не белиберда, а фильтр в неустойчивом состоянии, он автогенерирует, если можно так сказать.
Я не силен в этой теме, но мне кажется что нельзя коэффициенты из формы Лапласа просто так перенести в Z-форму. Как-то коэффициенты должны измениться. Хотя могу ошибаться.
Grizzzly
Полностью не разбирался в вашей проблеме. Скажу лишь про синтез цифрового фильтра. Для получения цифрового фильтра из аналогового прототипа необходимо использовать билинейное преобразование. Какая у вас частота дисретизации? Судя по sample time, 10 кГц. Тогда как-то так:
Код
[numd,dend] = bilinear(1, [0.02 1], 1e4)

Почитайте про билинейное преобразование и посмотрите похожий на ваш пример: http://dsp.stackexchange.com/questions/113...r-transformatio
Вы уверены, что у вас такая узкая полоса должна быть? Всего около 8 Гц получается.
_Ivan_33
Фильтр разрабатывал не я. Так что уверен. Частоту дискретизации взял наобум, в реальном железе она другая. И собственно судя по алгоритмам фильтр убивает ВЧ помехи
Grizzzly
Ну тогда рассчитайте с помощью билинейного преобразования цифровой фильтр на требуемую частоту дискретизации, попутно проверив на всякий случай его устойчивость (fvtool(numd,dend)), и повторите моделирование.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.