[ STK ](四) 使用 Matlab,获取卫星间可见性数据,分析得出可见性矩阵

您所在的位置:网站首页 matlab计算卫星位置 [ STK ](四) 使用 Matlab,获取卫星间可见性数据,分析得出可见性矩阵

[ STK ](四) 使用 Matlab,获取卫星间可见性数据,分析得出可见性矩阵

2023-12-24 06:04| 来源: 网络整理| 查看: 265

前言 在之前的博客(STK 卫星间可见性分析)中,我们使用STK软件,分析了可见性。由于实验需要,我们需要得出一个视场可见性矩阵,1为可见,0为不可见。在之前的博客中(STK 与 Matlab 互联(亲测成功)),我们建立了STK与Matlab的互联通信。本篇博客中我们通过编程,获取卫星间可见性数据,从而分析得出可见性矩阵。 编码详解 建立STK与Matlab的连接 % 初始化连接 stkInit; % 默认端口 5001 remMachine = stkDefaultHost; % conid只能获取两次,使用完需要关闭连接 conid = stkOpen(remMachine); 获取星座中所有卫星的名称 % 总共 24 颗卫星,第一颗卫星下标为 4 objNames = stkObjNames;

在这里插入图片描述

从STK中获取可见性

该方法只能获取任意两颗卫星之间的可见性,我们需要通过双重循环来获取24颗卫星,两两之间的可见性,得到一个 24 x 24的矩阵

返回值有:可见时间段的段数,可见时间段开始时间和结束时间,可见时间段时长 在这里插入图片描述 在这里插入图片描述

% 从 stk 获取可见性数据 % 参数依次是:参考卫星,目标卫星,报告样式,开始时间,结束时间,时间间隔 [secData, secNames] =stkAccReport(char(objNames(int32(i))),char(objNames(int32(j))), style,startTime,endTime,dt); 完整代码 这里是获取0-60秒内,卫星的可见性矩阵 stkInit; remMachine = stkDefaultHost; conid = stkOpen(remMachine); objNames = stkObjNames; dt = 60; style = 'Access'; startTime = 0; endTime = 60; result = zeros(24); for i = 4:27 disp(i) for j = 4:27 if i ~= j %disp(j) [secData, secNames] =stkAccReport(char(objNames(int32(i))),char(objNames(int32(j))), style,startTime,endTime,dt); [temp1,temp2] = size(secData{1}); if temp2 == 4 [a,b,c,d] = secData{1}.data; % a: Access b:Start Time c:End Time d:Duration if d == dt result(i-3,j-3) = 1; end end else result(i-3,j-3) = 1; end end end stkClose(conid); stkClose; 如果需要每秒钟获取一次可见性,代码需要做如下改动,每秒生成一个矩阵,保存到.csv文件中 在这里插入图片描述 stkInit; remMachine = stkDefaultHost; conid = stkOpen(remMachine); objNames = stkObjNames; dt = 1; style = 'Access'; startTime = 0; endTime = 1; result = zeros(24); for k = 1:60 for i = 4:27 disp(strcat(num2str(k),' ---------- ',num2str(i-3))) for j = 4:27 if i ~= j %disp(j) [secData, secNames] =stkAccReport(char(objNames(int32(i))),char(objNames(int32(j))), style,startTime,endTime,dt); [temp1,temp2] = size(secData{1}); if temp2 == 4 [a,b,c,d] = secData{1}.data; % a: Access b:Start Time c:End Time d:Duration if d == dt result(i-3,j-3) = 1; end end else result(i-3,j-3) = 1; end end end csvwrite(strcat('./data/result',num2str(k),'.csv'),result) startTime = startTime + 1; endTime = endTime+1; end stkClose(conid); stkClose;

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3