perturb
Appliquer des perturbations à un objet
Syntaxe
Description
applique les perturbations définies sur l'objet, offsets
= perturb(obj
)obj
et renvoie les valeurs de décalage. Vous pouvez définir des perturbations sur l'objet en utilisant la fonction perturbations
.
Exemples
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 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.
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
Arguments d'entrée
Objet de perturbation, spécifié comme objet. Les objets que vous pouvez perturber incluent :
Arguments de sortie
Décalages de propriété, renvoyés sous forme de tableau de structures. Chaque structure contient ces champs :
Nom de domaine | Description |
---|---|
Property | Nom de la propriété perturbée |
Offset | Valeurs de décalage appliquées dans la perturbation |
PerturbedValue | Valeurs des propriétés après la perturbation |
Historique des versions
Introduit dans R2020b
Voir aussi
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Sélectionner un site web
Choisissez un site web pour accéder au contenu traduit dans votre langue (lorsqu'il est disponible) et voir les événements et les offres locales. D’après votre position, nous vous recommandons de sélectionner la région suivante : .
Vous pouvez également sélectionner un site web dans la liste suivante :
Comment optimiser les performances du site
Pour optimiser les performances du site, sélectionnez la région Chine (en chinois ou en anglais). Les sites de MathWorks pour les autres pays ne sont pas optimisés pour les visites provenant de votre région.
Amériques
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)