# perturb

Apply perturbations to object

## Syntax

``offsets = perturb(obj)``

## Description

example

````offsets = perturb(obj)` applies the perturbations defined on the object, `obj`. You can define perturbations on the object by using the `perturbations` function. ```

## Examples

collapse all

Define a waypoint trajectory. By default, this trajectory contains two waypoints.

`traj = waypointTrajectory`
```traj = waypointTrajectory with properties: SampleRate: 100 SamplesPerFrame: 1 Waypoints: [2x3 double] TimeOfArrival: [2x1 double] Velocities: [2x3 double] Course: [2x1 double] GroundSpeed: [2x1 double] ClimbRate: [2x1 double] Orientation: [2x1 quaternion] AutoPitch: 0 AutoBank: 0 ReferenceFrame: 'NED' ```

Define perturbations on the `Waypoints` property and the `TimeOfArrival` property.

```rng(2020); perturbs1 = perturbations(traj,'Waypoints','Normal',1,1)```
```perturbs1=2×3 table Property Type Value _______________ ________ __________________ "Waypoints" "Normal" {[ 1]} {[ 1]} "TimeOfArrival" "None" {[NaN]} {[NaN]} ```
`perturbs2 = perturbations(traj,'TimeOfArrival','Selection',{[0;1],[0;2]})`
```perturbs2=2×3 table Property Type Value _______________ ___________ __________________________ "Waypoints" "Normal" {[ 1]} {[ 1]} "TimeOfArrival" "Selection" {1x2 cell} {1x2 double} ```

Perturb the trajectory.

`offsets = perturb(traj)`
```offsets=2×1 struct array with fields: Property Offset PerturbedValue ```

The `Waypoints` property and the `TimeOfArrival` property have changed.

`traj.Waypoints`
```ans = 2×3 1.8674 1.0203 0.7032 2.3154 -0.3207 0.0999 ```
`traj.TimeOfArrival`
```ans = 2×1 0 2 ```

Create an `insSensor` object.

`sensor = insSensor`
```sensor = insSensor with properties: RollAccuracy: 0.2 deg PitchAccuracy: 0.2 deg YawAccuracy: 1 deg PositionAccuracy: 1 m VelocityAccuracy: 0.05 m/s RandomStream: 'Global stream' ```

Define the perturbation on the `RollAccuracy `property as three values with an equal possibility each.

`values = {0.1 0.2 0.3}`
```values=1×3 cell array {[0.1000]} {[0.2000]} {[0.3000]} ```
`probabilities = [1/3 1/3 1/3]`
```probabilities = 1×3 0.3333 0.3333 0.3333 ```
`perturbations(sensor,'RollAccuracy','Selection',values,probabilities)`
```ans=5×3 table Property Type Value __________________ ___________ __________________________ "RollAccuracy" "Selection" {1x3 cell} {1x3 double} "PitchAccuracy" "None" {[ NaN]} {[ NaN]} "YawAccuracy" "None" {[ NaN]} {[ NaN]} "PositionAccuracy" "None" {[ NaN]} {[ NaN]} "VelocityAccuracy" "None" {[ NaN]} {[ NaN]} ```

Perturb the `sensor` object using the perturb function.

```rng(2020) perturb(sensor); sensor```
```sensor = insSensor with properties: RollAccuracy: 0.5 deg PitchAccuracy: 0.2 deg YawAccuracy: 1 deg PositionAccuracy: 1 m VelocityAccuracy: 0.05 m/s RandomStream: 'Global stream' ```

The `RollAccuracy` is perturbed to `0.5` deg.

## Input Arguments

collapse all

Object for perturbation, specified as an object. The objects that you can perturb includes:

## Output Arguments

collapse all

Property offsets, returned as an array of structures. Each structure contains these fields:

Field NameDescription
`Property`Name of perturbed property
`Offset`Offset values applied in the perturbation
`PerturbedValue`Property values after the perturbation