Основы сигнала переменного размера

О сигналах Переменного Размера

Сигнал Simulink® может быть скаляром, (1D) вектор, матрица (2-D) или N-D. Для получения информации об этих типах сигналов смотрите Основы Сигнала в Руководстве пользователя Simulink.

Сигнал переменного размера Simulink является сигналом, размер которого (число элементов в размерности), в дополнение к ее значениям, может измениться во время симуляции модели. Однако во время симуляции, количество размерностей не может измениться. Эта возможность позволяет вам системам модели с различными ресурсами, ограничениями и средами.

Создание сигналов Переменного Размера

Можно создать сигналы переменного размера в модели Simulink при помощи:

  • Переключитесь или Многопортовые блоки switch с различными входными портами, имеющими сигналы фиксированного размера с различными размерами. Выход является сигналом переменного размера.

  • Селекторный блок и Starting and ending indices (port) индексация опции. Сигнал порта индекса может задать различные подобласти сигнала входных данных, которые производят выходной сигнал переменного размера, в то время как симуляция прогрессирует.

  • Блок s-function с выходным портом, сконфигурированным для сигнала переменного размера. Выход включает не только значения, но также и размерность сигнала.

Как сигналы Переменного Размера распространяют

В окружении Simulink сигналы переменного размера могут изменить свой размер во время выполнения модели одним из двух способов:

  • На каждом шаге выполнения модели.

    Различные блоки в модели изменяют размеры сигналов во время осуществления выходного метода.

  • Только во время инициализации условно выполняемых подсистем.

    Изменения размера происходят во время отличных событий переключения режимов в подсистемах, таких как Действие, Включают, и Подсистемы вызова функций.

Вы видите основное отличие путем рассмотрения блока Discrete 2-Tap Filter с состояниями.

Дискретный фильтр с 2 касаниями

Примите, что размерность входного сигнала к этому фильтру изменяется с 4 до 1 в процессе моделирования. Это неоднозначно, когда и как состояния блоков Unit Delay должны адаптироваться от 4 до 1, чтобы продолжить обрабатывать вход. Чтобы гарантировать непротиворечивость, оба блока Unit Delay должны изменить свое поведение состояния синхронно. Чтобы предотвратить неоднозначность, Simulink обычно запрещает блоки, количество которых состояний зависит от размеров входного сигнала в контекстах, где размеры сигнала изменяются в любой точке во время выполнения.

В отличие от этого рассмотрите тот же блок Discrete 2-Tap Filter в Подсистеме вызова функций. Примите, что эта подсистема использует второй способ распространить сигналы переменного размера. В этом случае размер входного сигнала изменяется с 4 до 1 только при инициализации подсистемы. При инициализации подсистема сбрасывает все свои состояния (включая состояния двух блоков Unit Delay) к их начальным значениям. Сброс подсистемы не гарантирует неоднозначности на присвоении состояний к входному сигналу фильтра.

Зависимые режимом Сигналы Переменного Размера показывают, как можно использовать два способа распространить сигналы переменного размера дополнительным способом смоделировать сложные системы.

Программно определите, имеет ли сигнальная линия переменный размер

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

Модель sldemo_varsize_basic в качестве примера содержит a сигнала это является нисходящим из блока Switch. Используйте команды в командной строке, чтобы определить ли a имеет переменный размер.

  1. Откройте модель в качестве примера.

  2. Выберите блок Sum, выходной сигнал которого помечен a.

  3. В командной строке, набор модель к скомпилированному состоянию (похожий на обновление схемы).

    sldemo_varsize_basic([],[],[],'compile')

  4. Получите указатель на выходной порт блока.

    portHandles = get_param(gcb,'portHandles');
    outPortHandle = portHandles.Outport;

  5. Запросите программируемый параметр CompiledPortDimensionsMode из выходного порта.

    varSize = get_param(outPortHandle,'CompiledPortDimensionsMode')
    varSize =
    
         1

    Значение переменной varSize 1, который указывает что a сигнала имеет переменный размер.

    Значение 0 указывает, что сигнал не имеет переменного размера.

  6. Отключите компиляцию модели.

    sldemo_varsize_basic([],[],[],'term')

Пустые сигналы

Пустой сигнал является сигналом с длиной 0. Например, сигналы с размером [0], [0x3], [2x0], и [2x0x3] все пустые сигналы. Simulink позволяет пустые сигналы с сигналами переменного размера и поддерживает большинство поэлементных операций. Однако Simulink не поддерживает пустые сигналы для блоков, которые изменяют размерности сигнала. Неподдерживаемые блоки включают, Изменяют, Переставляют, и Сумма в заданном измерении.

Инициализация подсистемы сигналов Переменного Размера

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

Если вы устанавливаете параметр Propagate sizes of variable-size signals в родительской подсистеме к During execution, параметр Initial output для блока Output не должен превышать максимальный размер входного порта. Если значение параметров Initial output:

Начальный выходной параметрНачальный размер выходного сигнала
Нескалярная матрицаНачальный размер выходного сигнала является размером параметра Initial output.
СкалярНачальный размер выходного сигнала является скаляром.
Значение по умолчанию []Начальный выходной размер является пустым сигналом (размерности являются всеми нулями).

Если вы устанавливаете параметр Propagate sizes of variable-size signals в родительской подсистеме к Only when enabling, параметр Initial output для блока Output должен быть скалярным значением.

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

  • Если параметр Initial output является значением по умолчанию [], Simulink обрабатывает начальный выход как основанное значение.

  • Если модель не активирует родительскую подсистему во время начала (t = 0), текущий размер подсистемы выход, соответствующий блоку Outport, установлен в максимальный размер.

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

Похожие темы