Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

perturbations

Perturbation définie sur l'objet

Depuis R2020b

Description

exemple

perturbs = perturbations(obj) renvoie la liste des perturbations de la propriété, perturbs, définies sur l'objet, obj. Le perturbs renvoyé répertorie toutes les propriétés perturbables. Si une propriété n'est pas perturbée, alors son Type correspondant est renvoyé sous la forme "Null" et son Value correspondant est renvoyé sous la forme {Null,Null}.

perturbs = perturbations(obj,property) renvoie la perturbation actuelle appliquée au property spécifié.

perturbs = perturbations(obj,property,'None') définit un property qui ne doit pas être perturbé.

exemple

perturbs = perturbations(obj,property,'Selection',values,probabilities) définit le décalage de perturbation property tiré d'un ensemble de values qui ont un probabilities correspondant.

perturbs = perturbations(obj,property,'Normal',mean,deviation) définit le décalage de perturbation property tiré d'une distribution normale avec mean spécifié et deviation standard.

perturbs = perturbations(obj,property,'TruncatedNormal',mean,deviation,lowerLimit,upperLimit) définit le décalage de perturbation property tiré d'une distribution normale avec mean, standard deviation, limite inférieure et limite supérieure.

exemple

perturbs = perturbations(obj,property,'Uniform',minVal,maxVal) définit le décalage de perturbation property tiré d'une distribution uniforme sur un intervalle [minVal, maxValue].

perturbs = perturbations(obj,property,'Custom',perturbFcn) vous permet de définir une fonction personnalisée, perturbFcn, qui dessine la valeur de décalage de perturbation.

Exemples

réduire tout

Créez un objet waypointTrajectory .

traj = waypointTrajectory;

Affichez les propriétés de perturbation par défaut à l'aide de la méthode perturbations .

perturbs = perturbations(traj)
perturbs=2×3 table
       Property         Type           Value       
    _______________    ______    __________________

    "Waypoints"        "None"    {[NaN]}    {[NaN]}
    "TimeOfArrival"    "None"    {[NaN]}    {[NaN]}

Créez un objet 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: [1⨯1 logical]           
               RandomStream: 'Global stream'         

Définissez la perturbation sur la propriété RollAccuracy comme trois valeurs avec chacune une possibilité égale.

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"    {1x3 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]}

Perturbez l'objet sensor en utilisant la fonction perturber.

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: [1⨯1 logical]           
               RandomStream: 'Global stream'         

Le RollAccuracy est perturbé à 0.5 deg.

Définissez une trajectoire de waypoint. Par défaut, cette trajectoire contient deux 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'

Définir les perturbations sur la propriété Waypoints et la propriété 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"    {1x2 cell}    {[0.5000 0.5000]}

Perturber la trajectoire.

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

La propriété Waypoints et la propriété TimeOfArrival ont changé.

traj.Waypoints
ans = 2×3

    1.8674    1.0203    0.7032
    2.3154   -0.3207    0.0999

traj.TimeOfArrival
ans = 2×1

     0
     2

Créez un objet imuSensor et affichez ses propriétés 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]}
      ⋮

Spécifiez la perturbation pour la propriété NoiseDensity de l'accéléromètre sous forme de distribution uniforme.

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

Spécifiez la perturbation pour la propriété RandomWalk du gyroscope sous la forme d'une distribution normale tronquée.

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

Chargez les données IMU préenregistrées.

load imuSensorData.mat 
numSamples = size(orientations);

Simulez le imuSensor trois fois avec différentes réalisations de perturbations.

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.

Arguments d'entrée

réduire tout

Objet à perturber, spécifié comme objet. Les objets que vous pouvez perturber incluent :

Propriété perturbable, spécifiée comme nom de propriété. Utilisez perturbations pour obtenir une liste complète des propriétés perturbables pour le obj spécifié.

Pour le imuSensor System object™, vous pouvez perturber les propriétés de ses composants accéléromètre, gyroscope et magnétomètre. Pour plus de détails, voir l'exemple Perturber imuSensor Paramètres .

Valeurs de décalage de perturbation, spécifiées sous la forme d'un cell array d'éléments n de valeurs de propriété. La fonction tire de manière aléatoire la valeur de perturbation de la propriété à partir du cell array en fonction des probabilités correspondantes des valeurs spécifiées dans l'entrée probabilities .

Dessiner des probabilités pour chaque valeur de perturbation, spécifiées sous la forme d'un tableau d'éléments n de scalaires non négatifs, où n est le nombre de valeurs de perturbation fournies dans le values Entrée . La somme de tous les éléments doit être égale à un.

Par exemple, vous pouvez spécifier une série de paires valeur-probabilité de perturbation comme suit : {x1, x2,…, xn} et {p1, p2,…, pn}, où la probabilité de tirer xi est pi (i = 1, 2, …,n).

Moyenne de la distribution normale ou normale tronquée, spécifiée sous forme scalaire, vectorielle ou matricielle. La dimension de mean doit être compatible avec la propriété correspondante que vous perturbez.

Écart type de la distribution normale ou normale tronquée, spécifié comme scalaire non négatif, vecteur de scalaires non négatifs ou matrice de scalaires non négatifs. La dimension de deviation doit être compatible avec la propriété correspondante que vous perturbez.

Limite inférieure de la distribution normale tronquée, spécifiée sous forme scalaire, vectorielle ou matricielle. La dimension de lowerLimit doit être compatible avec la propriété correspondante que vous perturbez.

Limite supérieure de la distribution normale tronquée, spécifiée sous forme scalaire, vectorielle ou matricielle. La dimension de upperLimit doit être compatible avec la propriété correspondante que vous perturbez.

Valeur minimale de l'intervalle de distribution uniforme, spécifiée sous forme scalaire, vectorielle ou matricielle. La dimension de minVal doit être compatible avec la propriété correspondante que vous perturbez.

Valeur maximale de l'intervalle de distribution uniforme, spécifiée sous forme scalaire, vectorielle ou matricielle. La dimension de maxVal doit être compatible avec la propriété correspondante que vous perturbez.

Fonction de perturbation, spécifiée comme handle de fonction. La fonction doit avoir cette syntaxe :

offset = myfun(propVal)
propVal est la valeur de property et offset est la compensation de perturbation pour la propriété.

Arguments de sortie

réduire tout

Perturbations définies sur l'objet, renvoyées sous forme de tableau de propriétés de perturbation. Le tableau comporte trois colonnes :

  • Property — Noms des propriétés.

  • Type — Type de perturbations, renvoyé sous la forme "None", "Selection", "Normal", "TruncatedNormal", "Uniform" ou "Custom".

  • Value — Valeurs de perturbation, renvoyées sous forme de cell array.

En savoir plus

réduire tout

Spécifier les distributions de perturbations

Vous pouvez spécifier la distribution de la perturbation appliquée à une propriété spécifique.

  • Distribution de sélection — La fonction définit le décalage de perturbation comme l'une des valeurs spécifiées avec la probabilité associée. Par exemple, si vous spécifiez les valeurs sous la forme [1 2] et les probabilités sous la forme [0.7 0.3], la fonction perturb ajoute une valeur de décalage de 1 à la propriété avec une probabilité de 0.7 et ajoutez une valeur de compensation de 2 à la propriété avec une probabilité de 0.3. Utilisez la distribution de sélection lorsque vous souhaitez uniquement perturber la propriété avec un certain nombre de valeurs discrètes.

  • Distribution normale — La fonction définit le décalage de perturbation comme une valeur tirée d'une distribution normale avec la moyenne et l'écart type spécifiés (ou covariance). La distribution normale est la distribution la plus couramment utilisée car elle imite la perturbation naturelle des paramètres dans la plupart des cas.

  • Distribution normale tronquée — La fonction définit le décalage de perturbation comme une valeur tirée d'une distribution normale tronquée avec la moyenne, l'écart type (ou covariance), la limite inférieure et la limite supérieure spécifiés. Contrairement à la distribution normale, les valeurs tirées d'une distribution normale tronquée sont tronquées par la limite inférieure et supérieure. Utilisez une distribution normale tronquée lorsque vous souhaitez appliquer une distribution normale, mais que les valeurs valides de la propriété sont confinées dans un intervalle.

  • Distribution uniforme — La fonction définit le décalage de perturbation comme une valeur tirée d'une distribution uniforme avec les valeurs minimales et maximales spécifiées. Toutes les valeurs de l'intervalle (spécifiées par les valeurs minimale et maximale) ont la même probabilité de réalisation.

  • Distribution personnalisée — Personnalisez votre propre fonction de perturbation. La fonction doit avoir cette syntaxe :

    offset = myfun(propVal)
    propVal est la valeur de property et offset est la compensation de perturbation pour la propriété.

Cette figure montre les fonctions de densité de probabilité pour une distribution normale, une distribution normale tronquée et une distribution uniforme, respectivement.

Perturbation Distributions

Historique des versions

Introduit dans R2020b

Voir aussi