_Ivan_ 0 27 марта, 2015 Опубликовано 27 марта, 2015 · Жалоба Добрый день. Пытаюсь разобраться с симулинком. Мне нужно сделать фильтр первого порядка в ПЛИС вида 1/(0.02p+1) - это по классификации типовых динамических звеньев бесколебательное 1 порядка Ему отвечает дифференциальное уравнение вида 0.02(y2-y1)/T + y1 = x Т.е. y2 = Tx/0.02 + y1(1 - T/0.02) где T это как я понимаю частота дискретизации сигнала, в моем случае он берется с ацп с некоторой частотой. Мне нужно проверить верилог код на правильность работы. Как совместить результаты верилога, если у меня с одной стороны фильтр получен в преобразовании лапласа, а в реальности будет задействована частота дискретизации, такое ощущение что они совпадать не будут... Вообще у меня такое чувство, что я здесь чего то недопонимаю и в моих рассуждениях где-то есть ошибка. Помогите пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 27 марта, 2015 Опубликовано 27 марта, 2015 · Жалоба У вас ведь цифровой БИХ-фильтр , верно? Значит он обрабатывает цифровой поток с какой-то частотой дискретизации. Как это представляется в жизни. У вас есть непрерывный сигнал и аналоговый фильтр. Фильтр характеризуется непрерывной передаточной функцией. Когда вы хотите смоделировать такую ситуацию, то вы на самом деле используете уже цифровой вариант, и сигнал у вас дискретный и передаточная функция дискретная, просто частота дискретизация по сравнению с частотой сигнала настолько большая, что не оказывает видимых искажений. Потом вы хотите получить реализуемый цифровой фильтр, тут вы должны учесть несколько факторов в частности необходимо определиться с частотой дискретизации и представлением чисел (double на плис это довольно дорого). А маршрут примерно такой: 1. определяетесь с характеристиками; 2. создаете псевдо-непрерывную модель; 3. в этом же файле модели создаете полностью реализуемую цифровую модель( частота дискретизации, представление чисел, конвееризацию, все вот это вот), и сравниваете результаты; 4. переносите цифровую модель в плис. фактически это гарантирует вам отсутствие алгоритмических ошибок. fdatool и HDL coder в помощь. Надеюсь я верно понял ваши затруднения и хоть немного помог. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivan_ 0 27 марта, 2015 Опубликовано 27 марта, 2015 · Жалоба Ну получается, чтобы посчитать следующее значение, надо использовать предыдущее - значит БИХ... Давайте по порядку Вот у меня нарисована модель, там На осциллографе вижу такое Ну фильтрует, да... Это все было, когда в источниках синуса было sample time -1 Затем пытаюсь сделать все дискретно Ставлю sample time в источниках синуса 0.0001 Моделька такая Результат такой Тоже фильтрует и вроде даже сходится с первым вариантом... По сему вопросов несколько: 1) при использовании discrete filter который с z, у меня возникает на осциллографе белиберда, а он же тоже должен фильтровать... Где я могу ошибиться? 2) solver в дискретной симуляции использовать дискретный? или континиус тоже пойдет? 3) в дискретной симуляции не могу сравнить два фильтра - свой и библиотечный, а в континиус моя реализация работает!!!!! Как сравнить? Эта последняя картинка сравнения моего фильтра, библиотечного и осциллограмма входного сигнала в непрерывных сигналах... Модель симулинка http://rghost.ru/8fy79lYVd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 27 марта, 2015 Опубликовано 27 марта, 2015 · Жалоба Я немного посмотрел, но нет особо времени разбираться, пора домой, пятница как ни как. возникает не белиберда, а фильтр в неустойчивом состоянии, он автогенерирует, если можно так сказать. Я не силен в этой теме, но мне кажется что нельзя коэффициенты из формы Лапласа просто так перенести в Z-форму. Как-то коэффициенты должны измениться. Хотя могу ошибаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 27 марта, 2015 Опубликовано 27 марта, 2015 (изменено) · Жалоба Полностью не разбирался в вашей проблеме. Скажу лишь про синтез цифрового фильтра. Для получения цифрового фильтра из аналогового прототипа необходимо использовать билинейное преобразование. Какая у вас частота дисретизации? Судя по sample time, 10 кГц. Тогда как-то так: [numd,dend] = bilinear(1, [0.02 1], 1e4) Почитайте про билинейное преобразование и посмотрите похожий на ваш пример: http://dsp.stackexchange.com/questions/113...r-transformatio Вы уверены, что у вас такая узкая полоса должна быть? Всего около 8 Гц получается. Изменено 27 марта, 2015 пользователем Grizzzly Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivan_ 0 28 марта, 2015 Опубликовано 28 марта, 2015 · Жалоба Фильтр разрабатывал не я. Так что уверен. Частоту дискретизации взял наобум, в реальном железе она другая. И собственно судя по алгоритмам фильтр убивает ВЧ помехи Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 28 марта, 2015 Опубликовано 28 марта, 2015 · Жалоба Ну тогда рассчитайте с помощью билинейного преобразования цифровой фильтр на требуемую частоту дискретизации, попутно проверив на всякий случай его устойчивость (fvtool(numd,dend)), и повторите моделирование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться