主要内容

分析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结束

图中包含一个skyplot类型的对象。

阴谋的结果

利用逻辑矩阵生成卫星可见度图,绘制出每个时间步的可见卫星总数。一般来说,必须至少有四颗卫星可见才能计算定位解决方案。

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”)包含(“时间”)标题(“卫星能见度图”)轴

图中包含一个axes对象。标题为Satellite Visibility Chart的axis对象包含31个类型为line的对象。

numVis = sum(vis,2);图区域(t,numVis)网格包含(“时间”) ylabel (可见卫星数)标题(可见的GPS卫星数)轴

图中包含一个axes对象。标题为“可见的GPS卫星数量”的axes对象包含一个类型为area的对象。

Baidu
map