このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
可視GPS衛星の位置ベース解析
この例では、satelliteScenario
を使用して、特定の場所からどの全地球測位システム (GPS) 衛星が見えるかを解析する方法を示します。
SEMアルマナックを選択
この例では、システム有効性モデル (SEM)アルマナックファイルを使用して、衛星シナリオにGPS 衛星コンステレーションを追加します。useSEMAlmanac
の値を変更することで、保存されている SEMアルマナックファイルを使用するか、最新の SEMアルマナックファイルを使用するかを選択できます。
保存された SEMアルマナックファイルのデータを使用するには、
useSEMAlmanac
をstored
に設定します。デフォルトでは、この例ではファイル名がgpsAlmanac.txt
である保存済みの SEMアルマナックファイルを検索します。別の SEMアルマナックファイルを指定するには、保存されている SEMアルマナックファイルへの相対パスまたは絶対パスとしてsemAlmanacFileName
を指定します。www.navcen.uscg.gov にあるナビゲーション センターの Web サイトから最新の SEMアルマナックファイルを取得するには、
useSEMAlmanac
をlatest
に設定します。最新の SEMアルマナックファイルを使用するには、作業フォルダーに対する書き込み権限が必要です。通常、ナビゲーションセンターのウェブサイトは、 GPSインターフェース制御文書ICD- GPS -240、改訂D版[1]のセクション3.2.2.4に記載されているように、アルマナックファイルを1日に1回アップロードします。
useSEMAlmanac ="stored"; if useSEMAlmanac == "stored" % Provide the SEM almanac file name semAlmanacFileName = "gpsAlmanac.txt"; else % Download the latest SEM almanac file from the Navigation Center % website and store the file url = "https://www.navcen.uscg.gov/sites/default/files/gps/almanac/current_sem.al3"; currentDay = string(datetime("today",TimeZone="UTC")); semAlmanacFileName = "gps_SEM_" + currentDay + "_UTC.txt"; websave(semAlmanacFileName,url); end
衛星シナリオの作成
クエリが常にシミュレーション時間内になるように、開始時間と終了時間を指定した衛星シナリオを作成します。シミュレーションのサンプル時間を 60 秒に設定します。保存されたアルマナックファイルを使用する場合、この例のデフォルトのクエリ時間は 2021 年 6 月 24 日午前 0 時 0 分 48 秒 UTC です。最新の SEMアルマナックファイルを使用する場合、例ではデフォルトで現在の日付と時刻でクエリが実行されます。
if useSEMAlmanac == "stored" % Provide the queryTime queryTime = datetime(2021,6,24,0,0,48,TimeZone="UTC"); else % Uses the latest SEM Almanac file. Set the queryTime to current date % and time. queryTime = datetime("now",TimeZone="UTC"); end startTime = queryTime - hours(12); stopTime = queryTime + hours(13); sampleTime = 60; sc = satelliteScenario(startTime,stopTime,sampleTime);
GPS衛星コンスタレーションを追加する
SEMアルマナックファイルを使用して、シナリオにGPS衛星を追加します。
sat = satellite(sc,semAlmanacFileName);
地上局の追加
緯度と経度を指定して、興味のある地上局を追加します。地上局がリンク クロージャーを判断できる最小仰角を指定します。デフォルトでは、この例では、ハイデラバードの MathWorks キャンパスが地上局として追加されます。
latitude = 17.43465658; % In degrees longitude = 78.38228397; % In degrees minElevAngle = 10; % In degrees gs = groundStation(sc,latitude,longitude, ... MinElevationAngle=minElevAngle);
アクセス解析を追加
地上局と GPS 衛星の間に見通し線 (LOS) が存在するかどうかを判断するには、GPS 衛星と地上局間のアクセス解析を追加します。
ac = access(sat,gs);
可視GPS衛星を可視化する
可視 GPS 衛星を可視化するには、次の手順に従います。
accessStatus
関数を使用して、地上局から見える衛星を見つけます。aer
関数を使用して、地上局から見える衛星の方位角と仰角を見つけます。skyplot
関数を使用して、スカイ プロットで見える衛星を表示します。
acStats = accessStatus(ac,queryTime); [az,el] = aer(gs,sat(acStats),queryTime); skyplot(az,el,sat(acStats).Name,MaskElevation=gs.MinElevationAngle)
衛星シナリオを使用して、可視衛星を可視化します。
% View the satellite scenario at queryTime. queryTime must be within the % start and stop times of the scenario. v = satelliteScenarioViewer(sc,CurrentTime=queryTime,ShowDetails=false); % Set the camera position such that all links from satellites to ground % station are in clear view campos(v,gs.Latitude,gs.Longitude,gs.Altitude+6e7);
このスナップショットは、デフォルトの例の設定を使用した衛星シナリオ ビューアーを示しています。
シナリオの開始時刻から終了時刻までのすべての可視衛星の位置を取得し、skyplot
関数を使用して可視衛星をアニメーション化します。
% Get the status of access across the time history of the scenario [acStatsAllTime,timeHistory] = accessStatus(ac); [azHistory,elHistory] = aer(gs,sat); % Number of timestamps run by the scenario numTimeStamps = numel(timeHistory); % When you have no access, set the elevation angle history to NaN elHistory(acStatsAllTime == 0) = NaN; % Transpose the histories of the azimuth angles and elevation angles to % have timestamps as rows, which helps plot skyplot azHistoryTranspose = azHistory'; elHistoryTranspose = elHistory'; % Visualize the visible satellites over time sp = skyplot([],[],MaskElevation=gs.MinElevationAngle); for tIdx = 1:numTimeStamps set(sp, ... AzimuthData=azHistoryTranspose(tIdx,:), ... ElevationData=elHistoryTranspose(tIdx,:), ... LabelData=sat.Name); % For slower animation, use 'drawnow' instead of 'drawnow limitrate' drawnow limitrate end
衛星可視チャートを生成する
可視衛星を時間の関数としてプロットします。
% Find the PRN index of each satellite satNames = char(sat(:).Name'); prnIndex = double(string(satNames(:,5:end))); % To better visualize each GPS satellite, scale the status with the PRN % index acStatsAllTime = double(acStatsAllTime); acStatsAllTime(acStatsAllTime == 0) = NaN; % Plot the satellite visibility chart colors = colororder; firstLineColor = colors(1,:); plot(timeHistory,prnIndex.*acStatsAllTime, ... Color=firstLineColor,LineWidth=1) xlim([timeHistory(1) timeHistory(end)]) ylim([min(prnIndex)-1 max(prnIndex)+1]) xlabel("Time") ylabel("Satellite PRN Index") title("Satellite Visibility Chart") yticks(prnIndex) grid on
その他の調査
この例では、地上局から見えるすべてのGPS衛星を示します。これらの変更を加えて例を実行してみてください。
地上局の位置を変えて、特定の時点における可視衛星を観測します。
最新の SEMアルマナックファイルを使用して、可視衛星と運用衛星を観測します。
参考文献
[1] ICD- GPS-240、改訂:D. NAVSTAR GPS制御セグメントからユーザー サポート コミュニティへのインターフェイス。2021年5月21日; コード識別:66RP1。
参考
オブジェクト
関数
access
|accessStatus
|aer
|skyplot
|groundStation