Использование обновления и выведенный для непрямого сквозного соединения

Реализуйте непрямое сквозное соединение для Системы object™ при помощи updateImpl, outputImpl и методов isInputDirectFeedthroughImpl. В непрямом сквозном соединении выходные параметры зависят только от внутренних состояний и свойств объекта, а не входа в тот момент вовремя. Вы используете эти методы, чтобы разделить выходное вычисление от обновлений состояния Системного объекта. Реализация этих двух методов заменяет метод stepImpl. Эти методы позволяют вам использовать объект в обратной связи и предотвратить алгебраические циклы.

Разделение на подклассы от непрямого класса Mixin

Чтобы использовать updateImpl, outputImpl и методы isInputDirectFeedthroughImpl, необходимо разделить на подклассы и от базового класса matlab.System и от класса mixin 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 

Смотрите также

| | |

Похожие темы