Реализация непрямого сквозного канала для системного object™ с помощью updateImpl, outputImpl, и isInputDirectFeedthroughImpl методы. В случае непрямого прохождения выходные данные зависят только от внутренних состояний и свойств объекта, а не от входных данных в этот момент времени. Эти методы используются для отделения вычисления выходных данных от обновлений состояния объекта System. Реализация этих двух методов переопределяет stepImpl способ. Эти методы позволяют использовать объект в цикле обратной связи и предотвращать алгебраические циклы.
Для использования updateImpl, outputImpl, и isInputDirectFeedthroughImpl методы, вы должны подкласс из обоих matlab.System базовый класс и Nondirect класс миксина.
classdef IntegerDelaySysObj < matlab.System & ... matlab.system.mixin.Nondirect
Реализация updateImpl для обновления объекта с помощью предыдущих входных данных.
methods (Access = protected) function updateImpl(obj,u) obj.PreviousInput = [u obj.PreviousInput(1:end-1)]; end end
Реализация outputImpl метод вывода предыдущего, а не текущего входного сигнала.
methods (Access = protected) function [y] = outputImpl(obj,~) y = obj.PreviousInput(end); end end
Реализация isInputDirectFeedthroughImpl метод, указывающий, что вход является непрямым.
methods (Access = protected) function flag = isInputDirectFeedthroughImpl(~,~) flag = false; end end
classdef intDelaySysObj < matlab.System &... matlab.system.mixin.Nondirect % intDelaySysObj Delay input by specified number of samples. properties InitialOutput = 0; end properties (Nontunable) NumDelays = 1; end properties (DiscreteState) PreviousInput; end methods (Access = protected) function validatePropertiesImpl(obj) if ((numel(obj.NumDelays)>1) || (obj.NumDelays <= 0)) error('Number of delays must be > 0 scalar value.'); end if (numel(obj.InitialOutput)>1) error('Initial Output must be scalar value.'); end end function setupImpl(obj) obj.PreviousInput = ones(1,obj.NumDelays)*obj.InitialOutput; end function resetImpl(obj) obj.PreviousInput = ones(1,obj.NumDelays)*obj.InitialOutput; end function [y] = outputImpl(obj,~) y = obj.PreviousInput(end); end function updateImpl(obj, u) obj.PreviousInput = [u obj.PreviousInput(1:end-1)]; end function flag = isInputDirectFeedthroughImpl(~,~) flag = false; end end end
isInputDirectFeedthroughImpl | matlab.system.mixin.Nondirect | outputImpl | updateImpl