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

Гуру симулинка просветите что я делаю не так.

Стоит задача сделать простой кабельный модем. Функциональная схема следующая:

плис передатчик (генератор потока - скремблер - формирователь фронтов - цап-фильтр) - кабель 100-300 метров - плис приемник (фильтр - ацп - дециматор - LMS эквалайзер - временной декодер - петля по тактовой/дескремблер - VCO/ИКО)

в железе собрал проект за 1 день (кроме LMS эквалайзера), все работает данные передаются корректно, петля в захвате, полоса петли 1кгц.

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

Если вам не сложно дайте ответ на следующие вопросы:
1. Почему модель моделируется очень медленно?
2. Как корректно в симулнике моделировать аналоговые цепи вида ЦАП-фильтр - модель кабеля (фильтр) - фильтр - АЦП?
3. Как корректно моделировать АЦП, который работает от подстаиваемого ГУН (Zero Order Hold в Enable Subsytem все равно требует задания Sample Time)?
4. Как перенести корректно типы в модели с double в типы, которые используются в проекте. Особенно интересуют петли, иначе такая модель не показательна. В модели 06 я изменил все типы на типы проекта, но так и не понял как корректно выкусить 12 старших бит из 32 на выходе петлевого фильтра, что бы матлаб считал результат как sint12?
5. Как корректно описывать временные декодеры, на подобие тех, что у меня в проекте?

Копаюсь уже вторую неделю и все больше прихожу к мысли что для аппаратной разработки модемов нужно использовать мосты ХДЛ симулятор-симулинк, а не чистый симулинк. А то тривиальные временные вещи (тот же временной декодер) описываются через одно место. И ведь по сути модем разрабатывается 2 раза, сначала нарисовать все в симулинке, потом ручками перебить в хдл.

Спасибо.
litv
Прикольно Вас читать. Обычно сначала делаю модель на simulink , затем в Xilinx System generator(от тоже в Simulinke но своя библиотека и транслятор в Xilinx). Затем сразу ВСЁ работает. Если у Вас сначала Vhdl и работает - нафиг Вам simulink?
"Сделал все на double" - чисто идеальное моделирование. В жизни разрядность и шумы.
Модели АЦП (а может и ЦАП) есть на сайте analog device. Их можно вставить в матлаб.
При моделировании вместо Normal нажмите Accelerator - будет быстрее.
Чем меньше пишите в Scopы и чем меньше scopov- быстрее скорость моделирования.
Медленно моделируется - а куда спешить и где моделировать быстрее - только на С.
des00
Цитата(litv @ Mar 5 2009, 01:39) *
Прикольно Вас читать. Обычно сначала делаю модель на simulink , затем в Xilinx System generator(от тоже в Simulinke но своя библиотека и транслятор в Xilinx). Затем сразу ВСЁ работает. Если у Вас сначала Vhdl и работает - нафиг Вам simulink?


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

Цитата
Модели АЦП (а может и ЦАП) есть на сайте analog device. Их можно вставить в матлаб.
При моделировании вместо Normal нажмите Accelerator - будет быстрее.


спасибо посмотрю

Цитата
Чем меньше пишите в Scopы и чем меньше scopov- быстрее скорость моделирования.
Медленно моделируется - а куда спешить и где моделировать быстрее - только на С.


5 минут на 2-4 обновления ошибки в петле, это уже слишком, быстрее в железе посмотреть.
disel
Цитата(litv @ Mar 5 2009, 10:39) *
Модели АЦП (а может и ЦАП) есть на сайте analog device. Их можно вставить в матлаб.


А можно поподробнее? Какого типа модель можно вставить в матлаб? Я только ибисы на сайте аналога видел.
litv
"решил начать работать как правильные люди, но когда через неделю не получилось добиться результатов, отложил матлаб и запустил систему в железе."
Неделю - то вовсе немного. Матлаб можно учить всю жизнь biggrin.gif
Я матлаб учу с 2000 года и не считаю что хорошо разобрал.
По поводу того что можно смотреть быстрее в железе - это был бы лучший способ - Но это когда проект уже работает. Тогда быстрее.
А если отлаживать и КАЖДЫЙ раз компилить новый VHDL - то это тоже занимает скока минут, а может и час?
Так что все относительно.
Про АЦП сюда: http://www.analog.com/en/analog-to-digital....html#ADIsimADC

Нужно скачать http://www.analog.com/Analog_Root/static/t...mple_Matlab.zip и к нему *.adc модель вашего АЦП.
disel
Цитата(litv @ Mar 5 2009, 11:29) *
Про АЦП сюда: http://www.analog.com/en/analog-to-digital....html#ADIsimADC

Нужно скачать http://www.analog.com/Analog_Root/static/t...mple_Matlab.zip и к нему *.adc модель вашего АЦП.


То что доктор прописал!!! Спасибо!
petrov
ИМХО симулинк для обкатки идей а не для 100% соответствия аппаратуре. Ессно потом ручками на VHDL переводить всё. И это не двойная работа, симулинк для разработки алгоритма, математики, нет смысла там тупо АЦП моделировать или фиксированную точку если с принципом работы эквалайзера есть вопросы.
des00
Цитата(litv @ Mar 5 2009, 02:29) *
"решил начать работать как правильные люди, но когда через неделю не получилось добиться результатов, отложил матлаб и запустил систему в железе."
Неделю - то вовсе немного. Матлаб можно учить всю жизнь biggrin.gif


думаю что для такой простой вещи (модулятор 4 тригера и табличка, демодулятор счетчик + 2 регистра) уж слишком долго %)

Цитата
По поводу того что можно смотреть быстрее в железе - это был бы лучший способ - Но это когда проект уже работает. Тогда быстрее.
А если отлаживать и КАЖДЫЙ раз компилить новый VHDL - то это тоже занимает скока минут, а может и час?


в данном конкретном примере 1 минута, все коэффициенты и прочее могу на лету менять, это пересборки не требует. %)


Цитата(petrov @ Mar 5 2009, 03:09) *
ИМХО симулинк для обкатки идей а не для 100% соответствия аппаратуре. Ессно потом ручками на VHDL переводить всё. И это не двойная работа, симулинк для разработки алгоритма, математики, нет смысла там тупо АЦП моделировать или фиксированную точку если с принципом работы эквалайзера есть вопросы.


тогда посоветуйте как мне промоделировать вот что : сигнал с частотой 2*fверхнее формируется на 8*fверхнее и идет в кабель, в котором вносятся искажения, затем сигнал из кабеля нарезается на 4*fверхнее и на временном детекторе детектируется на 2*fверхнее.

Как я понимаю мне нужно промоделировать именно нарезку аналогового сигнала, частотой от перестраиваемого ГУНА, передать сигнал как это сделано у вас в моделях модемов не получиться.

Или я смотрю на задачу слишком уж аналогово ? И есть другой подход к моделированию таких систем ?

Помимо нарезки я хочу промоделировать работу петли выделения тактовой и эквалайзера. Или можно собрать систему без фазовой и частотной ошибки и тестировать только эквалайзер?

Спасибо
disel
Цитата(petrov @ Mar 5 2009, 12:09) *
ИМХО симулинк для обкатки идей а не для 100% соответствия аппаратуре. Ессно потом ручками на VHDL переводить всё. И это не двойная работа, симулинк для разработки алгоритма, математики, нет смысла там тупо АЦП моделировать или фиксированную точку если с принципом работы эквалайзера есть вопросы.


Систем генератор от ксалинкса, про который уже писалось выше, рулит. Перевод ручками это не только двойная работа, но и источник ошибок. С систем генератором же что промоделировал в матлабе, то получил в железе.
petrov
Цитата(des00 @ Mar 5 2009, 12:50) *
тогда посоветуйте как мне промоделировать вот что : сигнал с частотой 2*fверхнее формируется на 8*fверхнее и идет в кабель, в котором вносятся искажения, затем сигнал из кабеля нарезается на 4*fверхнее и на временном детекторе детектируется на 2*fверхнее.

Как я понимаю мне нужно промоделировать именно нарезку аналогового сигнала, частотой от перестраиваемого ГУНА, передать сигнал как это сделано у вас в моделях модемов не получиться.

Или я смотрю на задачу слишком уж аналогово ? И есть другой подход к моделированию таких систем ?

Помимо нарезки я хочу промоделировать работу петли выделения тактовой и эквалайзера. Или можно собрать систему без фазовой и частотной ошибки и тестировать только эквалайзер?

Спасибо


Конечно если моделировать аналоговые цепи в лоб то потребуется слишком высокая частота отсчётов по сравнению с символьной и это будет слишком медленно работать. Моделировать нужно с фиксированной частотой дискретизации, такой чтобы просто было осуществлять интерполяцию. Я так понимаю что у вас взятие правильного отсчёта осуществляется аналоговым образом с помощью управления генератором тактирующим АЦП, можно сделать модель этого процесса на фиксированной частоте дискретизации с помощью интерполятора Farrow как в моих моделях.

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


Цитата(disel @ Mar 5 2009, 13:02) *
Систем генератор от ксалинкса, про который уже писалось выше, рулит. Перевод ручками это не только двойная работа, но и источник ошибок. С систем генератором же что промоделировал в матлабе, то получил в железе.


Речь о другом. Вы видели статьи IEEE например посвящённые принципам работы тех же эквалайзеров, это результат исследований, сложной работы по сравнению с которой кодирование на VHDL ручками плёвое дело.
disel
Цитата(petrov @ Mar 5 2009, 14:12) *
Речь о другом. Вы видели статьи IEEE например посвящённые принципам работы тех же эквалайзеров, это результат исследований, сложной работы по сравнению с которой кодирование на VHDL ручками плёвое дело.


Как сложность разработки эквалайзеров мешает применять систем генератор и получать сразу готовый результат без дополнительного труда и ошибок? Впрочем дело хозяйское, спорить не буду.
petrov
Цитата(disel @ Mar 5 2009, 14:30) *
Как сложность разработки эквалайзеров мешает применять систем генератор и получать сразу готовый результат без дополнительного труда и ошибок? Впрочем дело хозяйское, спорить не буду.


Да разная это работа, чтоб до железки добраться надо кучу теории перелопатить, причём тут сиcтем генератор, зачем усложнять работу мишурой не нужной на данном этапе? В Цифровой связи Прокиса нету ни одного упоминания ни VHDL ни систем генератора. Кроме того хоть я и не использовал систем генератор но что-то большие сомнения в качестве результата его работы, ну там фильтр или FFT он сгенерит ясное дело, а вот что-то посложнее да с последовательной обработкой думаю всёравно ручками надо делать и не в симулинке.
disel
Цитата(petrov @ Mar 5 2009, 14:55) *
Да разная это работа, чтоб до железки добраться надо кучу теории перелопатить, причём тут сиcтем генератор, зачем усложнять работу мишурой не нужной на данном этапе? В Цифровой связи Прокиса нету ни одного упоминания ни VHDL ни систем генератора. Кроме того хоть я и не использовал систем генератор но что-то большие сомнения в качестве результата его работы, ну там фильтр или FFT он сгенерит ясное дело, а вот что-то посложнее да с последовательной обработкой думаю всёравно ручками надо делать и не в симулинке.


Можно делать на этапе разработке алгоритмов в симулинке, а потом положить рядом модель сделанную в систем генераторе и сравнить результаты. Это гарантирует что реализация будет соответсвовать разработанному алгоритму. Качество же работы систем генератор определяется кривизной рук разработчика, там тоже нужно ручами все паралелить, фактически это схематик.
petrov
Цитата(disel @ Mar 5 2009, 15:29) *
Можно делать на этапе разработке алгоритмов в симулинке, а потом положить рядом модель сделанную в систем генераторе и сравнить результаты. Это гарантирует что реализация будет соответсвовать разработанному алгоритму. Качество же работы систем генератор определяется кривизной рук разработчика, там тоже нужно ручами все паралелить, фактически это схематик.


Тупо в параллель делать не сложно, сложнее последовательно обсчитывать. От схематика как раз и уходят все потому-что более-менее сложное на нём не сделать. Думается мне что систем генератор очень ограниченное применение может иметь и не заменит ручную писанину на HDL.
des00
Цитата(petrov @ Mar 5 2009, 05:12) *
Конечно если моделировать аналоговые цепи в лоб то потребуется слишком высокая частота отсчётов по сравнению с символьной и это будет слишком медленно работать. Моделировать нужно с фиксированной частотой дискретизации, такой чтобы просто было осуществлять интерполяцию. Я так понимаю что у вас взятие правильного отсчёта осуществляется аналоговым образом с помощью управления генератором тактирующим АЦП, можно сделать модель этого процесса на фиксированной частоте дискретизации с помощью интерполятора Farrow как в моих моделях.

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


понял зайдем с этой стороны. спасибо.
_Anatoliy
Цитата(des00 @ Mar 6 2009, 05:47) *
понял зайдем с этой стороны. спасибо.


Я попробовал скрестить симулинк с Active-HDL,глюкалово ещё то.Может на небольших моделях и будет работать,но у меня,например,скопы подключенные к одному и тому-же сигналу но в разных блоках показывали разные картинки.
des00
Добрый день господа!

собрал FSE эквалайзер в железе. В качестве декодера ошибок использую декодер по решениям. Внес в канал только амплитудные искажения (поставил делитель напряжения)

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

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

Мне не понятно следующее

1. Почему 15 ый коэффициент изменяется некорректно и асимметрично с 17 ым?
2. Откуда эквалайзер находит фазовые искажения в канале, в котором их нет? По моему мнению он должен был просто дотянуть центральный коэффициент, т.е. выступить в роли АРУ
3. в модели petrov qam_fb_symbol_sync_fb_phase_sync_agc_var_ch_delay_eq_2007_07_21.mdl используется два детектора ошибки, в моей модели только детектор по решению? Корректно ли это ?
4. Почему при сходимости эквалайзера(ошибка ~= 0), сигнал на его выходе, на частоте 2*Fs визуально "хуже" чем на входе? понятно что это из-за коэффициентов FIR, но мне не понятно является ли такая ситуация нормальной.


Спасибо.
petrov
Цитата(des00 @ Mar 13 2009, 10:28) *
2. Откуда эквалайзер находит фазовые искажения в канале, в котором их нет? По моему мнению он должен был просто дотянуть центральный коэффициент, т.е. выступить в роли АРУ


Не из любой начальной амплитуды сигнала критерий настройки может подстроить усиление, только в небольших пределах, поэтому у меня в модели есть АРУ.


Цитата(des00 @ Mar 13 2009, 10:28) *
3. в модели petrov qam_fb_symbol_sync_fb_phase_sync_agc_var_ch_delay_eq_2007_07_21.mdl используется два детектора ошибки, в моей модели только детектор по решению? Корректно ли это ?


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

Ваша модель не открывается у меня.
des00
Цитата(petrov @ Mar 13 2009, 05:13) *
Не из любой начальной амплитуды сигнала критерий настройки может подстроить усиление, только в небольших пределах, поэтому у меня в модели есть АРУ.


коэффициенты эквалайзера изменяются в пределе от -2.0 до 1.99, решение принимается по точкам +-64, входной сигнал +-32. если я правильно понимаю от эквалайзер может усилить сигнал в 2 раза

Цитата
Ваша модель не открывается у меня.


понял, перенесу на выходных модель в 7.0.1 матлаб и выложу
Tue
Цитата(des00 @ Mar 5 2009, 08:56) *
Если вам не сложно дайте ответ на следующие вопросы:
1. Почему модель моделируется очень медленно?
2. Как корректно в симулнике моделировать аналоговые цепи вида ЦАП-фильтр - модель кабеля (фильтр) - фильтр - АЦП?
3. Как корректно моделировать АЦП, который работает от подстаиваемого ГУН (Zero Order Hold в Enable Subsytem все равно требует задания Sample Time)?
4. Как перенести корректно типы в модели с double в типы, которые используются в проекте. Особенно интересуют петли, иначе такая модель не показательна. В модели 06 я изменил все типы на типы проекта, но так и не понял как корректно выкусить 12 старших бит из 32 на выходе петлевого фильтра, что бы матлаб считал результат как sint12?
5. Как корректно описывать временные декодеры, на подобие тех, что у меня в проекте?


1. Моделируется медленно из-за того, что очень малый расчетный шаг. Я обычно борюсь с этим следующим образом: компилирую модель в Real-Time Workshop - он создает исполняемый .exe файл, запускаю его на выполнение, на выходе которого формируется .mat файл с данными, которые выводятся на Scope'ы. Дальше просто загружаю этот файл в рабочее пространство Матлаба и уже на график. Бывает, что .mat файл формируется уж неприлично большим. Тогда можно поступить чуть хитрее. Выводить на Scope'ы сигналы не все время, а только когда он изменяется - размер .mat файла уменьшается на порядок. У Real-Time Workshop'a есть опции для настройки (быстрее компилировать модель и медленее выполнять ее, или медленнее компилировать и быстрее выполнять). Также советую для компилирования моделей поставить какой-нибудь компилятор поновее (не встроенный в матлаб) и настроить Real-Time Workshop на него. Я использую компилятор от Microsoft Visual Studio 2005.
В целом, использование такого метода уменьшает время ожидания результатов моделирования по сравнению с традиционным на порядки.

2-3 не очень понятны вопросы (что конкретно не понятно), все зависит от глубины моделирования. Если вы не особо знакомы с Симулинком, лучше наверное начать с изучения и понимания разницы между Discrete Signal и Continuous Signal в Симулинке. Искать примеры моделей по интересующей вас теме на сайте матлабовцев.

4. Это лучше посмотреть демки пакета Simulink Fixed Point. Например "Double to Fixed-Point Conversion", "Fixed-Point to Fixed-Point Conversion"

5. Ничего не могу сказать, не моя тема.
_Anatoliy
Цитата(des00 @ Mar 13 2009, 09:28) *


А у меня модель просто летает rolleyes.gif
Пока что заметил,так это то что нет символьной синхронизации.Вот сигнал с выхода фильтра Гарднера:
Сигнал должен быть стационарным.Дальше ещё посмотрим.

Кстати,как Вы делаете цветные модели?У меня все чёрно-белые wink.gif
petrov
Цитата(des00 @ Mar 13 2009, 16:09) *
коэффициенты эквалайзера изменяются в пределе от -2.0 до 1.99, решение принимается по точкам +-64, входной сигнал +-32. если я правильно понимаю от эквалайзер может усилить сигнал в 2 раза


Дело не в том что центральный коэфициент может или не может какие-то значения принимать, а в том что рабочая функция при выбранном критерии настройки имеет локальные минимумы отличные от глобального.
des00
выкладываю проект под матлаб 7.0.1 ( модели уважаемого petrov я запускал именно в нем).

Поправил петлю по тактовой, конечно в ней не хватает аналогового фильтра на 1кгц, но как его применить в данной модели мне не понятно. Design Filter Tool валиться на требуемой АЧХ RC фильтра второго порядка sad.gif.

если я правильно трактую что я виду, то после переходного процесса петля устаканивается.

но вот эквалайзер все равно работает странно.

Передатчик выдает сигнал +-128, эквалайзер настроен на +-64, пробывал разные ампилитудные искажения 1/2, 2/3, 1/3, во всех случаях эквалайзер начинает тянуть соседние от центрального коэффициенты и если я правильно понимаю то находит частотные искажения в канале, в котором их нет. При этом сигнал на выходе эквалайзера визуально хуже чем на входе.

2 petrov

Цитата
Дело не в том что центральный коэфициент может или не может какие-то значения принимать, а в том что рабочая функция при выбранном критерии настройки имеет локальные минимумы отличные от глобального.


хмм, я думал что в методе наименьших квадратов только один минимум, а как тогда определить что попал имеено в тот минимум который нужен ?

2 _Anatoliy

Цитата
Кстати,как Вы делаете цветные модели?У меня все чёрно-белые


Format -> Port/Signals -> Sample Time Colors

без этого как без рук, мне философию матлаба с разными тактовыми и сигналами разрешения на этих тактовых (та же модель АЦП на другом клоке) пока не понять.

2 Tue

спасибо за советы
_Anatoliy
Цитата(des00 @ Mar 14 2009, 11:02) *
Длинна эквалайзера 32 тапа, индекс центрального коэффициента 16.


Что-то у меня получается индекс не 16,а 17.Проверьте.
petrov
Проблема не в эквалайзере а в символьной синхронизации, если отключить петлю символьной синхронизации и подобрать правильную фазу задержкой, то эквалайзер подстраивает усиление, не только центральным коэффициентом, другие тоже немного меняются. В вашем простом случае действительно усиление можно подстраивать одним лишь эквалайзером, но соответственно увеличиваются требования к его разрядности.
des00
Цитата(petrov @ Mar 16 2009, 16:03) *
Проблема не в эквалайзере а в символьной синхронизации, если отключить петлю символьной синхронизации и подобрать правильную фазу задержкой, то эквалайзер подстраивает усиление, не только центральным коэффициентом, другие тоже немного меняются. В вашем простом случае действительно усиление можно подстраивать одним лишь эквалайзером, но соответственно увеличиваются требования к его разрядности.


спасибо большое, та модель была сделана тяп ляп, я посмотрел по ИКО увидел что ошибок нет и занялся эквалайзером.

сейчас переработал модель, добавил антиалайзинговый фильтр по выходу, настроил петлю по тактовой (переходный процесс хорошо видно в начале старта модели), убрал 8 ми битное масштабирование (т.е. поставил точки в [-0.5 0.5]).

эквалайзер стал вести себя более корректно (пока вносил только амплитудные искажения), но вот что интересно. Вношу искажения 3/4(equ_coe_3_4.jpg, слева), коэффициенты ведут себя корректно, ИХ эквалайзера идет по sin(x)/x, а когда вношу искажения 1/4 (equ_coe_1_4.jpg, справа)то ИХ тоже идет по sin(x)/x но с периодом в 2 раза больше(!!!). По сигналу и ошибкам все нормально, но вообще ситуация странная.

Не могли бы вы объяснить данную ситуацию ? Или это как раз и есть пример влияния динамического диапазона эквалайзера на сходимость коэффициентов ?

Спасибо.
petrov
Динамический диапазон тут не при чём, с плавающей точкой всё то же самое наблюдается. Если хотите наблюдать только изменение центрального коэффициента в зависимости от амплитуды то делайте обычный адаптивный фильтр с настройкой по известному сигналу и в качестве сигнала используйте белый шум, в данном случае с таким критерием настройки и сигналом получается вот такой такой глобальный минимум, ошибка то ведь минимизируется. И всё же лучше сделать АРУ.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.