Задержка и задержка

Вычислительная задержка

Вычислительная задержка блока или подсистемы связана с количеством операций, участвующих в выполнении этого блока или подсистемы. Для пример блока БПФ, работающего на 256-выборочном входе, требуется Simulink® программное обеспечение для выполнения определенного количества умножений для каждого входного кадра. Фактическое количество времени, которое эти операции потребляют, в большой степени зависит от эффективности как компьютерного оборудования, так и базовых программных слоев, таких как MATLAB® окружения и операционной системы. Поэтому вычислительная задержка для конкретной модели может варьироваться от одной компьютерной платформы к другой.

Время симуляции, представленное в строке состояния модели, к которой можно получить доступ через блок Simulink Digital Clock, не предоставляет никакой информации о вычислительной задержке. Для примера, согласно таймеру Simulink, БПФ, упомянутый выше, выполняется мгновенно без задержки. Вход в блок FFT во времени симуляции t = 25.0 обрабатывается и выводится во время симуляции t = 25.0, независимо от количества операций, выполненных алгоритмом БПФ. Таймер Simulink отражает только алгоритмическую задержку, а не вычислительную задержку.

Уменьшите вычислительную задержку

Существует ряд способов уменьшить вычислительную задержку, не запуская симуляцию на более быстром оборудовании. Для начала необходимо ознакомиться с Manual Performance Optimization (Simulink), которая описывает некоторые основные стратегии. В следующей информации рассматриваются несколько опции повышения эффективности.

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

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

  • Используйте шаблоны модели DSP Simulink, чтобы настроить Simulink для моделирования цифровой обработки сигналов. Для получения дополнительной информации смотрите Настройте окружение Simulink для моделей обработки сигналов.

  • Отключите строку состояния Simulink. На вкладке Modeling снимите флажок Environment > Status Bar. Скорость симуляции улучшится, но индикатор времени не будет виден.

  • Запустите симуляцию из командной строки MATLAB путем ввода

    sim(gcs)
    

    Этот метод запуска симуляции может значительно увеличить скорость симуляции, но также имеет несколько ограничений:

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

    • Необходимо нажать Ctrl+C, чтобы остановить моделирование или задать начало и времена остановки.

    • В MATLAB S-функциях нет обновлений графики.

  • Используйте программное обеспечение Simulink Coder™ генерации кода, чтобы сгенерировать общий код в реальном времени (GRT), нацеленный на вашу главную платформу, и запустить модель с помощью сгенерированного исполняемого файла. Для получения дополнительной информации см. документацию Simulink Coder.

Алгоритмическая задержка

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

Алгоритмическая задержка конкретного блока может зависеть как от настроек параметров блоков, так и от общих настроек Simulink. Для упрощения, полезно классифицировать задержку блока с помощью следующих категорий:

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

Нулевая алгоритмическая задержка

Блок FFT является примером компонента, который не имеет алгоритмической задержки. Таймер Simulink не записывает какой-либо промежуток времени, в то время как блок вычисляет БПФ входного сигнала, и преобразованные данные доступны на выходе в том же временном шаге, что и вход принимается. Существует много других блоков, которые имеют нулевую алгоритмическую задержку, таких как блоки в библиотеках Matrices и Линейная Алгебра. Каждый из этих блоков обрабатывает свой вход и генерирует его выход за один временной шаг.

Блок Normalization является примером блока с нулевой алгоритмической задержкой:

  1. В командной строке MATLAB введите ex_normalization_tut.

    Откроется модель T1 Пример.

  2. Дважды кликните блок Signal From Workspace. Откроется диалоговое окно Source Block Parameters: Signal From Workspace.

  3. Установите параметры блоков следующим образом:

    • Signal = 1:100

    • Sample time = 1/4

    • Samples per frame = 4

  4. Сохраните эти параметры и закройте диалоговое окно нажатием кнопки OK.

  5. Запустите модель.

    Модель подготавливает текущее значение таймера Simulink, выводимого из блока Digital Clock, к каждой выходной системе координат.

    Блок Signal From Workspace генерирует новый кадр, содержащий четыре выборки один раз в секунду (T  fo  = Первые несколько выходные системы координат:

    (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]'
    
  6. В командной строке 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)».

Базовая алгоритмическая задержка

Блок Переменная Целочисленная Задержка является примером блока с алгоритмической задержкой. В следующем примере вы используете этот блок, чтобы продемонстрировать эту концепцию:

  1. В командной строке MATLAB введите ex_variableintegerdelay_tut.

    Откроется T1 Пример целочисленной задержки Переменной.

  2. Дважды кликните блок Signal From Workspace. Откроется диалоговое окно Source Block Parameters: Signal From Workspace.

  3. Установите параметры блоков следующим образом:

    • Signal = 1:100

    • Sample time = 1

    • Samples per frame = 1

  4. Сохраните эти параметры и закройте диалоговое окно нажатием кнопки OK.

  5. Дважды кликните блок Константа (Constant). Откроется диалоговое окно Source Block Parameters: Constant.

  6. Установите параметры блоков следующим образом:

    • Constant value = 3

    • Interpret vector parameters as 1–D = Снять этот флажок

    • Sample time = 1

    Щелкните OK, чтобы сохранить эти параметры и закрыть диалоговое окно.

    Вход в Delay порт блока Variable Целого числа Delay задает количество периодов дискретизации, которое должно пройти перед входом в In порт освобождается на выход. Это значение представляет алгоритмическую задержку блока. В этом примере, начиная с входа в Delay порт 3, и период дискретизации в портах In и Delay равен 1, затем выборка, которая приходит к порту In блока в момент t = 0, освобождается на выход в момент t = 3.

  7. Дважды кликните блок Переменная Целочисленная Задержка. Откроется диалоговое окно Function Block Parameters: Variable Integer Delay.

  8. Установите параметр Initial conditions равным -1, а затем нажмите OK.

  9. На вкладке Debug выберите Information Overlays > Signal Dimensions и Nonscalar Signals.

  10. Запустите модель.

    Модель должна выглядеть аналогично следующему рисунку.

  11. В командной строке 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. Можно также увидеть, что первые три выхода из блока Переменная Целочисленная Задержка наследуют значение параметра Initial conditions блока , -1. Этот период времени, от начала симуляции до распространения первого входа на выход, иногда называется начальной задержкой блока.

Многие блоки DSP System Toolbox™ имеют некоторую степень фиксированной или регулируемой алгоритмической задержки. К ним относятся любые блоки, алгоритмы которых полагаются на элементы задержки или памяти, такие как фильтры или буферы. Часто, но не всегда, такие блоки обеспечивают параметр Initial conditions, который позволяет вам задавать выходные значения, сгенерированные блоком во время начальной задержки. В других случаях начальные условия внутренне устанавливаются на 0.

Обратитесь к страницам с описанием блоков за характеристиками задержки определенных блоков DSP System Toolbox.

Избыточная алгоритмическая задержка (задержка задачи)

При определенных обстоятельствах Simulink может заставить блок задержек входа больше, чем строго требуется алгоритмом блока. Эта избыточная алгоритмическая задержка называется задержкой задачи, потому что она возникает из-за требований синхронизации режима задачи Simulink. Общая алгоритмическая задержка блока является суммой его основной задержки и задержки задачи.

Алгоритмическая задержка = Основная алгоритмическая задержка + Задержка задачи

Задержка задачи для конкретного блока может зависеть от следующих характеристик блока и модели:

Режим задачи Simulink

Simulink имеет два режима постановки задач:

  • Однозадачность

  • Многозадачность

На вкладке Modeling нажмите Model Settings. На панели Solver выберите Type > Fixed-step. Разверните Solver details. Чтобы задать многозадачный режим, выберите Treat each discrete rate as a separate task. Чтобы задать однозадачный режим, снимите Treat each discrete rate as a separate task.

Примечание

Многие многократные блоки имеют уменьшенную задержку в однозадачном режиме Simulink. Подробную информацию см. в разделе «Задержка» страницы с описанием многоуровневого блока. Также смотрите Основанное на времени Планирование и Генерация кода (Simulink Coder).

Блок типа скорости

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

Многие блоки являются постоянно односкоростными. Это означает, что все входные и выходные порты всегда имеют одинаковую частоту систем координат. Для других блоков настройки параметров блоков определяют, является ли блок односкоростным или мультирейтовым. Задержке задачи подвержены только многократные блоки.

Примечание

Simulink может сообщить об алгебраической ошибке цикла, если он обнаруживает цикл обратной связи, состоящий полностью из многократных блоков. Чтобы прервать такой алгебраический цикл, вставьте блок с одной скоростью с ненулевой задержкой, такой как блок Unit Delay. Для получения дополнительной информации см. «Алгебраические Циклы Концепций (Simulink)».

Тип скорости модели

Когда все порты всех блоков в модели работают с одной системой координат, модель называется односкоростной. Когда модель содержит блоки с различной системой координат или, по крайней мере, один мультирейтовый блок, модель называется мультирейтовой. Обратите внимание, что Simulink препятствует запуску односкоростной модели в многозадачном режиме путем генерации ошибки.

Режим обработки входного сигнала блока

Многие блоки могут работать или в основанном на выборке, или в основанном на кадре режиме обработки. Для выбора можно задать параметр Input processing блока равным Columns as channels (frame based) или Elements as channels (sample based).

Предсказание задержки задачи

Конкретная величина задержки задачи, созданная определенной комбинацией параметров блоков и настроек симуляции, обсуждается в разделе «Задержка» страницы с описанием блока. В этой теме вы используете страницу с описанием блока Upsample, чтобы предсказать задержку задачи модели:

  1. В командной строке MATLAB введите ex_upsample_tut1.

    Откроется модель T1 Пример.

  2. На вкладке Modeling нажмите Model Settings.

  3. На панели Solver из списка Type выберите Fixed-step. Из списка Solver выберите discrete (no continuous states).

  4. Разверните Solver details. Выберите Treat each discrete rate as a separate task и нажмите OK.

    Большинство многократных блоков испытывают задержку задания только в многозадачном режиме Simulink.

  5. Дважды кликните блок Signal From Workspace. Откроется диалоговое окно Source Block Parameters: Signal From Workspace.

  6. Установите параметры блоков следующим образом и нажмите OK:

    • Signal = 1:100

    • Sample time = 1/4

    • Samples per frame = 4

    • Form output after final data value by = Setting to zero

  7. Дважды кликните блок Upsample. Откроется диалоговое окно Function Block Parameters: Upsample.

  8. Установите параметры блоков следующим образом и нажмите 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 делает модель мультирейтовой, поскольку входная и выходная частоты систем координат не будут одинаковыми.

  9. Дважды кликните блок Цифровые часы. Откроется диалоговое окно Source Block Parameters: Digital Clock.

  10. Установите параметр Sample time равным 0.25, а затем нажмите OK.

    Это соответствует периоду дискретизации выхода блока Upsample.

  11. Запустите модель.

    Теперь модель должна выглядеть аналогично следующему рисунку.

    Модель подготавливает текущее значение таймера Simulink, от блока Digital Clock, к каждой выходной системе координат.

    В примере блок Signal From Рабочей области генерирует новую систему координат, содержащую четыре выборки один раз в секунду ( 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 раза, вставляя три нуля между каждой входной выборкой. Изменение скоростей подтверждается блоками Probe в модели, которые показывают уменьшение периода системы координат с Tfi = 1 до Tfo = 0,25.

  12. В командной строке MATLAB введите squeeze(dsp_examples_yout)'.

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

    «Latency and Initial Условий» в странице с описанием блока Upsample указывает, что, когда Simulink находится в многозадачном режиме, первая выборка входа блока появляется в выходе как выборка Mi L + D + 1, где Mi - размер входного кадра, L - Upsample factor, а D - Sample offset. Эта формула предсказывает, что первый вход в этом примере должен появиться как выход выборочный 17 (то есть 4 * 4 + 0 + 1).

    Первый столбец выхода является временем Simulink, предоставленным блоком Digital Clock. Четыре значения справа от каждого времени являются значениями в выход системы координат в то время. Можно увидеть, что первая выборка в каждом из первых четырёх выходных систем координат наследует значение параметра Initial conditions блока Upsample. В результате задержки задачи первый вход значение появляется в качестве первой выборки 5-го выхода системы координат (в t = 1). Это образец 17.

    Теперь попробуйте запустить модель в однозадачном режиме.

  13. На вкладке Modeling нажмите Model Settings.

  14. На панели Solver из списка Type выберите Fixed-step. Из списка Solver выберите Discrete (no continuous states).

  15. Очистите параметр Treat each discrete rate as a separate task.

  16. Запустите модель.

    Теперь модель запускается в однозадачном режиме.

  17. В командной строке MATLAB введите squeeze(dsp_examples_yout)'.

    Первые несколько выборки результата, ansявляются:

    «Задержка и начальные условия» на странице с описанием блока Upsample указывает, что блок имеет нулевую задержку для всех многоразовых операций в однозадачном режиме Simulink.

    Первый столбец выхода является временем Simulink, предоставленным блоком Digital Clock. Четыре значения справа от каждого времени являются значениями в выход системы координат в то время. Первый вход значение появляется как первый образец первого выхода системы координат (при t = 0). Это ожидаемое поведение для условия нулевой задержки. Для конкретных настроек параметра, используемых в этом примере, выполните upsample_tut1 в однозадачном режиме устраняет задержку с 17 образцами, которая присутствует при запуске модели в многозадачном режиме.

Теперь вы успешно использовали страницу с описанием блока Upsample, чтобы предсказать задержку задачи модели.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте