Main Content

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

skyplot

Tracer les données d'azimut et d'élévation du satellite

Depuis R2021a

Description

exemple

skyplot(azdata,eldata) crée un tracé du ciel en utilisant les données d'azimut et d'élévation spécifiées sous forme de matrices en degrés. Les angles d'azimut sont mesurés en degrés, dans le sens des aiguilles d'une montre à partir de la direction nord. Les angles d'élévation sont mesurés à partir de la ligne d'horizon, 90 degrés étant directement vers le haut. Pour plus de détails sur les éléments de la figure du tracé du ciel, voir Principaux éléments du tracé du ciel.

skyplot(azdata,eldata,labeldata) spécifie les étiquettes de données sous forme de tableau de chaînes de caractères avec des éléments correspondant à chaque point de données dans les entrées azdata et eldata .

skyplot(status) spécifie les données d'azimut et d'élévation dans une structure avec les champs SatelliteAzimuth et SatelliteElevation.

exemple

skyplot(___,Name,Value) spécifie les options utilisant un ou plusieurs arguments nom-valeur en plus des arguments d'entrée dans les syntaxes précédentes. Les arguments nom-valeur sont des propriétés de l'objet SkyPlotChart . Pour une liste des propriétés, voir Propriétés SkyPlotChart.

skyplot(parent,___) crée le tracé du ciel dans la figure, le panneau ou l'onglet spécifié par parent.

h = skyplot(___) renvoie le tracé du ciel en tant qu'objet SkyPlotChart , h. Utilisez h pour modifier les propriétés du graphique après l'avoir créé. Pour une liste des propriétés, voir Propriétés SkyPlotChart.

Exemples

réduire tout

Créez un modèle de capteur GNSS en tant qu'objet système gnssSensor System object™.

gnss = gnssSensor; 

Spécifiez la position et la vitesse du capteur. Simulez les lectures du capteur et obtenez l'état des satellites visibles. Stockez les angles d’azimut et d’élévation sous forme de vecteurs.

pos = [0 0 0]; 
vel = [0 0 0]; 
[~, ~, status] = gnss(pos, vel); 
satAz = status.SatelliteAzimuth; 
satEl = status.SatelliteElevation; 

Créez des masques d'élévation locaux aléatoires, avec une élévation maximale de 30 degrés, pour agir en tant qu'environnement local.

rng(8)
terrainMaskElevations = 30*rand(1,12); % elevations (degrees)
terrainMaskEdges = [0 24 48 100 132 180 204 240 276 288 300 312 360]; % azimuth edges (degrees)

Tracez les positions des satellites avec les masques d'élévation.

skyplot(satAz,satEl,MaskElevation=terrainMaskElevations,MaskAzimuthEdges=terrainMaskEdges); 

Figure contains an object of type skyplot.

Animez la trajectoire des positions des satellites au fil du temps à partir d’un capteur GNSS.

Initialisez la figure du tracé du ciel. Spécifiez les informations de pas de temps pertinentes.

skyplotHandle = skyplot(0,0); 

Figure contains an object of type skyplot.

numHours = 12; 
dt = 100; 
numSeconds = numHours * 60 * 60; 
numSimSteps = numSeconds/dt;

Créez un modèle de capteur GNSS en tant que gnssSensor System Object™.

gnss = gnssSensor('SampleRate', 1/dt); 

Parcourez les étapes de temps et procédez comme suit :

  • Simulez les lectures du capteur. Spécifiez la position zéro et la vitesse du capteur stationnaire.

  • Stockez les angles d’azimut et d’élévation sous forme de vecteurs.

  • Définissez directement les propriétés AzimuthData et ElevationData du handle SkyPlotChart .

for i = 1:numSimSteps 

    [~, ~, status] = gnss([0 0 0],[0 0 0]); 

    satAz = status.SatelliteAzimuth; 
    satEl = status.SatelliteElevation; 

    set(skyplotHandle,'AzimuthData',satAz,'ElevationData',satEl);
    
    drawnow 
end 

Figure contains an object of type skyplot.

Chargez les données d'azimut et d'élévation à partir d'un fichier journal généré par un capteur satellite GPS Adafruit®. Les données fournies dans cet exemple contiennent l'azimut et l'élévation de chaque satellite ainsi que les codes de bruit pseudo-aléatoire (PRN). Stockez ces valeurs sous forme de vecteurs.

load('gpsHWInfo','hwInfo') 
satAz = hwInfo.SatelliteAzimuths; 
satEl = hwInfo.SatelliteElevations; 
prn = hwInfo.SatellitePRNs; 

Séparez les satellites en fonction des codes PRN. Pour corréler chaque position avec un groupe, créez un tableau categorical . Pour cet ensemble de satellites, seuls ceux dont les PRN sont inférieurs à 32 sont utilisés dans la solution de positionnement.

isUnused = (prn > 32);
group = categorical(isUnused,[false true],["Used in Positioning Solution" "Unused"]);

Visualisez les satellites et spécifiez les groupes catégoriels dans l'argument nom-valeur GroupData . Spécifiez le PRN comme étiquette pour chaque point. Montrez la légende.

skyplot(satAz,satEl,prn,GroupData=group) 
legend('Used','Unused')

Figure contains an object of type skyplot.

Spécifiez la position du récepteur, le fichier de navigation RINEX, l’angle du masque, la taille du pas de temps et le nombre d’heures de données à échantillonner à partir du fichier RINEX.

recPos = [42 -71 50];
navfile = "GODS00USA_R_20211750000_01D_GN.rnx";
maskAngle = 25;
dt = 60; % seconds
numHours = 4;

Lisez le fichier de navigation et obtenez les données GPS de tous les satellites capturés dans le fichier.

data = rinexread(navfile);
[~,satIdx] = unique(data.GPS.SatelliteID);
navmsg = data.GPS(satIdx,:);

Réglez l'heure de début sur l'heure initiale du message de navigation. Ensuite, créez le vecteur temporel t.

startTime = navmsg.Time(1);
secondsPerHour = 3600;
timeElapsed = 0:dt:(secondsPerHour*numHours);
t = startTime + seconds(timeElapsed);

Initialisez les vecteurs pour l'azimut et l'élévation. Ensuite, collectez les données d'azimut et d'élévation aux heures t pour tous les satellites.

numSats = numel(navmsg.SatelliteID);
allAz = NaN(numel(t),numSats);
allEl = allAz;
for idx = 1:numel(t)
    [satPos,~,satID] = gnssconstellation(t(idx),RINEXData=navmsg);
    [az,el,vis] = lookangles(recPos,satPos,maskAngle);
    allAz(idx,:) = az;
    allEl(idx,:) = el;
end

Marquez tous les satellites sous l'horizon avec une élévation inférieure à 0 comme manquants.

allEl(allEl < 0) = missing;

Affichez les trajectoires des satellites sous forme d'animation en créant un skyplot et en mettant à jour les propriétés AzimuthData et ElevationData .

figure
sp = skyplot(allAz(1,:),allEl(1,:),satID,MaskElevation=maskAngle);
for idx = 1:size(allAz, 1)
    set(sp,AzimuthData=allAz(1:idx,:),ElevationData=allEl(1:idx,:));
    drawnow limitrate
end

Figure contains an object of type skyplot.

Arguments d'entrée

réduire tout

Angles d'azimut pour les positions visibles des satellites, spécifiés comme un vecteur d'éléments n ou une matrice d'angles t-by- n . n est le nombre de positions satellites visibles dans le tracé, et t est le nombre de pas de temps des satellites. Les angles d'azimut sont mesurés en degrés, dans le sens des aiguilles d'une montre à partir de la direction nord.

Exemple : [25 45 182 356] spécifie les angles d'azimut de quatre satellites à un pas de temps.

Types de données : double

Angles d'élévation pour les positions visibles des satellites, spécifiés comme un vecteur d'éléments n ou une matrice d'angles t-by- n . n est le nombre de positions satellites visibles dans le tracé, et t est le nombre de pas de temps des satellites. Les angles d'élévation sont mesurés à partir de la ligne d'horizon, 90 degrés étant directement vers le haut.

Exemple : [45 90 27 74] spécifie les angles d'élévation de quatre satellites à un pas de temps.

Types de données : double

Étiquettes pour les positions des satellites visibles, spécifiées sous la forme d'un tableau de chaînes de caractères n-éléments . n est le nombre de positions satellite visibles dans le tracé.

Exemple : ["G1" "G11" "G7" "G3"]

Types de données : string

Statut du satellite, spécifié sous forme de tableau de structure avec les champs SatelliteAzimuth et SatelliteElevation. Généralement, cette structure de statut provient d'un objet gnssSensor , qui simule les positions et les vitesses des satellites.

Exemple : gnss = gnssSensor; [~,~,status] = gnss(position,velocity)

Types de données : struct

Conteneur parent, spécifié comme Figure, Panel, Tab, TiledChartLayout ou Objet GridLayout .

Arguments de sortie

réduire tout

Graphique du tracé du ciel, renvoyé sous la forme d'un objet SkyPlotChart , qui est un standalone visualization. Utilisez h pour définir les propriétés sur la carte du tracé du ciel. Pour plus d’informations, consultez Propriétés SkyPlotChart.

En savoir plus

réduire tout

Principaux éléments du tracé du ciel

Figure showing a circular plot for satellite positions based on azimuth and elevation angles. Zero degrees for Azimuth is directly North with positive values going clockwise. Elevation angles are shown with circular axes with the outer-circle being the horizon line or zero degrees. 90 degrees elevation is directly up or the center point of the circular plot. Positions are colored by group and have specified labels

Les principaux éléments de la figure sont :

  • Axes d'azimut — Spécifiés par l'argument d'entrée azdata , les positions de l'angle d'azimut sont mesurées dans le sens des aiguilles d'une montre à partir de la direction nord.

  • Axes d'élévation — Spécifiés par l'argument d'entrée eldata , les positions des angles d'élévation sont mesurées à partir de la ligne d'horizon, 90 degrés étant directement vers le haut.

  • Étiquettes — Spécifié par l'argument d'entrée labeldata sous la forme d'un tableau de chaînes de caractères avec un élément pour chaque point des vecteurs azdata et eldata .

  • Groupes — Spécifié par la propriété GroupData , un tableau categorical définit le groupe pour chaque position satellite.

Visualisation autonome

Une visualisation autonome est un graphique conçu dans un but particulier et qui fonctionne indépendamment des autres graphiques. Contrairement à d'autres graphiques tels que plot et surf, une visualisation autonome intègre un objet axes préconfiguré et certaines personnalisations ne sont pas disponibles. Une visualisation autonome présente également les caractéristiques suivantes :

  • Il ne peut pas être combiné avec d'autres éléments graphiques, tels que des lignes, des patchs ou des surfaces. Ainsi, la commande hold n'est pas supportée.

  • La fonction gca peut renvoyer l'objet graphique comme axes actuels.

  • Vous pouvez transmettre l'objet graphique à de nombreuses fonctions MATLAB® qui acceptent un objet axes comme argument d'entrée. Par exemple, vous pouvez passer l'objet graphique à la fonction title .

Historique des versions

Introduit dans R2021a

développer tout

Voir aussi

Fonctions

Propriétés

Objets