Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

perturb

Aplicar perturbaciones al objeto.

Descripción

offsets = perturb(obj) aplica las perturbaciones definidas en el objeto, obj y devuelve los valores de desplazamiento. Puede definir perturbaciones en el objeto utilizando la función perturbations.

ejemplo

Ejemplos

contraer todo

Defina la trayectoria de un waypoint. Por defecto, esta trayectoria contiene dos puntos de referencia.

traj = waypointTrajectory
traj = 
  waypointTrajectory with properties:

         SampleRate: 100
    SamplesPerFrame: 1
          Waypoints: [2×3 double]
      TimeOfArrival: [2×1 double]
         Velocities: [2×3 double]
             Course: [2×1 double]
        GroundSpeed: [2×1 double]
          ClimbRate: [2×1 double]
        Orientation: [2×1 quaternion]
          AutoPitch: 0
           AutoBank: 0
     ReferenceFrame: 'NED'

Define perturbaciones en la propiedad Waypoints y la propiedad TimeOfArrival.

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"    {1×2 cell}    {[0.5000 0.5000]}

Perturbar la trayectoria.

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

La propiedad Waypoints y la propiedad TimeOfArrival han cambiado.

traj.Waypoints
ans = 2×3

    1.8674    1.0203    0.7032
    2.3154   -0.3207    0.0999

traj.TimeOfArrival
ans = 2×1

     0
     2

Crea un objeto insSensor.

sensor = insSensor
sensor = 
  insSensor with properties:

           MountingLocation: [0 0 0]            m    
               RollAccuracy: 0.2                deg  
              PitchAccuracy: 0.2                deg  
                YawAccuracy: 1                  deg  
           PositionAccuracy: [1 1 1]            m    
           VelocityAccuracy: 0.05               m/s  
       AccelerationAccuracy: 0                  m/s² 
    AngularVelocityAccuracy: 0                  deg/s
                  TimeInput: 0                       
               RandomStream: 'Global stream'         

Define la perturbación en la propiedad RollAccuracy como tres valores con la misma posibilidad cada uno.

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=7×3 table
            Property                Type                        Value                 
    _________________________    ___________    ______________________________________

    "RollAccuracy"               "Selection"    {1×3 cell}    {[0.3333 0.3333 0.3333]}
    "PitchAccuracy"              "None"         {[   NaN]}    {[                 NaN]}
    "YawAccuracy"                "None"         {[   NaN]}    {[                 NaN]}
    "PositionAccuracy"           "None"         {[   NaN]}    {[                 NaN]}
    "VelocityAccuracy"           "None"         {[   NaN]}    {[                 NaN]}
    "AccelerationAccuracy"       "None"         {[   NaN]}    {[                 NaN]}
    "AngularVelocityAccuracy"    "None"         {[   NaN]}    {[                 NaN]}

Perturbe el objeto sensor utilizando la función perturbar.

rng(2020)
perturb(sensor);
sensor
sensor = 
  insSensor with properties:

           MountingLocation: [0 0 0]            m    
               RollAccuracy: 0.5                deg  
              PitchAccuracy: 0.2                deg  
                YawAccuracy: 1                  deg  
           PositionAccuracy: [1 1 1]            m    
           VelocityAccuracy: 0.05               m/s  
       AccelerationAccuracy: 0                  m/s² 
    AngularVelocityAccuracy: 0                  deg/s
                  TimeInput: 0                       
               RandomStream: 'Global stream'         

El RollAccuracy se perturba a 0.5 grados.

Crea un objeto imuSensor y muestra sus propiedades perturbables.

imu = imuSensor;
perturbations(imu)
ans=17×3 table
                   Property                    Type           Value       
    ______________________________________    ______    __________________

    "Accelerometer.MeasurementRange"          "None"    {[NaN]}    {[NaN]}
    "Accelerometer.Resolution"                "None"    {[NaN]}    {[NaN]}
    "Accelerometer.ConstantBias"              "None"    {[NaN]}    {[NaN]}
    "Accelerometer.NoiseDensity"              "None"    {[NaN]}    {[NaN]}
    "Accelerometer.BiasInstability"           "None"    {[NaN]}    {[NaN]}
    "Accelerometer.RandomWalk"                "None"    {[NaN]}    {[NaN]}
    "Accelerometer.TemperatureBias"           "None"    {[NaN]}    {[NaN]}
    "Accelerometer.TemperatureScaleFactor"    "None"    {[NaN]}    {[NaN]}
    "Gyroscope.MeasurementRange"              "None"    {[NaN]}    {[NaN]}
    "Gyroscope.Resolution"                    "None"    {[NaN]}    {[NaN]}
    "Gyroscope.ConstantBias"                  "None"    {[NaN]}    {[NaN]}
    "Gyroscope.NoiseDensity"                  "None"    {[NaN]}    {[NaN]}
    "Gyroscope.BiasInstability"               "None"    {[NaN]}    {[NaN]}
    "Gyroscope.RandomWalk"                    "None"    {[NaN]}    {[NaN]}
    "Gyroscope.TemperatureBias"               "None"    {[NaN]}    {[NaN]}
    "Gyroscope.TemperatureScaleFactor"        "None"    {[NaN]}    {[NaN]}
      ⋮

Especifique la perturbación de la propiedad NoiseDensity del acelerómetro como una distribución uniforme.

perturbations(imu,'Accelerometer.NoiseDensity', ...
    'Uniform',1e-5,1e-3);

Especifique la perturbación de la propiedad RandomWalk del giroscopio como una distribución normal truncada.

 perts = perturbations(imu,'Gyroscope.RandomWalk', ...
    'TruncatedNormal',2,1e-5,0,Inf);

Cargue datos IMU pregrabados.

load imuSensorData.mat 
numSamples = size(orientations);

Simule imuSensor tres veces con diferentes realizaciones de perturbación.

rng(2021); % For repeatable results
numRuns = 3;
colors = ['b' 'r' 'g'];
for idx = 1:numRuns

    % Clone IMU to maintain original values
    imuCopy = clone(imu);

    % Perturb noise values
    offsets = perturb(imuCopy);

    % Obtain the measurements 
    [accelReadings,gyroReadings] = imuCopy(accelerations,angularVelocities,orientations);
    
    % Plot the results
    plot(times,gyroReadings(:,3),colors(idx));
    hold on;
end
xlabel('Time (s)')
ylabel('Z-Component of Gyro Readings (rad/s)')
legend("First Pass","Second Pass","Third Pass");
hold off

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Z-Component of Gyro Readings (rad/s) contains 3 objects of type line. These objects represent First Pass, Second Pass, Third Pass.

Argumentos de entrada

contraer todo

Objeto de perturbación, especificado como objeto. Los objetos que puedes perturbar incluyen:

Argumentos de salida

contraer todo

Compensaciones de propiedad, devueltas como un arreglo de estructuras. Cada estructura contiene estos campos:

Nombre del campoDescripción
PropertyNombre de la propiedad perturbada
OffsetValores de compensación aplicados en la perturbación.
PerturbedValueValores de propiedad después de la perturbación.

Historial de versiones

Introducido en R2020b

Consulte también