Вычислительная задержка блока или подсистемы связана с количеством операций, вовлеченных в выполнение того блока или подсистемы. Например, блок FFT, работающий с входом с 256 выборками, требует, чтобы программное обеспечение Simulink® выполнило определенное число умножения для каждого входного кадра. Фактическое количество времени, которое используют эти операции, зависит в большой степени от производительности и компьютерного оборудования и базовых программных слоев, таких как среда MATLAB® и операционная система. Поэтому вычислительная задержка конкретной модели может отличаться от одной компьютерной платформы до другого.
Время симуляции представляло в строке состояния модели, к которой можно получить доступ через блок Simulink Digital Clock, не предоставляет информации о вычислительной задержке. Например, согласно таймеру Simulink, упомянутый выше БПФ выполняется мгновенно без задержки вообще. Вход к блоку FFT во времени симуляции t=25.0 обрабатывается и выводится во времени симуляции t=25.0, независимо от количества операций, выполняемых Алгоритмом бпф. Таймер Simulink отражает только алгоритмическую задержку, не вычислительную задержку.
Существует много способов уменьшать вычислительную задержку, на самом деле не запуская симуляцию на более быстром оборудовании. Для начала необходимо ознакомить себя с Ручной Оптимизацией Производительности (Simulink), который описывает некоторые основные стратегии. Следующая информация обсуждает несколько опций для того, чтобы улучшать производительность.
Первый шаг в улучшании производительности должен анализировать вашу модель, и устранить или упростить элементы, которые добавляют чрезмерно к вычислительной загрузке. Такие элементы могут включать отображения осциллографа и блоки регистрации данных, которые вы поместили на месте для отладки целей и больше не требуете. В дополнение к этим образцово-специфичным корректировкам существует много более общих шагов, которые можно сделать, чтобы улучшать производительность любой модели:
Используйте основанную на кадре обработку по мере возможности. Выгодно для целой модели быть базирующимся кадром. Смотрите Преимущества Основанной на кадре Обработки для получения дополнительной информации.
Используйте шаблоны модели DSP Simulink, чтобы адаптировать Simulink для моделирования цифровой обработки сигналов. Для получения дополнительной информации смотрите, Конфигурируют окружение Simulink для Моделей Обработки сигналов.
Выключите строку состояния Simulink путем отмены выбора опции Status bar в меню View. Скорость симуляции улучшится, но индикатор времени не будет видим.
Запустите свою симуляцию из командной строки MATLAB путем ввода
sim(gcs)
Этот метод запуска симуляции может значительно увеличить скорость симуляции, но также и имеет несколько ограничений:
Вы не можете взаимодействовать с симуляцией (к настройкам параметров, например).
Необходимо нажать Ctrl+C, чтобы остановить симуляцию, или задавать запускаются и времена остановки.
В S-функциях MATLAB нет никаких графических обновлений.
Используйте программное обеспечение генерации кода Simulink Coder™, чтобы сгенерировать код типичного в реальном времени (GRT), предназначенный к вашей серверной платформе и запустить модель с помощью сгенерированного исполняемого файла. См. документацию Simulink Coder для получения дополнительной информации.
Алгоритмическая задержка является задержкой, которая является внутренней алгоритму блока или подсистемы и является независимой от скорости ЦП. В этом руководстве алгоритмическая задержка блока упомянута просто как задержка блока. Это обычно выражается с точки зрения количества выборок, которыми вывод блока отстает от соответствующего входа. Эта задержка непосредственно связана со временем, истекшим на таймере Simulink во время выполнения того блока.
Алгоритмическая задержка конкретного блока может зависеть и от настроек параметров блоков и от общих настроек Simulink. Кроме того полезно категоризировать задержку блока с помощью следующих категорий:
Следующие темы объясняют различные категории задержки, и как симуляция и установки параметров могут влиять на уровень задержки, которую испытывает конкретный блок.
Блок FFT является примером компонента, который не имеет никакой алгоритмической задержки. Таймер Simulink не записывает течения времени, в то время как блок вычисляет БПФ входа, и преобразованные данные доступны при выводе в том же временном шаге, что вход получен. Существует много других блоков, которые имеют нулевую алгоритмическую задержку, такую как блоки в библиотеках Matrices и Linear Algebra. Каждый из тех блоков обрабатывает свой вход и генерирует его вывод в одном временном шаге.
Блок Normalization является примером блока с нулевой алгоритмической задержкой:
В подсказке команды MATLAB введите ex_normalization_tut
.
Модель Normalization Example T1 открывается.
Дважды кликните блок Signal From Workspace. Диалоговое окно Source Block Parameters: Signal From Workspace открывается.
Установите параметры блоков можно следующим образом:
Signal = 1:100
Sample time = 1/4
Samples per frame = 4
Сохраните эти параметры и закройте диалоговое окно путем нажатия на OK.
Запустите модель.
Модель предварительно ожидает текущее значение таймера Simulink вывод от блока Digital Clock до каждого выходного кадра.
Блок Signal From Workspace генерирует новый кадр, содержащий четыре выборки один раз во второй (T fo = π*4). Первые несколько выходных кадров:
(t=0) [ 1 2 3 4]' (t=1) [ 5 6 7 8]' (t=2) [ 9 10 11 12]' (t=3) [13 14 15 16]' (t=4) [17 18 19 20]'
В подсказке команды MATLAB введите squeeze(dsp_examples_yout)'
.
Нормированный вывод, dsp_examples_yout
, преобразован в более легкий к чтению матричный формат. Результат, ans
, показывают в следующей фигуре:
ans = 0 0.0333 0.0667 0.1000 0.1333 1.0000 0.0287 0.0345 0.0402 0.0460 2.0000 0.0202 0.0224 0.0247 0.0269 3.0000 0.0154 0.0165 0.0177 0.0189 4.0000 0.0124 0.0131 0.0138 0.0146 5.0000 0.0103 0.0108 0.0113 0.0118
Первый столбец ans
является временем Simulink, обеспеченным блоком Digital Clock. Вы видите что квадратичная норма первого входа,
[1 2 3 4]' ./ sum([1 2 3 4]'.^2)
появляется в первой строке вывода (во время t =0), тот же временной шаг, что вход был получен блоком. Это указывает, что блок Normalization имеет нулевую алгоритмическую задержку.
Когда несколько блоков с нулевой алгоритмической задержкой соединяются в обратной связи, Simulink может сообщить об алгебраической ошибке цикла, и производительность может обычно страдать. Можно предотвратить алгебраические циклы путем введения по крайней мере одной выборки задержки в обратную связь, например, включением блока Delay с Delay > 0. Для получения дополнительной информации смотрите Алгебраические Концепции Цикла (Simulink).
Блок Variable Integer Delay является примером блока с алгоритмической задержкой. В следующем примере вы используете этот блок, чтобы продемонстрировать эту концепцию:
В подсказке команды MATLAB введите ex_variableintegerdelay_tut
.
Переменный Целочисленный Пример Задержки T1 открывается.
Дважды кликните блок Signal From Workspace. Диалоговое окно Source Block Parameters: Signal From Workspace открывается.
Установите параметры блоков можно следующим образом:
Signal = 1:100
Sample time = 1
Samples per frame = 1
Сохраните эти параметры и закройте диалоговое окно путем нажатия на OK.
Дважды кликните блок Constant. Диалоговое окно Source Block Parameters: Constant открывается.
Установите параметры блоков можно следующим образом:
Constant value = 3
Interpret vector parameters as 1–D = Снимает этот флажок
Sample time = 1
Нажмите OK, чтобы сохранить эти параметры и закрыть диалоговое окно.
Вход к порту Delay
блока Variable Integer Delay задает количество демонстрационных периодов, которые должны протечь, прежде чем вход к порту In
выпущен к выводу. Это значение представляет алгоритмическую задержку блока. В этом примере, поскольку входом к порту Delay
является 3
, и демонстрационный период в портах In и Delay равняется 1, затем выборка, которая прибывает в порт In блока во время t=0, выпущена к выводу во время t=3.
Дважды кликните блок Variable Integer Delay. Диалоговое окно Function Block Parameters: Variable Integer Delay открывается.
Установите параметр Initial conditions на -1
, и затем нажмите OK.
Из меню Display укажите на Signals & Ports и выберите Signal Dimensions и Wide Nonscalar Lines.
Запустите модель.
Модель должна выглядеть подобной следующей фигуре.
В подсказке команды MATLAB введите dsp_examples_yout
Вывод показывают ниже:
dsp_examples_yout = 0 -1 1 -1 2 -1 3 1 4 2 5 3
Первый столбец является временем Simulink, обеспеченным блоком Digital Clock. Второй столбец является задержанным входом. Как ожидалось вход к блоку в t =0 задерживается три выборки и появляется как четвертая выходная выборка в t =3. Можно также видеть, что первые три выходных параметров от блока Variable Integer Delay наследовали значение параметра Initial conditions блока, -1
. Этот промежуток времени, от запуска симуляции, пока первый вход не распространен к выводу, иногда называется начальной задержкой блока.
Много блоков DSP System Toolbox™ имеют определенную степень фиксированной или корректируемой алгоритмической задержки. Они включают любые блоки, алгоритмы которых полагаются на задержку или запоминающие элементы, такие как фильтры или буферы. Часто, но не всегда, такие блоки обеспечивают параметр Initial conditions, который позволяет вам задавать выходные значения, сгенерированные блоком во время начальной задержки. В других случаях начальные условия внутренне установлены к 0.
Консультируйтесь со страницами с описанием блока для характеристик задержки определенных блоков DSP System Toolbox.
При определенных обстоятельствах Simulink может обеспечить блок, чтобы задержать входные параметры дольше, чем строго требуется алгоритмом блока. Эта избыточная алгоритмическая задержка называется, определяя задачу для задержки, потому что это является результатом требований синхронизации режима управления задачами Simulink. Полная алгоритмическая задержка блока является суммой своей основной задержки и задержки управления задачами.
Алгоритмическая задержка = Основная алгоритмическая задержка + Управление задачами для задержки
Задержка управления задачами для конкретного блока может зависеть от следующего блока и образцовых характеристик:
Simulink имеет два режима управления задачами:
Однозадачность
Многозадачность
Чтобы выбрать режим, из меню Simulation, выбирают Model Configuration Parameters. В панели Select нажмите Solver. Из списка Type выберите Fixed-step
. Выберите или снимите флажок Treat each discrete rate as a separate task, чтобы задать многозадачность или однозадачный режим, соответственно.
Много многоскоростных блоков уменьшали задержку в однозадачном режиме Simulink. Проверяйте раздел “Latency” страницы с описанием многоскоростного блока для деталей. Также смотрите Основанное на времени Планирование и Генерацию кода (Simulink Coder).
Блок называется односкоростной, когда все его порты ввода и вывода действуют в той же частоте кадров. Блок называется многоскоростной, когда по крайней мере один порт ввода или вывода имеет различную частоту кадров, чем другие.
Много блоков являются постоянно односкоростными. Это означает, что все порты ввода и вывода всегда имеют ту же частоту кадров. Для других блоков настройки параметров блоков определяют, является ли блок односкоростным или многоскоростным. Только многоскоростные блоки подвергаются задержке управления задачами.
Simulink может сообщить об алгебраической ошибке цикла, если он обнаруживает обратную связь, состоявшую полностью из многоскоростных блоков. Чтобы повредить такой алгебраический цикл, вставьте односкоростной блок с ненулевой задержкой, такой как блок Unit Delay. Для получения дополнительной информации смотрите Алгебраические Концепции Цикла (Simulink).
Когда все порты всех блоков в модели действуют в одной частоте кадров, модель называется односкоростная. Когда модель содержит блоки с отличающейся частотой кадров или по крайней мере один многоскоростной блок, модель называется многоскоростная. Обратите внимание на то, что Simulink препятствует тому, чтобы односкоростная модель запустилась в многозадачном режиме путем генерации ошибки.
Много блоков могут действовать или в основанных на выборке или в основанных на кадре режимах обработки. Чтобы выбрать, можно установить параметр Input processing блока к Columns as channels (frame based)
или Elements as channels (sample based)
.
Определенный объем управления задачами для задержки, созданной конкретной комбинацией параметров блоков и настроек симуляции, обсужден в разделе “Latency” страницы с описанием блока. В этой теме вы используете страницу с описанием блока Upsample, чтобы предсказать задержку управления задачами модели:
В подсказке команды MATLAB введите ex_upsample_tut1
.
Модель Upsample Example T1 открывается.
Из меню Simulation выберите Model Configuration Parameters.
В панели Solver, из списка Type, выбирают Fixed-step
. Из списка Solver выберите discrete (no continuous states)
.
Установите флажок Treat each discrete rate as a separate task и нажмите OK.
Большая часть многоскоростного опыта блоков, определяющего задачу для задержки только в многозадачном режиме Simulink.
Дважды кликните блок Signal From Workspace. Диалоговое окно Source Block Parameters: Signal From Workspace открывается.
Установите параметры блоков можно следующим образом, и затем нажмите OK:
Signal = 1:100
Sample time = 1/4
Samples per frame = 4
Form output after final data value by = Setting to zero
Дважды кликните блок Upsample. Диалоговое окно Function Block Parameters: Upsample открывается.
Установите параметры блоков можно следующим образом, и затем нажмите OK:
Upsample factor, L = 4
Sample offset (0 to L-1) = 0
Input processing = Columns as channels (frame based)
Rate options = Allow multirate processing
Initial condition = -1
Параметр Rate options делает модель многоскоростной, поскольку частота кадров ввода и вывода не будет равна.
Дважды кликните блок Digital Clock. Диалоговое окно Source Block Parameters: Digital Clock открывается.
Установите параметр Sample time на 0.25
, и затем нажмите OK.
Это совпадает с демонстрационным периодом блока Upsample вывод.
Запустите модель.
Модель должна теперь выглядеть подобной следующей фигуре.
Модель предварительно ожидает текущее значение таймера Simulink, от блока Digital Clock, к каждому выходному кадру.
В примере блок Signal From Workspace генерирует новый кадр, содержащий четыре выборки один раз во второй ( Tfo = π*4). Первые несколько выходных кадров:
(t=0) [ 1 2 3 4] (t=1) [ 5 6 7 8] (t=2) [ 9 10 11 12] (t=3) [13 14 15 16] (t=4) [17 18 19 20]
Блок Upsample сверхдискретизировал вход фактором 4, вставляя три нуля между каждой входной выборкой. Изменение в уровнях подтверждено Тестовыми блоками в модели, которые показывают уменьшение в период кадра от Tfi = 1 к Tfo = 0.25.
В подсказке команды MATLAB введите squeeze(dsp_examples_yout)'
.
Вывод от симуляции отображен в матричном формате. Первые несколько выборок результата, ans
:
“Задержка и Начальные условия” на странице с описанием блока Upsample указывают, что, когда Simulink находится в многозадачном режиме, первая выборка входа блока появляется в выводе как демонстрационный Mi L+D+1, где Mi является входным форматом кадра, L является Upsample factor, и D является Sample offset. Эта формула предсказывает, что первый вход в этом примере должен появиться как выходная выборка 17 (то есть, 4*4+0+1).
Первый столбец вывода является временем Simulink, обеспеченным блоком Digital Clock. Эти четыре значения справа от каждого раза являются значениями в выходном кадре в то время. Вы видите, что первая выборка в каждом из первых четырех выходных кадров наследовала значение блока Upsample параметр Initial conditions. В результате задержки управления задачами первое входное значение появляется как первая выборка 5-го выходного кадра (в t =1). Это демонстрационное 17.
Теперь попытайтесь запустить модель в однозадачном режиме.
Из меню Simulation выберите Model Configuration Parameters.
В панели Solver, из списка Type, выбирают Fixed-step
. Из списка Solver выберите Discrete (no continuous states)
.
Снимите флажок Treat each discrete rate as a separate task.
Запустите модель.
Модель теперь запускается в однозадачном режиме.
В подсказке команды MATLAB введите squeeze(dsp_examples_yout)'
.
Первые несколько выборок результата, ans
:
“Задержка и Начальные условия” на странице с описанием блока Upsample указывают, что блок имеет нулевую задержку для всех многоскоростных операций в однозадачном режиме Simulink.
Первый столбец вывода является временем Simulink, обеспеченным блоком Digital Clock. Эти четыре значения справа от каждого раза являются значениями в выходном кадре в то время. Первое входное значение появляется как первая выборка первого выходного кадра (в t =0). Это - ожидаемое поведение для условия нулевой задержки. Для конкретных установок параметров, используемых в этом примере, запуская upsample_tut1
в однозадачном режиме, устраняет задержку с 17 выборками, которая присутствует, когда вы запускаете модель в многозадачном режиме.
Вы теперь успешно использовали страницу с описанием блока Upsample, чтобы предсказать задержку управления задачами модели.