Documentation |
blocks = frest.findSources(model)
blocks = frest.findSources(model,io)
blocks = frest.findSources(model) finds all time-varying source blocks in the signal path of any linearization output point marked in the Simulink^{®} model model.
blocks = frest.findSources(model,io) finds all time-varying source blocks in the signal path of any linearization output point specified in the array of linear analysis points io.
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. |
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. |
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*')
You can use the Simulink Model Advisor to determine whether time-varying source blocks exist in the signal path of output linear analysis 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 Run Model Checks in the Simulink User's Guide.