Эта модель в качестве примера показывает, как создать сигнал переменного размера из нескольких сигналов фиксированного размера и из одного сигнала данных. Это также показывает некоторые операции, можно обратиться к сигналам переменного размера.
Для полного списка блоков, которые поддерживают сигналы переменного размера, смотрите Поддержку блока Simulink Сигналов Переменного Размера.
В MATLAB® Командное окно, ввести
openExample('sldemo_varsize_basic') varSize = get_param(outPortHandle,'CompiledPortDimensionsMode')
В Simulink® Редактор, на вкладке Debug, выбирает Information Overlays> Signal Dimensions. Запустите симуляцию или нажмите Ctrl-D.
Редактор Simulink отображает размерности сигнала и стили линии. Смотрите Основы Сигнала для интерпретации стилей сигнальной линии.
Так, чтобы вы видели, что имена блоков в модели, на вкладке Format, очищают Auto> Hide Automatic Block Names.
Один способ создать сигнал переменного размера состоит в том, чтобы использовать блок Switch. Входные сигналы с блоком Switch могут отличаться по своему количеству размерностей и в их размере.
Выход от блока Switch является размером 2D переменного размера имеющим сигнала 3x2
. Когда вы выбираете Allow различный параметр размеров ввода данных на блоке Switch, Simulink не расширяет скалярное значение от блока Constant1.
Вы могли добавить блок To Workspace в выход от блока Switch. Поскольку модель уже имеет блок To Workspace, второй блок To Workspace сохранил бы данные к массиву сигнала под названием simout2
values
поле регистрирует фактические значения сигналов. Если регистрируемые данные сигнала меньше, чем максимальный размер, значения дополнены NaNs или соответствующими значениями. Чтобы получить эти значения сигналов, введите:
simout2.signals.values ans(:,:,1) = 1 -1 -2 2 -3 3 ans(:,:,2) = 1 -1 -2 2 -3 3 ans(:,:,3) = 0 NaN NaN NaN NaN NaN
valueDimensions
поле регистрирует размерности сигнала переменного размера. Чтобы получить размерности, введите:
simout2.signals.valueDimensions
Размерности сигнала для первых трех временных шагов показывают.
ans = 3 2 3 2 1 1
Сигналом (Constant5) данных является 3x4
матрица. Импульсный Генератор представляет управляющий сигнал, который выбирает запуск и окончание значения индекса ([1 2]
или [1 3]
). Блок Selector затем использует значения индекса, чтобы выбрать различные части сигнала данных на каждом временном шаге и вывести сигнал переменного размера.
Выходом от блока Selector является любой 2x2
или 3x3
матрица. Поскольку максимальной размерностью для сигнала переменного размера является 3x4
матрица от сигнала данных, регистрируемые выходные сигналы дополнены NaNs.
Используйте Probe или блоки Width, чтобы смотреть текущие размерности и ширину сигнала переменного размера. Кроме того, можно отобразить сигналы переменного размера на блоках Scope и сохранить сигналы переменного размера в рабочую область с помощью блока To Workspace.
Остаток от модели показывает различные операции, которые возможны с сигналами переменного размера. Операции включают использование Gain, Sum, Math Function и блоков Matrix Concatenate. Можно соединить сигналы переменного размера с From, Goto, Bus Assignment, Bus Creator и блоками Bus Selector.
Эта модель в качестве примера соответствует гипотетической системе, где модель адаптирует длину сигнала в зависимости от времени. Адаптация длины основана на значении управляющего сигнала. Когда управляющий сигнал находится в пределах одной из трех предопределенных областей значений, изменений сигнала необработанных данных фиксированного размера в сигнале данных переменного размера.
Сигнал переменного размера соединяется с блоком обработки, где блоки, которые поддерживают сигналы переменного размера, работают с ним. Блок MATLAB function с обоими сигналами ввода и вывода переменного размера позволяет больше гибкости, чем другие блоки, поддерживающие сигналы переменного размера. Смотрите Поддержку блока Simulink Сигналов Переменного Размера.
Чтобы открыть модель в качестве примера, в командном окне MATLAB, введите:
sldemo_varsize_dataLengthAdapt
Так, чтобы вы видели, что имена блоков, в модели, на вкладке Format, очищают Auto> Hide Automatic Block Names.
Эта модель генерирует сигнал данных и преобразует сигнал в сигнал переменного размера. Размер сигнала зависит от значения управляющего сигнала. Сигнал необработанных данных является вектор-столбцом со значениями от 1
к 9
.
[1:9].' ans = 1 2 3 4 5 6 7 8 9
В подсистеме Адаптации Длины подсистема Размера Сигнала генерирует индекс на основе качественного значения от подсистемы Выбора Размера (In2). Блок Data Selector использует начальные и конечные индексы, чтобы адаптировать длину сигнала (In1) данных и вывести сигнал переменного размера.
Центральная секция процессов модели сигнал переменного размера. Блок MATLAB Function добавляет нули между значениями данных способом, который похож на повышающую дискретизацию сигнала. Размерность сигнала изменяется от 9
к 18
. Блоки Math Function показывают различные манипуляции, которые можно сделать с сигналами переменного размера.
Правильный раздел модели определяет ширину сигнала (размер) и использует осциллограф, чтобы визуализировать ширину и обработанный сигнал данных.
Эта модель в качестве примера представляет систему, которая имеет три режима работы. Для каждого режима сигнал данных обработать имеет различный размер.
Подсистема Процесса в этой модели получает сигнал переменного размера, где размер сигнала зависит от режима работы системы. Для каждого изменения режима, Stateflow® график, Управляющая логика Режима, обнаруживает, когда данные сигнализируют об изменениях размера. Это затем генерирует вызов функции сбросить блоки в подсистеме Процесса.
Чтобы открыть модель, В командном окне MATLAB, введите:
sldemo_varsize_multimode
Так, чтобы вы видели, что имена блоков, в модели, на вкладке Format, очищают Auto> Hide Automatic Block Names.
Подсистема Выбора Режима определяет режим для обработки сигнала данных и выводит значение режима (1, 2, или 3). Это значение помогает выбрать длину сигнала данных использование подсистем Выбора и Данных о Размере.
Подсистема Выбора Размера создает стоимость индекса от значения режима. В этом примере значениями индекса является [1 3]
, [1 2], и
[1 1]
.
Подсистема Данных берет сигнал данных (блок Constant) и выбирает часть сигнала данных, зависящего от режима. Выход является сигналом переменного размера с матричным размером 3x3
, 2x2
, и 1x1
.
Размерностями сигнала необработанных данных (блок Constant) является 3x3
. После соединения блока To Workspace к сигнальной линии можно просмотреть сигнал в командном окне MATLAB путем ввода:
simout.signals.values ans(:,:,1) = 1 4 7 2 5 8 3 6 9
Сигналом переменного размера, сгенерированным от подсистемы Данных, является также 3x3
матрица. Для более коротких сигналов матрица дополнена NaNs.
simout.signals.values ans(:,:,1) = 1 NaN NaN NaN NaN NaN NaN NaN NaN ans(:,:,2) = 1 4 NaN 2 5 NaN NaN NaN NaN ans(:,:,3) = 1 4 7 2 5 8 3 6 9
Поскольку подсистема Процесса содержит блок Delay, подсистема сбрасывает и повторно распространяет сигнал на каждом временном шаге. Эта модель использует диаграмму Stateflow, чтобы обнаружить изменение размера сигнала и сбросить подсистему Процесса.
В диалоговом окне функционального блока, и из списка Propagate sizes of variable-size signals, выбирают Only when enabling
. Когда модель включает эту подсистему, выбирание этой опции направляет программное обеспечение Simulink, чтобы распространить размеры для сигналов переменного размера в условно выполняемой подсистеме. Размеры сигнала могут измениться только, когда они переходят от отключенного до активированного. Для объяснения обработки изменений размера сигнала с блоками, содержащими состояния, смотрите, Как Сигналы Переменного Размера Распространяют.
Диаграмма Stateflow определяет, существует ли изменение в размере сигнала. Функциональный size_detect
вычисляет ширину сигнала переменного размера на каждом временном шаге и сравнивает текущую ширину с предыдущей шириной. Если существует изменение в размере сигнала, график выводит вызов функции выходное событие, которое сбрасывает и повторно распространяет размеры сигнала в подсистеме Процесса.
Используйте блок Probe, чтобы визуализировать размер сигнала и размерность сигнала.
Поскольку сигналами является n x n
матрицы, размерные линии сигнала перекрываются в отображении Осциллографа.
Можно использовать блок Display и Отладчик Simulink, чтобы визуализировать значения сигналов на каждом временном шаге.
И Уровень 2, S-функции MATLAB и S-функции C поддерживают сигналы переменного размера, когда вы устанавливаете DimensionMode для выходного порта к Variable
. Также необходимо рассмотреть текущую размерность сигналов ввода и вывода в методах обновления ввода и вывода.
Чтобы открыть эту модель в качестве примера, в командном окне MATLAB, введите:
msfcndemo_varsize
Enabled подсистема включает Уровень 2 S-функция MATLAB, которая показывает, как реализовать блок, который содержит его состояния, пока не сброшено. Поскольку этот блок содержит состояния и задерживает входной сигнал, входной размер может измениться только, когда сброс происходит.
Блоком Expand является Уровень 2 S-функция MATLAB, которая берет скалярный вход и выводит вектор из длины, обозначенной ее входным значением. Выход 1:n
где n
входное значение.
Чтобы открыть эту модель в качестве примера, в командном окне MATLAB, введите:
sfcndemo_varsize
Активированные подсистемы имеют две S-функции:
sfun_varsize_holdStatesUntilReset является S-функцией C, которая имеет состояния и требует, чтобы ее вектор DWorks сбросил каждый раз, когда размеры входного сигнала изменяются.
sfun_varsize_concat1D является S-функцией C, которая реализует конкатенацию двух неориентированных векторов. Можно использовать эту функцию в активированной подсистеме отдельно.