# Create Uncertain Frequency Response Data Models

Uncertain frequency responses (`ufrd`

) arise naturally when computing the frequency response of an uncertain state-space model (`uss`

). They also arise when frequency response data in an `frd`

model object is combined with an uncertain matrix (`umat`

) such as by adding, multiplying, or concatenating.

To take the frequency response of an uncertain state-space model, use the `ufrd`

command. Construct an uncertain state-space model.

p1 = ureal('p1',10,'pe',50); p2 = ureal('p2',3,'plusm',[-.5 1.2]); p3 = ureal('p3',0); A = [-p1 p2;0 -p1]; B = [-p2;p2+p3]; C = [1 0;1 1-p3]; D = [0;0]; sys = ss(A,B,C,D)

Uncertain continuous-time state-space model with 2 outputs, 1 inputs, 2 states. The model uncertainty consists of the following blocks: p1: Uncertain real, nominal = 10, variability = [-50,50]%, 2 occurrences p2: Uncertain real, nominal = 3, variability = [-0.5,1.2], 2 occurrences p3: Uncertain real, nominal = 0, variability = [-1,1], 2 occurrences Type "sys.NominalValue" to see the nominal value and "sys.Uncertainty" to interact with the uncertain elements.

Compute the uncertain frequency response of the uncertain system. Use `ufrd`

command with a frequency grid of 100 points. The result is an uncertain frequency response model object, a `ufrd`

model.

sysg = ufrd(sys,logspace(-2,2,100))

Uncertain continuous-time FRD model with 2 outputs, 1 inputs, 100 frequency points. p1: Uncertain real, nominal = 10, variability = [-50,50]%, 2 occurrences p2: Uncertain real, nominal = 3, variability = [-0.5,1.2], 2 occurrences p3: Uncertain real, nominal = 0, variability = [-1,1], 2 occurrences Type "sysg.NominalValue" to see the nominal value and "sysg.Uncertainty" to interact with the uncertain elements.

### Properties of `ufrd`

Model Objects

View the properties of the model object.

get(sysg)

Frequency: [100x1 double] FrequencyUnit: 'rad/TimeUnit' ResponseData: [2x1x100x1 umat] NominalValue: [2x1 frd] Uncertainty: [1x1 struct] InputDelay: 0 OutputDelay: [2x1 double] InputName: {''} InputUnit: {''} InputGroup: [1x1 struct] OutputName: {2x1 cell} OutputUnit: {2x1 cell} OutputGroup: [1x1 struct] Notes: [0x1 string] UserData: [] Name: '' Ts: 0 TimeUnit: 'seconds' SamplingGrid: [1x1 struct]

The properties `ResponseData`

and `Frequency`

behave the same as the corresponding properties in Control System Toolbox™ `frd`

objects, except that `ResponseData`

is an uncertain matrix (`umat`

). The properties `InputName`

, `OutputName`

, `InputGroup`

, and `OutputGroup`

behave in exactly the same manner as for all of the Control System Toolbox model objects such as `ss`

, `zpk`

, `tf`

, and `frd`

.

The `NominalValue`

property is an `frd`

object. Hence all functions you can use to analyze `frd`

objects can also analyze `ufrd`

objects. are available. When you use analysis commands such as `bode`

or `step`

with an uncertain model, the command plots random samples of the response to give you a sense of the variation. For instance, plot sampled Bode responses of the system along with the nominal response, using a dot marker so that you can see the individual frequency points.

bode(sysg,'r.',sysg.NominalValue,'b.')

Just as with `umat`

uncertain matrices and `uss`

uncertain models, the `Uncertainty`

property of the `ufrd`

model is a structure containing the uncertain elements. In the model `sysg`

, all uncertain elements are `ureal`

parameters. Change the nominal value of the uncertain element `p1`

within `sysg`

to 14, and plot the Bode response of the (new) nominal system.

sysg.Uncertainty.p1.NominalValue = 14

Uncertain continuous-time FRD model with 2 outputs, 1 inputs, 100 frequency points. p1: Uncertain real, nominal = 14, variability = [-50,50]%, 2 occurrences p2: Uncertain real, nominal = 3, variability = [-0.5,1.2], 2 occurrences p3: Uncertain real, nominal = 0, variability = [-1,1], 2 occurrences Type "sysg.NominalValue" to see the nominal value and "sysg.Uncertainty" to interact with the uncertain elements.

bode(sysg.NominalValue)

### Lifting an `frd`

Model to a `ufrd`

Model

A non-uncertain frequency response model is equivalent to an uncertain frequency response model with no uncertain elements. Use the `ufrd`

command to “lift” an `frd`

model to the `ufrd`

class.

sys = rss(3,2,1); sysg = frd(sys,logspace(-2,2,100)); usysg = ufrd(sysg)

Uncertain continuous-time FRD model with 2 outputs, 1 inputs, 100 frequency points, and no uncertain blocks. Type "usysg.NominalValue" to see the nominal value and "usysg.Uncertainty" to interact with the uncertain elements.

You can also lift arrays of `frd`

objects. See Array Management for Uncertain Objects for more information about how arrays of uncertain objects are handled.