Эта модель примера показывает, как создать сигнал переменного размера из нескольких сигналов фиксированного размера и из единственного сигнала данных. Это также показывает некоторые операции, которые вы можете применить к сигналам переменного размера.
Полный список блоков, которые поддерживают сигналы переменного размера, см. в разделе Поддержка блоков Simulink для сигналов переменного размера.
В MATLAB® Командное окно, введите
sldemo_varsize_basic
В Simulink® Редактор, на вкладке Debug, выберите Information Overlays > Signal Dimensions. Запустите симуляцию или нажмите Ctrl-D.
В редакторе Simulink отображаются размерности сигнала и стили линии. Смотрите Основы сигнала для интерпретации стилей линии сигнала.
Чтобы вы могли увидеть имена блоков в модели, на вкладке Format очистите Auto > Hide Automatic Block Names.
Один из способов создать сигнал переменного размера - использовать блок Switch. Входные сигналы к блоку Switch могут отличаться по количеству размерностей и по размеру.
Выход из блока Switch является 2-D сигналом переменного размера с максимальным размером 3x2
. Когда вы выбираете параметр Разрешить различные размеры входных данных на блоке Switch, Simulink не расширяет скалярное значение из блока Constant1.
Можно добавить блок To Workspace к выходу из блока Switch. Поскольку модель уже имеет блок To Workspace, второй блок To Workspace сохраняет данные в массиве сигналов с именем simout2
The 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
The 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 показывают различные манипуляции, которые вы можете сделать с сигналами переменного размера.
Правая часть модели определяет ширину (размер) сигнала и использует возможности, чтобы визуализировать ширину и обработанный сигнал данных.
Эта модель примера представляет систему, которая имеет три режима работы. Для каждого режима сигнал данных для обработки имеет разный размер.
Подсистема Process в этой модели получает сигнал переменного размера, где размер сигнала зависит от режима работы системы. Для каждого изменения режима, Stateflow® график, Mode Control Logic, обнаруживает, когда изменяется размер сигнала данных. Затем он генерирует вызов функции для сброса блоков в подсистеме Process.
Чтобы открыть модель, В Командном Окне MATLAB введите:
sldemo_varsize_multimode
Чтобы вы могли увидеть имена блоков, в модели, на вкладке Format, очистить Auto > Hide Automatic Block Names.
Подсистема выбора режима определяет режим обработки сигнала данных и выводит значение режима (1, 2 или 3). Это значение помогает выбрать длину сигнала данных с помощью подсистем Size Selection и Data.
Подсистема Size Selection создает значение индекса из значения mode. В этом примере значения индекса [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
Поскольку подсистема Process содержит блок Delay, подсистема сбрасывает и переупорядочивает сигнал на каждом временном шаге. Эта модель использует диаграмму Stateflow, чтобы обнаружить изменение размера сигнала и сбросить подсистему Process.
В диалоговом окне функционального блока и из списка Propagate sizes of variable-size signals выберите Only when enabling
. Когда модель включает эту подсистему, выбор этой опции предписывает программному обеспечению Simulink распространять размеры для сигналов переменного размера внутри условно выполненной подсистемы. Размеры сигнала могут меняться только при переходе от отключенного к включенному. Для объяснения обработки изменений размера сигнала с блоками, содержащими состояния, смотрите, Как распространяются сигналы переменного размера.
Диаграмма Stateflow определяет, есть ли изменение в размере сигнала. Функция size_detect
вычисляет ширину сигнала переменного размера на каждом временном шаге и сравнивает текущую ширину с предыдущей шириной. Если происходит изменение размера сигнала, график выводит выходное событие вызова функции, которое сбрасывает и переупорядочивает размеры сигнала в подсистеме Process.
Используйте блок Probe, чтобы визуализировать размер сигнала и размерность сигнала.
Поскольку сигналы n x n
матрицы, сигнал размерности линии перекрываются в Возможности отображения.
Можно использовать блок Display и отладчик Simulink, чтобы визуализировать значения сигналов на каждом временном шаге.
Оба Level-2 MATLAB S-Functions и C S-Functions поддержка сигналы переменного размера, когда вы устанавливаете DimensionMode для порта выхода равной Variable
. Вы также должны учитывать текущую размерность входных и выходных сигналов в методах входа и выходных параметров.
Чтобы открыть эту модель примера, в Командном Окне MATLAB, введите:
msfcndemo_varsize
Подсистема Enabled включает Level-2 MATLAB S-Function, которая показывает, как реализовать блок, который держит свои состояния до сброса. Поскольку этот блок содержит состояния и задерживает входной сигнал, размер входа может измениться только тогда, когда происходит сброс.
Блок Expand является Level-2 MATLAB S-Function, которая принимает скалярный вход и выводит вектор длины, обозначенной его входным значением. Это выход по 1:n
где n
- вход значение.
Чтобы открыть эту модель примера, в Командном Окне MATLAB, введите:
sfcndemo_varsize
Активированные подсистемы имеют две S-функции:
sfun_varsize_holdStatesUntilReset является C S-Функцией, которая имеет состояния и требует, чтобы ее вектор DWorks сбрасывался всякий раз, когда изменяются размеры входного сигнала.
sfun_varsize_concat1D является S-функцией C, которая реализует конкатенацию двух неориентированных векторов. Можно использовать эту функцию в подсистеме с поддержкой самостоятельно.