分析GPS卫星能见度
这个例子展示了如何在指定的接收器位置和时间模拟和分析GPS卫星能见度。使用实时脚本控件为卫星模拟设置不同的参数。
指定仿真参数
指定RINEX导航消息文件、持续时间(以小时为单位)和模拟的样本之间的时间(以秒为单位)。还要指定接收器在大地坐标中的位置和接收器的掩模角或最小仰角。
rinexfile =“GODS00USA_R_20211750000_01D_GN.rnx”;numHours =24;dt =60;% s纬度=42.3013162;%度经度=-71.3782972;%度高度=50;% mrecPos =[纬度经度高度];% [deg deg m]maskAngle =5;%度
使用rinexread
函数从RINEX文件中获取模拟开始时间和卫星初始轨道参数。对于RINEX文件中的每个卫星,只使用第一个条目。
Data = rinexread(rinexfile);gpsData = data.GPS;[~, idx] = unique(gpsdata . satellite iteid);navmsg = gpsData(idx,:);startTime = navmsg.Time(1);
生成卫星能见度
使用这些参数,生成作为逻辑值矩阵的卫星可见度。矩阵中的每一行对应一个时间步长,每一列对应一个卫星。为了绘制能见度,迭代时间矢量计算卫星位置和观测角度基于GNSS星座模拟。
secondsPerHour = 3600;timeElapsed = 0:dt:(secondsPerHour*numHours);t = startTime + seconds(timeElapsed);satPos = gnssconstellation(t(1),navmsg);numSats = size(satPos,1);numSamples = numel(t);az = 0 (numSamples,numSats);el = 0 (numSamples,numSats);vis = false(numSamples,numSats);satIDs = 1:numSats; sp = skyplot([],[], MaskElevation=maskAngle);为ii = 1:numel(t) satPos = gnssconstellation(t(ii),navmsg);(阿兹(ii):),埃尔(ii):), vis (ii):)] = lookangles (recPos, satPos maskAngle);集(sp, AzimuthData =阿兹(ii, vis (ii,:)),...ElevationData = el (ii, vis (ii,:)),...LabelData = satIDs (vis (ii,:)));drawnowlimitrate结束
阴谋的结果
利用逻辑矩阵生成卫星可见度图,绘制出每个时间步的可见卫星总数。一般来说,必须至少有四颗卫星可见才能计算定位解决方案。
visPlotData = double(vis);visPlotData(visPlotData == false) = NaN;隐藏隐形卫星。visPlotData = visPlotData + (0:numSats-1);为待堆叠的卫星增加空间。颜色=颜色顺序;图绘制(t visPlotData“。”,Color=colors(1,:)) yticks(1:numSats) yticklabels(string(satIDs))网格在ylabel (“卫星ID”)包含(“时间”)标题(“卫星能见度图”)轴紧
numVis = sum(vis,2);图区域(t,numVis)网格在包含(“时间”) ylabel (可见卫星数)标题(可见的GPS卫星数)轴紧