This example shows how to implement an algorithm with tunable parameters by using a MATLAB System block.
System objects allow you to implement algorithms using MATLAB. System objects are a specialized kind of MATLAB object, designed specifically for implementing and simulating dynamic systems with inputs that change over time.
After you define a System object, you can include it in a Simulink model using a MATLAB System block.
The MATLAB System block implements the System object
TunableNontunableProperties that multiples input by a
Gain parameter and adds a
Bias parameter to the input. The input to MATLAB System block is provided by a Constant block and the Display block shows the result of applying the gain and bias. The
Gain parameter is tunable and can be changed when the simulation is running. The
Bias parameter is nontunable and cannot be changed during the simulation. When the model is running, you can change tunable properties, but you cannot change nontunable properties.
You can access MATLAB source code used by the MATLAB System block by clicking the "Source Code" hyperlink from the block dialog. The System object
TunableNontunableProperties implements the
processTunedPropertiesImpl methods. The System object has two public properties:
Bias property has the attribute Nontunable, which makes this property read-only during simulation. The
Gain property has no attributes, so by default, it is tunable and can be modified during the simulation.
The System object has a private property called
pGain stores the value of the public
Gain property after the range of
Gain is restricted between 1 and 2. You can initialize
pGain by copying the value of
Gain in the
setupImpl method. In this example,
pGain is used in the
stepImpl method to compute the output. In a System object, whenever public tunable properties are changed,
processTunedPropertiesImpl is called. In this example,
processTunedPropertiesImpl updates the private property
pGain based on the value from the public
classdef TunableNontunableProperties < matlab.System % TunableNontunableProperties Multiply input by Gain and add Bias properties Gain = 1.5 end properties(Nontunable) Bias = 0.1 end properties(Access = private) pGain end methods(Access = protected) function setupImpl(obj, ~) % Copy public property value Gain to private property pGain and % restrict its range between 1 and 2 obj.pGain = obj.Gain; if obj.pGain < 1 obj.pGain = 1; elseif obj.pGain > 2 obj.pGain = 2; end end function y = stepImpl(obj, u) y = u * obj.pGain + obj.Bias; end function processTunedPropertiesImpl(obj) % Update private property pGain from the public Gain property % and restrict its range between 1 and 2. obj.pGain = obj.Gain; if obj.pGain < 1 obj.pGain = 1; elseif obj.pGain > 2 obj.pGain = 2; end end end end