Main Content

skyplot

위성 방위각 및 고도 데이터 플로팅

R2021a 이후

설명

예제

skyplot(azdata,eldata)는 행렬로 지정된 방위각과 고도 데이터(단위: 도)를 사용하여 스카이 플롯을 만듭니다. 방위각은 북쪽 방향에서 시계 방향으로 양의 각도로 측정됩니다. 고도각은 수평선으로부터 90도 수직선 위에서 측정됩니다. 스카이 플롯 Figure 요소의 세부 정보는 스카이 플롯 기본 요소 항목을 참조하십시오.

skyplot(azdata,eldata,labeldata)는 데이터 레이블을 string형 배열로 지정하며 이때 각 요소는 azdataeldata 입력값의 각 데이터 점에 대응합니다.

skyplot(status)는 방위각 데이터와 고도 데이터를 필드 SatelliteAzimuthSatelliteElevation을 갖는 구조체로 지정합니다.

예제

skyplot(___,Name,Value)는 위에 열거된 구문의 입력 인수 외에 하나 이상의 이름-값 인수를 사용하여 옵션을 지정합니다. 이름-값 인수는 SkyPlotChart 객체의 속성입니다. 속성의 목록을 보려면 SkyPlotChart Properties 항목을 참조하십시오.

skyplot(parent,___)parent에 의해 지정된 Figure, 패널 또는 탭에 스카이 플롯을 만듭니다.

h = skyplot(___)은 스카이 플롯을 SkyPlotChart 객체인 h로 반환합니다. 차트를 만든 후 속성을 수정하려면 h를 사용하십시오. 속성의 목록을 보려면 SkyPlotChart Properties 항목을 참조하십시오.

예제

모두 축소

GNSS 센서 모델을 gnssSensor System object™로 만듭니다.

gnss = gnssSensor; 

센서의 위치와 속도를 지정합니다. 센서 측정값을 시뮬레이션하고 가시 위성에서 상태를 가져옵니다. 방위각과 고도각을 벡터로 저장합니다.

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

로컬 환경을 추가하기 위해 최대 고도가 30도인 무작위 로컬 고도 마스크를 만듭니다.

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)

위성 위치를 고도 마스크와 함께 플로팅합니다.

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

Figure contains an object of type skyplot.

GNSS 센서로부터 시간 경과에 따른 위성 위치의 궤적을 애니메이션으로 표시합니다.

스카이 플롯 Figure를 초기화합니다. 관련 시간 스텝 정보를 지정합니다.

skyplotHandle = skyplot(0,0); 

Figure contains an object of type skyplot.

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

GNSS 센서 모델을 gnssSensor System object™로 만듭니다.

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

시간 스텝을 반복하고 다음을 수행합니다.

  • 센서 측정값을 시뮬레이션합니다. 정지 상태인 센서의 0 위치와 속도를 지정합니다.

  • 방위각과 고도각을 벡터로 저장합니다.

  • SkyPlotChart 핸들의 AzimuthData 속성과 ElevationData 속성을 직접 설정합니다.

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.

Adafruit® GPS 위성 센서에서 생성된 로그 파일로부터 방위각 데이터와 고도 데이터를 불러옵니다. 이 예제에서 제공하는 데이터는 각 위성의 방위각과 고도, 의사 랜덤 잡음(PRN) 코드를 포함합니다. 이러한 값을 벡터로 저장합니다.

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

PRN 코드를 기준으로 위성을 구분합니다. 각 위치마다 그룹을 연결하기 위해 categorical형 배열을 만듭니다. 이 위성 집합의 경우 PRN이 32 미만인 위성만 측위 결정에 사용됩니다.

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

위성을 시각화하고 GroupData 이름-값 인수에 이 범주 그룹을 지정합니다. PRN을 각 점에 대한 레이블로 지정합니다. 범례를 표시합니다.

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

Figure contains an object of type skyplot.

수신기 위치, RINEX 내비게이션 파일, 마스크 각도, 시간 스텝 크기, RINEX 파일에서 샘플링할 데이터의 시간을 지정합니다.

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

내비게이션 파일을 읽어서 이 파일에 캡처된 모든 위성의 GPS 데이터를 가져옵니다.

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

시작 시간을 내비게이션 메시지의 초기 시간으로 설정합니다. 그런 다음 시간 벡터 t.를 만듭니다.

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

방위각과 고도에 대한 벡터를 초기화합니다. 그런 다음 모든 위성에 대해 시간 t에서 방위각 데이터와 고도 데이터를 수집합니다.

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

고도가 0 미만인 수평선 아래의 모든 위성을 누락값으로 표시합니다.

allEl(allEl < 0) = missing;

스카이 플롯을 만들고 AzimuthData 속성과 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.

입력 인수

모두 축소

가시 위성 위치에 대한 방위각으로, 각도로 구성된 요소를 n개 가진 벡터 또는 각도로 구성된 t×n 행렬로 지정됩니다. 여기서 n은 플롯의 가시 위성 위치 수이고, t는 위성의 시간 스텝 수입니다. 방위각은 북쪽 방향에서 시계 방향으로 양의 각도로 측정됩니다.

예: [25 45 182 356]은 하나의 시간 스텝에서 4개의 위성에 대한 방위각을 지정합니다.

s

데이터형: double

가시 위성 위치에 대한 고도각으로, 각도로 구성된 요소를 n개 가진 벡터 또는 각도로 구성된 t×n 행렬로 지정됩니다. 여기서 n은 플롯의 가시 위성 위치 수이고, t는 위성의 시간 스텝 수입니다. 고도각은 수평선으로부터 90도 수직선 위에서 측정됩니다.

예: [45 90 27 74]는 하나의 시간 스텝에서 4개의 위성에 대한 고도각을 지정합니다.

데이터형: double

가시 위성 위치에 대한 고도각으로, 요소를 n개 가진 string형 배열로 지정됩니다. 여기서 n은 플롯의 가시 위성 위치 수입니다.

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

데이터형: string

위성 상태로, 필드 SatelliteAzimuthSatelliteElevation이 있는 구조체형으로 지정됩니다. 일반적으로 이 상태 구조체는 위성 위치와 속도를 시뮬레이션하는 gnssSensor 객체에서 가져옵니다.

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

데이터형: struct

부모 컨테이너로, 각각 Figure 객체, Panel 객체, Tab 객체, TiledChartLayout 객체 또는 GridLayout 객체로 지정됩니다.

출력 인수

모두 축소

스카이 플롯 차트로, 독립형 시각화SkyPlotChart 객체로 반환됩니다. 스카이 플롯 차트에서 속성을 설정하려면 h를 사용합니다. 자세한 내용은 SkyPlotChart Properties 항목을 참조하십시오.

세부 정보

모두 축소

스카이 플롯 기본 요소

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

Figure의 기본 요소는 다음과 같습니다.

  • 방위각 축 — azdata 입력 인수로 지정되며, 방위각 위치는 북쪽 방향에서 시계 방향으로 양의 각도로 측정됩니다.

  • 고도 축 — eldata 입력 인수로 지정되며, 고도각 위치는 수평선으로부터 90도 수직선 위에서 측정됩니다.

  • 레이블 — string형 배열의 labeldata 입력 인수로 지정되며, 각 요소는 azdata 벡터와 eldata 벡터의 각 점에 대응합니다.

  • 그룹 — GroupData 속성으로 지정되며, categorical 배열이 각 위성 위치의 그룹을 정의합니다.

독립형 시각화

독립형 시각화는 특수 목적으로 설계된 차트로, 다른 차트와 독립적으로 작동합니다. plotsurf 같은 다른 차트와 달리 독립형 시각화에는 사전 구성된 axes 객체가 내장되어 있으며, 일부 사용자 지정을 사용할 수 없습니다. 또한 독립형 시각화는 다음과 같은 특성을 가집니다.

  • 선, 패치, 곡면과 같은 다른 그래픽스 요소와 결합할 수 없습니다. 따라서 hold 명령은 지원되지 않습니다.

  • gca 함수는 chart 객체를 현재 좌표축으로 반환할 수 있습니다.

  • axes 객체를 입력 인수로 받는 다수의 MATLAB® 함수에 chart 객체를 전달할 수 있습니다. 예를 들어 차트 객체를 title 함수로 전달할 수 있습니다.

버전 내역

R2021a에 개발됨

모두 확장