[STK] Utilisez Matlab pour obtenir des données de visibilité entre les satellites et analyser la matrice de visibilité

Préface

  • Dans le blog précédent ( STK Inter-Satellite Visibility Analysis ), nous avons utilisé un STKlogiciel pour analyser la visibilité.
  • En raison des besoins expérimentaux, nous devons obtenir une matrice de visibilité du champ de vision, qui 1est visible et 0invisible.
  • Dans le billet de blog précédent ( STK et Matlab Interconnection (pro-test success) ), nous avons établi STKavec la Matlabcommunication 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 STKla Matlabconnexion
% 初始化连接
stkInit;
% 默认端口 5001
remMachine = stkDefaultHost;
% conid只能获取两次,使用完需要关闭连接
conid = stkOpen(remMachine);
  • Obtenez les noms de tous les satellites de la constellation
% 总共 24 颗卫星,第一颗卫星下标为 4
objNames = stkObjNames;

Insérez la description de l'image ici

  • De la STKvisibilité dans

Cette méthode ne peut obtenir une visibilité qu'entre deux satellites, nous devons passer par les 24satellites à double boucle , une visibilité entre tous les deux pour obtenir une 24 x 24matrice

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
Insérez la description de l'image ici
Insérez la description de l'image ici

% 从 stk 获取可见性数据 
% 参数依次是:参考卫星,目标卫星,报告样式,开始时间,结束时间,时间间隔
[secData, secNames] =stkAccReport(char(objNames(int32(i))),char(objNames(int32(j))), style,startTime,endTime,dt);

Code complet

  • Voici 0-60la 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 .csvfichier
    Insérez la description de l'image ici
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;


Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_43901693/article/details/107657843
conseillé
Classement