Préface
- Dans le blog précédent ( STK Inter-Satellite Visibility Analysis ), nous avons utilisé un
STK
logiciel pour analyser la visibilité. - En raison des besoins expérimentaux, nous devons obtenir une matrice de visibilité du champ de vision, qui
1
est visible et0
invisible. - Dans le billet de blog précédent ( STK et Matlab Interconnection (pro-test success) ), nous avons établi
STK
avec laMatlab
communication d'Internet. - Dans ce blog, nous obtenons les données de visibilité entre les satellites par programmation, puis analysons la matrice de visibilité.
Codage détaillé
- Établissez
STK
laMatlab
connexion
% 初始化连接
stkInit;
% 默认端口 5001
remMachine = stkDefaultHost;
% conid只能获取两次,使用完需要关闭连接
conid = stkOpen(remMachine);
- Obtenez les noms de tous les satellites de la constellation
% 总共 24 颗卫星,第一颗卫星下标为 4
objNames = stkObjNames;
- De la
STK
visibilité dans
Cette méthode ne peut obtenir une visibilité qu'entre deux satellites, nous devons passer par les 24
satellites à double boucle , une visibilité entre tous les deux pour obtenir une 24 x 24
matrice
Les valeurs de retour sont: le nombre de segments dans la période visible, l'heure de début et l'heure de fin de la période visible et la durée de la période visible
% 从 stk 获取可见性数据
% 参数依次是:参考卫星,目标卫星,报告样式,开始时间,结束时间,时间间隔
[secData, secNames] =stkAccReport(char(objNames(int32(i))),char(objNames(int32(j))), style,startTime,endTime,dt);
Code complet
- Voici
0-60
la matrice de visibilité du satellite en quelques secondes
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;
- Si vous avez besoin d'obtenir une visibilité toutes les secondes, le code doit être modifié comme suit pour générer une matrice toutes les secondes et l'enregistrer dans un
.csv
fichier
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;