Main Content

非直達の更新および出力の使用

updateImploutputImpl および isInputDirectFeedthroughImpl メソッドを使用して、System object™ の非直達を実装します。非直達では、出力は、その時点での入力ではなく、オブジェクトの内部状態とプロパティにのみ依存します。これらのメソッドを使用して、出力計算を System object の状態更新から分離します。これらの 2 つのメソッドを実装して stepImpl メソッドをオーバーライドします。これらのメソッドにより、オブジェクトをフィードバック ループで使用して代数ループを防止できます。

matlab.System クラスからのサブクラス化

updateImploutputImpl および isInputDirectFeedthroughImpl メソッドを使用するには、matlab.System からのサブクラス化を行わなければなりません。

 classdef IntegerDelaySysObj < matlab.System 

オブジェクトへの更新の実装

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 
   % 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 

参考

関数

関連するトピック