[STK] Matlabを使用して衛星間の可視性データを取得し、可視性マトリックスを分析する

序文

  • 以前のブログ(STK Inter-Satellite Visibility Analysis)では、STKソフトウェアを使用して可視性を分析しました。
  • 実験的なニーズのために、我々は、視野の可視性マトリックス取得する必要が1見えるとある0目に見えないし。
  • 前回のブログ投稿(STKとMatlab Interconnection(プロテストの成功))では、インターネットの通信を確立STKしましたMatlab
  • このブログでは、プログラミングを通じて衛星間の可視性データを取得し、可視性マトリックスを分析します。

詳細なコーディング

  • 接続を確立STKするMatlab
% 初始化连接
stkInit;
% 默认端口 5001
remMachine = stkDefaultHost;
% conid只能获取两次,使用完需要关闭连接
conid = stkOpen(remMachine);
  • 星座内のすべての衛星の名前を取得します
% 总共 24 颗卫星,第一颗卫星下标为 4
objNames = stkObjNames;

ここに画像の説明を挿入

  • STK視界を得るから

このメソッドは、任意の2つの衛星間の可視性のみを取得できます。マトリックス24を取得するには、2つの衛星間の可視性を取得する必要があります。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;

  • 1秒ごとに可視性を取得する必要がある場合は、コードを次のように変更して、1秒ごとにマトリックスを生成し、.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;


ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_43901693/article/details/107657843