Выполните интегрирование или накопление сигнала в дискретном времени
Simulink/Обычно используемые блоки
Simulink/Дискретный
HDL-кодер/дискретный
Операции HDL-кодера/HDL с плавающей точкой
Используйте Discrete-Time Integrator блок вместо блока Integrator, чтобы создать чисто дискретную модель. С помощью блока Discrete-Time Integrator можно:
Задайте начальные условия в диалоговом окне блока или как вход в блок
Задайте входное значение усиления (K)
Вывод состояния блока
Задайте верхний и нижний пределы интеграла
Сбросьте состояние с дополнительным входом сброса
С первым временным шагом состояния блока n = 0
, с любым начальным выходом y(0) = IC
или начальное состояние x(0) = IC
, в зависимости от Initial condition setting значения параметров.
Для заданного шага n > 0
со временем симуляции t(n)
, Simulink® обновляет выходные y(n)
следующим образом:
Переадресация Метода Эйлера:
y(n) = y(n-1) + K*[t(n) - t(n-1)]*u(n-1)
Метод Эйлера:
y(n) = y(n-1) + K*[t(n) - t(n-1)]*u(n)
Метод трапеций:
y(n) = y(n-1) + K*[t(n)-t(n-1)]*[u(n)+u(n-1)]/2
Simulink автоматически выбирает реализацию в пространстве состояний этих выходных уравнений в зависимости от шага расчета блока, которое может быть явным или запускаемым. При использовании явного шага расчета t(n)-t(n-1)
сокращается до шага расчета T
для всех n > 0
.
Этот блок может интегрировать или накопить сигнал с помощью прямого Эйлера, обратного Эйлера или трапеций. Предположим, что u
является входом, y
- выход, и x
является состоянием. Для заданного шага n
, Simulink обновляется y(n)
и x(n+1)
. В режиме интегрирования T
- шаг расчета блока (дельта T
в случае срабатывания шага расчета). В режиме накопления T = 1
. Шаг расчета блока определяет, когда выход вычисляется, но не выходное значение. K
- значение усиления. Значения зажимаются в соответствии с верхними или нижними пределами.
Прямой Метод Эйлера (по умолчанию), также известная как прямоугольная вперед, или левая аппроксимация
Программное обеспечение аппроксимирует 1/s
как T/(z-1)
. Выражения для выхода блока на шаге n
являются:
x(n+1) = x(n) + K*T*u(n) y(n) = x(n)
Блок использует следующие шаги, чтобы вычислить выход:
Step 0: y(0) = IC (clip if necessary) x(1) = y(0) + K*T*u(0) Step 1: y(1) = x(1) x(2) = x(1) + K*T*u(1) Step n: y(n) = x(n) x(n+1) = x(n) + K*T*u(n) (clip if necessary)
Используя этот метод, входной порт 1 не имеет прямого сквозного соединения.
Метод Эйлера, также известный как прямоугольное или правое приближение
Программное обеспечение аппроксимирует 1/s
как T*z/(z-1)
. Получившееся выражение для выхода блока на шаге n
является
y(n) = y(n-1) + K*T*u(n).
Позвольте x(n) = y((n)-1)
. Блок использует эти шаги, чтобы вычислить выход.
Если для Initial condition setting параметра задано значение Output
или Auto
для триггерных и подсистемы вызова функций:
Step 0: y(0) = IC (clipped if necessary) x(1) = y(0)
Если для Initial condition setting параметра задано значение Auto
для не срабатывающих подсистем:
Step 0: x(0) = IC (clipped if necessary) x(1) = y(0) = x(0) + K*T*u(0) Step 1: y(1) = x(1) + K*T*u(1) x(2) = y(1) Step n: y(n) = x(n) + K*T*u(n) x(n+1) = y(n)
Используя этот метод, входной порт 1 имеет прямое сквозное соединение.
Для этого метода программное обеспечение аппроксимирует 1/s
как T/2*(z+1)/(z-1)
.
Когда T
является фиксированным (равным периоду дискретизации), выражения для вычисления выхода:
x(n) = y(n-1) + K*T/2*u(n-1) y(n) = x(n) + K*T/2*u(n)
Если для Initial condition setting параметра задано значение Output
или Auto
для триггерных и подсистемы вызова функций:
Step 0: y(0) = IC (clipped if necessary) x(1) = y(0) + K*T/2*u(0)
Если для Initial condition setting параметра задано значение Auto
для не срабатывающих подсистем:
Step 0: x(0) = IC (clipped if necessary) y(0) = x(0) + K*T/2*u(0) x(1) = y(0) + K*T/2*u(0) Step 1: y(1) = x(1) + K*T/2*u(1) x(2) = y(1) + K*T/2*u(1) Step n: y(n) = x(n) + K*T/2*u(n) x(n+1) = y(n) + K*T/2*u(n)
Здесь, x(n+1)
- лучшая оценка следующего выхода. Это не то же самое, что и состояние, в том x(n)
не равно y(n)
.
Используя этот метод, входной порт 1 имеет прямое сквозное соединение.
Когда T
является переменной (для примера, полученной от времени запуска), блок использует эти шаги, чтобы вычислить выход.
Если для Initial condition setting параметра задано значение Output
или Auto
для триггерных и подсистемы вызова функций:
Step 0: y(0) = IC (clipped if necessary) x(1) = y(0)
Если для Initial condition setting параметра задано значение Auto
для не срабатывающих подсистем:
Step 0: x(0) = IC (clipped if necessary) x(1) = y(0) = x(0) + K*T/2*u(0) Step 1: y(1) = x(1) + T/2*(u(1) + u(0)) x(2) = y(1) Step n: y(n) = x(n) + T/2*(u(n) + u(n-1)) x(n+1) = y(n)
Можно задать начальные условия как параметр в диалоговом окне блока или ввести их из внешнего сигнала:
Чтобы определить начальные условия как параметры блоков, установите параметр Initial condition source равным internal
и введите значение в текстовое поле Initial condition.
Чтобы обеспечить начальные условия от внешнего источника, установите параметр Initial condition source равным external
. На блоке появляется дополнительный входной порт.
Используйте порт состояния вместо порта выхода:
Когда выход блока подается назад в блок через порт сброса или порт начального условия, вызывая алгебраический цикл. Для получения примера см. sldemo_bounce_two_integrators
модель.
Когда вы хотите передать состояние от одной условно выполненной подсистемы к другой, что может вызвать проблемы с синхронизацией. Для получения примера смотрите Создание модели блокировки сцепления.
Можно обойти эти проблемы, передав состояние через порт состояния, а не через порт выхода. Simulink генерирует состояние в немного отличное от выхода, что защищает вашу модель от этих проблем. Чтобы вывести состояние блока, установите флажок Show state port. Порт состояния появляется в верхней части блока.
Чтобы сохранить выход на определенных уровнях, установите флажок Limit output и введите пределы в соответствующее текстовое поле. Это заставляет блок функционировать как ограниченный интегратор. Когда выход достигает пределов, интегральное действие отключается, чтобы предотвратить интегральное отображение. Во время симуляции можно изменить пределы, но нельзя изменить, является ли выход ограниченным. Таблица показывает, как блок определяет выход.
Интеграл | Выход |
---|---|
Меньше чем или равно Lower saturation limit, и вход отрицателен | Проводится в Lower saturation limit |
Между Lower saturation limit и Upper saturation limit | Интеграл |
Больше или равно Upper saturation limit, и вход положителен | Проводится в Upper saturation limit |
Чтобы сгенерировать сигнал, который указывает, когда состояние ограничено, установите флажок Show saturation port. Новый порт насыщения появляется под выходным блоком.
Сигнал насыщения имеет одно из трех значений:
1 указывает, что применяется верхний предел.
0 указывает, что интеграл не ограничен.
-1 указывает, что применяется нижний предел.
Блок переводит свое состояние в заданное начальное условие, основанное на внешнем сигнале. Чтобы заставить блок сбросить свое состояние, выберите одну из External reset опций параметра. Появляется порт сброса, который указывает на тип триггера сброса.
Порт сброса имеет прямое сквозное соединение. Если блок выводит обратно в этот порт, либо непосредственно, либо через серию блоков с прямым сквозным соединением, получается алгебраический цикл. Чтобы разрешить этот цикл, передайте выход порта состояния блока в порт сброса. Чтобы получить доступ к состоянию блока, установите флажок Show state port.
Параметр External reset позволяет вам определить атрибут сигнала сброса, который запускает сброс. Опции триггера включают:
rising
- Устанавливает состояние, когда сигнал сброса имеет восходящее ребро. Для примера этот рисунок показывает эффект, который повышающий триггер сброса имеет на обратном интегрировании Эйлера.
falling
- Устанавливает состояние, когда сигнал сброса имеет падающее ребро. Для примера этот рисунок показывает эффект, который падающий триггер сброса имеет на обратном интегрировании Эйлера.
either
- Устанавливает состояние, когда сигнал сброса повышается или падает. Для примера следующий рисунок показывает эффект, который любой из триггеров сброса имеет на обратном интегрировании Эйлера.
level
- Сбрасывает и удерживает выход в начальном условии, в то время как сигнал сброса ненулевой. Для примера этот рисунок показывает эффект, который триггер сброса уровня имеет на обратном интегрировании Эйлера.
sampled level
- Переводит выход в начальное условие, когда сигнал сброса ненулевой. Для примера этот рисунок показывает эффект, который дискретизированный триггер сброса уровня имеет на обратном интегрировании Эйлера.
The sampled level
опция сброса требует меньшего количества расчетов, что делает его более эффективным, чем level
опция сброса.
Примечание
Для блока Discrete-Time Integrator все обнаружения триггеров основаны на сигналах с положительными значениями. Для примера сигнал, изменяющийся от -1 до 0, не считается повышающимся ребром, но сигнал, изменяющийся от 0 до 1, есть.
Упрощенный режим инициализации включен, когда вы задаете Underspecified initialization detection Simplified
в диалоговом окне Параметры конфигурации. Если вы используете упрощенный режим инициализации, поведение блока Discrete-Time Integrator отличается от классического режима инициализации. Новое поведение инициализации является более устойчивым и обеспечивает более последовательное поведение в этих случаях:
В алгебраических циклах
Включить и отключить
При сравнении результатов с использованием инициированного шага расчета с явным временем расчета, где блок запускается с той же скоростью, что и явный шаг расчета
Упрощенный режим инициализации позволяет легче преобразовывать блоки из Continuous-Time Integrator в блоки Discrete-Time Integrator, потому что начальные условия имеют одинаковое значение для обоих блоков.
Для получения дополнительной информации о классических и упрощенных режимах инициализации, см. «Недоопределенное обнаружение инициализации».
Когда вы используете упрощенный режим инициализации с Initial condition setting установленным на Output
для триггерных и подсистемы вызова функций включение и отключение поведения блока упрощается следующим образом.
Во время отключения td
:
y(td) = y(td-1)
Во время включения te
:
Если для родительского порта управления подсистемы States when enabling задано значение reset
:
y(te) = IC.
Если для родительского порта управления подсистемы States when enabling задано значение held
:
y(te) = y(td).
Следующий рисунок показывает это условие.
При использовании упрощенного режима инициализации вы не можете поместить Discrete-Time Integrator блок в блок подсистемы итератора.
В упрощенном режиме инициализации подсистемы итератор не поддерживают истекшее время. Таким образом, если блок Discrete-Time Integrator, которому нужно прошедшее время, помещен внутри блока подсистемы итератора, Simulink сообщает об ошибке.
Предположим, что у вас есть подсистема вызова функций, которая включает в себя активированную подсистему, которая содержит блок Интегратора Дискретного Времени. Применимо следующее поведение.
Метод интегратора | Тип шага расчета порта триггера вызова функции | Значение delta T Когда Подсистема вызова функций выполняет в первый раз после включения | Причина поведения |
---|---|---|---|
Форвардный Эйлер | Вызванный |
| Когда подсистема вызова функций выполняется впервые, алгоритм интегратора использует |
Обратный Эйлер и Трапеций | Вызванный |
| Когда подсистема вызова функций выполняется впервые, алгоритм интегратора использует |
Прямая Эйлер, Обратная Эйлер и Трапеция | Периодический | Шаг расчета генератора вызова функции | В периодическом режиме блок Discrete-Time Integrator использует шаг расчета генератора вызова функции для |
Типы данных |
|
Прямое сквозное соединение |
|
Многомерные сигналы |
|
Сигналы переменного размера |
|
Обнаружение пересечения нулем |
|