前言
- 在之前的博客(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;