Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: М-файл и Simulink
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
SledCom
Добрый день, уважаемые форумчане!

Извиняюсь, что не много не по озаглавленной в разделе теме, но очень нужна Ваша помощь. При моделировании в Simulink помимо стандартных блоков пришлось использовать собственно написанную m-функцию. Составленная модель напрочь отказывается работать, как выяснилось, из-за того, что работает с остальными симулинковскими блоками асинхронно, причем не смотря на выставленный у всех блоков схемы (в том числе в настройках m-функции) одинаковый Sample Time.
Вопрос: можно ли как-то заставить стандартные блоки Симулинка и написанную m-функцию любить друг друга????

Если нет, то тогда прошу помочь с реализацией следующего кода:

Код
function e = fcn(u,N)
persistent S, C, Count
if isempty (S)
   Count = 1;
end
if Count = 5 %Значение счетчика, после которого нужно все сбросить
   S = U^N;
   e = S;
   C = 1;
   S = 0;
else
   C = C+1;
   S = U^N
   e = S;
end


Вопрос в данном случае возникает в том, как в симулинке (используя только стандартные блоки) случае правильно сбросить счетчик?

Спасибо!
petrov
Цитата(SledCom @ Jun 23 2016, 12:07) *
Вопрос в данном случае возникает в том, как в симулинке (используя только стандартные блоки) случае правильно сбросить счетчик?


Записать в регистр(задержку) счётчика 0 вместо очередного значения с выхода сумматора.
SledCom
Цитата(petrov @ Jun 23 2016, 16:36) *
Записать в регистр(задержку) счётчика 0 вместо очередного значения с выхода сумматора.


Спасибо.

А по м-функции и стандартным блокам?
petrov
Цитата(SledCom @ Jun 27 2016, 08:41) *
Спасибо.

А по м-функции и стандартным блокам?


М-функции не нужны. Сумматоры, задержки, логические функции, мультиплексоры, конечные автоматы являются стандартными блоками, реализуется всё как в жизни, автоматически HDL код получается.
SledCom
Цитата(petrov @ Jun 27 2016, 16:33) *
М-функции не нужны. Сумматоры, задержки, логические функции, мультиплексоры, конечные автоматы являются стандартными блоками, реализуется всё как в жизни, автоматически HDL код получается.


Тогда каким стандартным блоком можно реализовать инверсию? Например (в самом просто варианте), из последовательности [1 2 5 4 7] получить [7 4 5 2 1]?

А, вроде нашел. Судя по всему, это блок "Flip".
SledCom
Еще вопрос по данной же теме.
Реализовал схему на стандартных блоках без использования м-функции,как и говорили. По идее на выходе должен строиться типа треугольника, но такого не получается. По какой причине на итоговом графике образуются указанные на рисунке провалы? Sample Time в функции Conv возможности задать нет...

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

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

Нажмите для просмотра прикрепленного файла
petrov
Гляньте для примера:
http://electronix.ru/forum/index.php?s=&am...st&p=930251
SledCom
Схему глянул. Спасибо.

Вопрос теперь в следующем: собрал простую схему, как представлено на рисунке:
Нажмите для просмотра прикрепленного файла

В данной схеме на блоках установлены следующие параметры:
1) Источники (константа и "Walsh"):
Нажмите для просмотра прикрепленного файла

2) Значения в блоках задержек (а, б -- перед буферами; в -- после "Walsh" [внизу]):
Нажмите для просмотра прикрепленного файла

3) Параметры блока "Conv":
Нажмите для просмотра прикрепленного файла

Изменяя Sample Time в задержке "Walsh" (внизу которая) получаем следующие результаты:

1. Sample Time = 8/Fs:
Нажмите для просмотра прикрепленного файла

2. Sample Time = 16/Fs:
Нажмите для просмотра прикрепленного файла

3. Sample Time = 32/Fs:
Нажмите для просмотра прикрепленного файла

4. Sample Time = 64/Fs:
Нажмите для просмотра прикрепленного файла

5. Sample Time = 128/Fs:
Нажмите для просмотра прикрепленного файла

6. Sample Time = 256/Fs:
Нажмите для просмотра прикрепленного файла


Как видно из графиков, вроде как получилось добиться правильной работы схемы: при "+1" он добавляет "0.3", а при "-1" -- вычитает ("множественной" суммы и вычитания, как раньше, нет).

Вопросы следующие:
1) Почему не совпадают по времени такты "Walsh" и выходной последовательности?
2) Почему такт "Walsh" длиннее выходной последовательности (в 2 раза)?
petrov
Лучше сразу объяснить что делаете.
Логику работы не делают семпл таймами, источником тактового сигнала должен являться один единственный блок.

Блок для контроля sample time:
http://www.mathworks.com/help/simulink/slref/probe.html

Уолша можно сразу в константах использовать:
>> H=hadamard(4)

H =

1 1 1 1
1 -1 1 -1
1 1 -1 -1
1 -1 -1 1

>> H(2,:)

ans =

1 -1 1 -1

Свёртка КИХ фильтром делается.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.