Main Content

处理调整后的属性

此示例说明如何指定当可调属性值在仿真过程中更改时要执行的操作。

processTunedPropertiesImpl 方法对于管理操作以避免重复执行十分有用。在许多情况下,更改多个相互依赖的属性之一会导致执行某个操作。通过 processTunedPropertiesImpl 方法,您可以控制执行该操作的时间,以使其不会被不必要地重复执行。

控制生成查找表的时间

以下示例的 processTunedPropertiesImpl 将导致在 NumNotesMiddleC 属性更改时重新生成 pLookupTable

methods  (Access = protected)
   function processTunedPropertiesImpl(obj)
      propChange = isChangedProperty(obj,'NumNotes')||...
         isChangedProperty(obj,'MiddleC')
      if propChange
         obj.pLookupTable = obj.MiddleC *...
           (1+log(1:obj.NumNotes)/log(12));
      end
    end
end

包含调整后的属性处理的完整类定义文件

classdef TuningFork < matlab.System
  % TuningFork Illustrate the processing of tuned parameters
  %
  
  properties
    MiddleC = 440
    NumNotes = 12
  end
  
  properties (Access = private)
    pLookupTable
  end
  
  methods (Access = protected)
    function resetImpl(obj)
      obj.MiddleC = 440;
      obj.pLookupTable = obj.MiddleC * ...
         (1+log(1:obj.NumNotes)/log(12));
    end
    
    function hz = stepImpl(obj,noteShift)
      % A noteShift value of 1 corresponds to obj.MiddleC
      hz = obj.pLookupTable(noteShift);
    end
    
    function processTunedPropertiesImpl(obj)
      propChange = isChangedProperty(obj,'NumNotes')||...
         isChangedProperty(obj,'MiddleC')
      if propChange
         obj.pLookupTable = obj.MiddleC *...
           (1+log(1:obj.NumNotes)/log(12));
      end
  end
end

另请参阅