Main Content

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

skyplot

Trazar datos de elevación y acimut del satélite

Desde R2021a

Descripción

skyplot(azdata,eldata) crea un gráfico del cielo utilizando los datos de acimut y elevación especificados como matrices en grados. Los ángulos de azimut se miden en grados, en el sentido de las agujas del reloj desde la dirección norte. Los ángulos de elevación se miden desde la línea del horizonte, siendo 90 grados directamente hacia arriba. Para obtener detalles sobre los elementos de la figura del diagrama del cielo, consulte Elementos principales de la gráfica del cielo.

ejemplo

skyplot(azdata,eldata,labeldata) especifica etiquetas de datos como un arreglo de cadenas con elementos correspondientes a cada punto de datos en las entradas azdata y eldata .

skyplot(status) especifica los datos de acimut y elevación en una estructura con los campos SatelliteAzimuth y SatelliteElevation.

skyplot(___,Name,Value) especifica opciones utilizando uno o más argumentos de nombre-valor además de los argumentos de entrada en sintaxis anteriores. Los argumentos de nombre-valor son propiedades del objeto SkyPlotChart . Para obtener una lista de propiedades, consulte Propiedades SkyPlotChart.

ejemplo

skyplot(parent,___) crea el gráfico del cielo en la figura, panel o pestaña especificada por parent.

h = skyplot(___) devuelve el gráfico del cielo como un objeto SkyPlotChart , h. Utilice h para modificar las propiedades del gráfico después de crearlo. Para obtener una lista de propiedades, consulte Propiedades SkyPlotChart.

Ejemplos

contraer todo

Cree un modelo de sensor GNSS como gnssSensor System object™.

gnss = gnssSensor; 

Especifique la posición y la velocidad del sensor. Simule las lecturas del sensor y obtenga el estado de los satélites visibles. Almacene los ángulos de acimut y elevación como vectores.

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

Cree máscaras de elevación locales aleatorias, con una elevación máxima de 30 grados, para que actúen como el entorno 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)

Trazar las posiciones de los satélites con las máscaras de elevación.

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

Figure contains an object of type skyplot.

Animar la trayectoria de las posiciones de los satélites a lo largo del tiempo desde un sensor GNSS.

Inicialice la figura del trazado del cielo. Especifique la información de intervalos de tiempo relevante.

skyplotHandle = skyplot(0,0); 

Figure contains an object of type skyplot.

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

Cree un modelo de sensor GNSS como gnssSensor System Object™.

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

Repita los pasos de tiempo y haga lo siguiente:

  • Simule las lecturas del sensor. Especifique la posición cero y la velocidad del sensor estacionario.

  • Almacene los ángulos de acimut y elevación como vectores.

  • Establezca las propiedades AzimuthData y ElevationData del identificador SkyPlotChart directamente.

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.

Cargue los datos de azimut y elevación desde un archivo de registro generado por un sensor satelital GPS Adafruit®. Los datos proporcionados en este ejemplo contienen el acimut y la elevación de cada satélite y los códigos de ruido pseudoaleatorio (PRN). Almacene estos valores como vectores.

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

Separe los satélites según los códigos PRN. Para correlacionar cada posición con un grupo, cree un arreglo categorical . Para este conjunto de satélites, solo se utilizan en la solución de posicionamiento aquellos con PRN inferiores a 32.

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

Visualice los satélites y especifique los grupos categóricos en el argumento nombre-valor GroupData . Especifique el PRN como etiqueta para cada punto. Muestra la leyenda.

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

Figure contains an object of type skyplot.

Especifique la posición del receptor, el archivo de navegación RINEX, el ángulo de la máscara, el tamaño del paso de tiempo y el número de horas de datos para muestrear del archivo RINEX.

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

Lea el archivo de navegación y obtenga los datos GPS de todos los satélites capturados en el archivo.

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

Establezca la hora de inicio en la hora inicial del mensaje de navegación. Luego, crea el vector de tiempo t.

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

Inicialice vectores para azimut y elevación. Luego, recopile datos de azimut y elevación en los momentos t para todos los satélites.

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

Marque todos los satélites debajo del horizonte con una elevación inferior a 0 como faltantes.

allEl(allEl < 0) = missing;

Muestre las trayectorias de los satélites como una animación creando un diagrama del cielo y actualizando las propiedades AzimuthData y 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.

Argumentos de entrada

contraer todo

Ángulos de azimut para posiciones de satélites visibles, especificados como un vector de ángulos n o t-por- n matriz de ángulos. n es el número de posiciones de satélites visibles en el gráfico, y t es el número de pasos de tiempo de los satélites. Los ángulos de azimut se miden en grados, en el sentido de las agujas del reloj desde la dirección norte.

Ejemplo: [25 45 182 356] especifica los ángulos de azimut para cuatro satélites en un paso de tiempo.

Tipos de datos: double

Ángulos de elevación para posiciones de satélites visibles, especificados como un vector de ángulos n o t-por- n matriz de ángulos. n es el número de posiciones de satélites visibles en el gráfico, y t es el número de pasos de tiempo de los satélites. Los ángulos de elevación se miden desde la línea del horizonte, siendo 90 grados directamente hacia arriba.

Ejemplo: [45 90 27 74] especifica los ángulos de elevación para cuatro satélites en un paso de tiempo.

Tipos de datos: double

Etiquetas para posiciones de satélites visibles, especificadas como un arreglo de cadenas de elementos n . n es el número de posiciones de satélite visibles en el gráfico.

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

Tipos de datos: string

Estado del satélite, especificado como un arreglo de estructura con los campos SatelliteAzimuth y SatelliteElevation. Normalmente, esta estructura de estado proviene de un objeto gnssSensor , que simula las posiciones y velocidades de los satélites.

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

Tipos de datos: struct

Contenedor principal, especificado como Figure, Panel, Tab, TiledChartLayout o GridLayout objeto.

Argumentos de salida

contraer todo

Gráfico de trazado del cielo, devuelto como un objeto SkyPlotChart , que es un standalone visualization. Utilice h para establecer propiedades en el gráfico del cielo. Para obtener más información, consulte Propiedades SkyPlotChart.

Más acerca de

contraer todo

Elementos principales de la gráfica del cielo

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

Los principales elementos de la figura son:

  • Ejes de azimut: especificados por el argumento de entrada azdata , las posiciones de los ángulos de azimut se miden en el sentido de las agujas del reloj desde la dirección Norte.

  • Ejes de elevación: especificados por el argumento de entrada eldata , las posiciones de los ángulos de elevación se miden desde la línea del horizonte con 90 grados directamente hacia arriba.

  • Etiquetas: especificadas por el argumento de entrada labeldata como un arreglo de cadenas con un elemento para cada punto en los vectores azdata y eldata .

  • Grupos: especificado por la propiedad GroupData , un arreglo categorical define el grupo para cada posición de satélite.

Visualización independiente

Una visualización independiente es un gráfico diseñado para un propósito especial que funciona independientemente de otros gráficos. A diferencia de otros gráficos como plot y surf, una visualización independiente tiene un objeto de ejes preconfigurado integrado y algunas personalizaciones no están disponibles. Una visualización independiente también tiene estas características:

  • No se puede combinar con otros elementos gráficos, como líneas, parches o superficies. Por lo tanto, el comando hold no es compatible.

  • La función gca puede devolver el objeto del gráfico como los ejes actuales.

  • Puede pasar el objeto de gráfico a muchas funciones MATLAB® que aceptan un objeto de ejes como argumento de entrada. Por ejemplo, puede pasar el objeto del gráfico a la función title .

Historial de versiones

Introducido en R2021a

expandir todo

Consulte también

Funciones

Propiedades

Objetos