Skip to Main Content Skip to Search
Product Documentation

frest.findSources - Identify time-varying source blocks

Syntax

blocks = frest.findSources(model)
blocks = frest.findSources(model,io)

Description

blocks = frest.findSources(model) finds all time-varying source blocks in the signal path of any output linearization point marked in the Simulink model model.

blocks = frest.findSources(model,io) finds all time-varying source blocks in the signal path of any output linearization point specified in the array of linearization points io.

Tips

Input Arguments

model

String containing the name, in single quotes, of the Simulink model in which you are identifying time-varying source blocks for frequency response estimation.

io

Array of linearization I/O points.

The elements of io are linearization I/O objects that you create with getlinio or linio. frest.findSources uses only the output points to locate time-varying source blocks that can interfere with frequency response estimation. See Algorithms for more information.

Output Arguments

blocks

Array of Simulink.BlockPath objects identifying the block paths of all time-varying source blocks in model that can interfere with frequency response estimation. The blocks argument includes time-varying source blocks inside subsystems and normal-mode referenced models.

If you provide io, blocks contains all time-varying source blocks contributing to the signal at the output points in io.

If you do not provide io, blocks contains all time-varying source blocks contributing to the signal at the output points marked in model.

Examples

Estimate the frequency response of a model having time-varying source blocks. This example shows the use of frest.findSources to identify time-varying source blocks that interfere with frequency response estimation. You can also see the use of BlocksToHoldConstant option of frestimateOptions to disable time-varying source blocks in the estimation.

Load the model scdspeed_ctrlloop.

mdl = 'scdspeed_ctrlloop';
open_system(mdl)
% Convert referenced model to normal mode for accuracy 
set_param('scdspeed_ctrlloop/Engine Model',...
                    'SimulationMode','Normal');

First, view the effects of time-varying source blocks on frequency response estimation. To do so, perform the estimation without disabling time-varying source blocks.

In this example, linearization I/O points are already defined in the model. Use the getlinio command to get the I/O points for frestimate.

io = getlinio(mdl)

Define a sinestream signal and compute the estimated frequency response sysest.

in = frest.Sinestream('Frequency',logspace(1,2,10),...
              'NumPeriods',30,'SettlingPeriods',25);
[sysest,simout] = frestimate(mdl,io,in);

Perform exact linearization, and compare to the estimated response.

sys = linearize(mdl,io);
bodemag(sys,sysest,'r*')

The estimated frequency response does not match the exact linearization. The mismatch occurs because time-varying source blocks in the model prevent the response from reaching steady state.

Find the time-varying blocks using frest.findSources.

srcblks = frest.findSources(mdl);

srcblks is an array of block paths corresponding to the time-varying source blocks in the model. To examine the result, index into the array.

For example, entering

srcblks(2)

returns the result

ans = 

  Simulink.BlockPath
  Package: Simulink

  Block Path:
    'scdspeed_ctrlloop/Engine Model'
      'scdspeed_plantref/Drag Torque/Step1'

Now you can estimate the frequency response without the contribution of the time-varying source blocks. To do so, set the BlocksToHoldConstant option of frestimateOptions equal to srcblks, and run the estimation.

opts = frestimateOptions
opts.BlocksToHoldConstant = srcblks
% Run frestimate again with blocks disabled
 [sysest2,simout2] = frestimate(mdl,io,in,opts);

The frequency response estimate now provides a good match to the exact linearization result.

bodemag(sys,sysest2,'r*')

Algorithms

To locate time-varying source blocks that can interfere with frequency response estimation, frest.findSources begins at each output linearization point in the model. From each output point, the algorithm traces every signal path backward block by block. The algorithm reports any source block (a block with no input port) it discovers, unless that source block is a Constant or Ground block.

The frest.findSources algorithm traces every signal path that can affect the signal value at each linearization output point in the model. The paths traced include:

For example, consider the model scdspeed_ctrlloop. This model has one linearization output point, located at the output of the Sum block labeled Speed Output. (The frest.findSources algorithm ignores linearization input points.) Before running frest.findSources, convert the referenced model to normal simulation mode:

set_param('scdspeed_ctrlloop/Engine Model',...
                       'SimulationMode','Normal');

You can now run frest.findSources to identify the time-varying source blocks using the linearization output point defined in the model.

 srcblks = frest.findSources('scdspeed_ctrlloop');

The algorithm begins at the output point and traces back through the Sum block Speed Output. One input to Speed Output is the subsystem External Disturbance. The algorithm enters the subsystem, finds the source block labeled Step Disturbance, and reports that block.

The Sum block Speed Output has another input, which the algorithm traces back into the referenced model Engine Model. Engine Model contains several subsystems, and the algorithm traces the signal through these subsystems to identify any time-varying source blocks present.

For example, the Combustion subsystem includes the From block marked delta that routes the signal from the Spark Advance source. Because Spark Advance is a constant source block, however, the algorithm does not report the presence of the block.

The algorithm continues the trace until all possible signal paths contributing to the signal at each output linearization point are examined.

Alternatives

You can use the Simulink Model Advisor to determine whether time-varying source blocks exist in the signal path of output linearization points in your model. To do so, use the Model Advisor check "Identify time-varying source blocks interfering with frequency response estimation." For more information about using the Model Advisor, see Consulting the Model Advisor in the Simulink User's Guide.

See Also

frestimate | frestimateOptions

How To

  


Free Control Systems Interactive Kit

Learn more about resources for designing, testing, and implementing control systems.

Get free kit

Trials Available

Try the latest control systems products.

Get trial software
 © 1984-2012- The MathWorks, Inc.    -   Site Help   -   Patents   -   Trademarks   -   Privacy Policy   -   Preventing Piracy   -   RSS