メインコンテンツ

radarScenario

レーダー シナリオの作成

R2021a 以降

説明

radarScenario はレーダー シナリオ オブジェクトを作成します。レーダー シナリオは、複数のプラットフォームを含む 3 次元環境をシミュレーションします。プラットフォームは、航空機、地上車両、船舶など、シミュレーションするオブジェクトを表します。一部のプラットフォームには、レーダー、ソナー、赤外線などのセンサーが搭載されています。その他のプラットフォームは、信号のソースまたは信号の反射体として機能します。

追加するプラットフォームごとに platform 関数を呼び出して、レーダー シナリオを入力します。platform 関数を呼び出すときに 'Dimension' プロパティを指定することにより、プラットフォームを点または直方体としてモデル化できます。プラットフォームには、レーダー センサーのレーダー断面積など、センサーの種類に固有のプロパティをもつシグネチャがあります。kinematicTrajectorywaypointTrajectory、または geoTrajectory の各 System object™ を使用して、任意のプラットフォームの軌跡を作成できます。

必要なプラットフォームをすべて追加したら、ループ内で advance 関数を使用して、シナリオを増分タイム ステップでシミュレーションできます。record 関数を使用して、すべてのシミュレーションを一度に実行できます。

作成

説明

scene = radarScenario は、既定のプロパティ値をもつ空のレーダー シナリオ scene を作成します。kinematicTrajectory または waypointTrajectory の各 System object を使用して、シナリオ内のプラットフォームの軌跡を直交座標系状態量として指定できます。

scene = radarScenario('IsEarthCentered',true) は、空の地球中心のレーダー シナリオを作成し、IsEarthCentered プロパティを true に設定します。geoTrajectory System object を使用して、シナリオ内のプラットフォームの軌跡を測地系状態量として指定できます。

scene = radarScenario(Name,Value) は、1 つ以上の名前と値の引数を使用して、radarScenario オブジェクトのプロパティを設定します。Name はプロパティ名、Value は対応する値です。複数の名前と値の引数を任意の順序で指定できます。指定されていないプロパティはすべて既定値を取ります。

プロパティ

すべて展開する

地球中心の基準座標系と軌跡の有効化。logical の 0 (false) または 1 (true) として指定します。

  • 0 (false) として指定した場合は、kinematicTrajectory または waypointTrajectory の各 System object を使用して、プラットフォームの軌跡を直交座標系状態量として定義しなければなりません。

  • 1 (true) として指定した場合は、geoTrajectory System object を使用して、プラットフォームの軌跡を測地系状態量として定義しなければなりません。

IsEarthCentered プロパティは、レーダー シナリオを作成するときにのみ指定できます。

データ型: logical

シミュレーション更新の頻度。非負のスカラーとしてヘルツ単位で指定します。

  • 正のスカラーとして指定すると、シナリオは 1/F のタイム ステップで進行します。ここで、FUpdateRate プロパティの値です。

  • 0 として指定すると、シミュレーションは、取り付けられているいずれかのセンサーまたはエミッターの次のスケジュールされたサンプリング時間に進みます。たとえば、シナリオに更新レートが 2 Hz と 5 Hz の 2 つのセンサーがある場合、最初の 7 回のシミュレーション更新は、それぞれ 0 秒、0.2 秒、0.4 秒、0.5 秒、0.6 秒、0.8 秒、1.0 秒になります。

例: 2.0

データ型: double

この プロパティ は読み取り専用です。

シミュレーションの現在時間。正のスカラーとして秒単位で指定します。シミュレーション時間をゼロにリセットしてシミュレーションを再開するには、restart 関数を呼び出します。

データ型: double

シミュレーションの終了時間。正のスカラーとして秒単位で指定します。次のいずれかの条件が満たされると、シミュレーションは停止します。

  • 停止時間に到達した。

  • waypointTrajectory System object を使用して、プラットフォームの Trajectory プロパティをウェイポイントで指定していて、いずれかのプラットフォームが軌跡の終点に到達した。

例: 60.0

データ型: double

この プロパティ は読み取り専用です。

シミュレーションのステータス。次のいずれかの値として指定します。

  • NotStarted — レーダー シナリオで advance 関数が使用されていない場合。

  • InProgress — レーダー シナリオで advance 関数が少なくとも 1 回使用され、シナリオが Completed ステータスに達していない場合。

  • Completed — シナリオが StopTime プロパティで指定された停止時間に到達するか、シナリオ内のいずれかの Platform オブジェクトが軌跡の終点に到達したとき。

オブジェクトの restart 関数を使用して、シナリオ シミュレーションを再開できます。

データ型: enumeration

この プロパティ は読み取り専用です。

シナリオ内のプラットフォーム。Platform オブジェクトの cell 配列として返されます。cell 配列内の要素の数は、シナリオ内のプラットフォームの数と等しくなります。シナリオにプラットフォームを追加するには、platform 関数を使用します。

advance 関数呼び出し時の初期前進値。次のいずれかのオプションとして指定します。

  • "Zero" — シナリオ シミュレーションは、advance 関数の最初の呼び出しで時刻 0 から開始されます。

  • "UpdateInterval" — シナリオ シミュレーションは 1/F の時刻に開始されます。ここで、FUpdateRate プロパティの非ゼロの値です。UpdateRate プロパティを 0 として指定した場合、シナリオ シミュレーションは InitialAdvance プロパティを無視し、時刻 0 から開始します。

データ型: char | string

このプロパティには、シナリオに関連付けられた SurfaceManager オブジェクトが格納されます。

オブジェクト関数

platformAdd platform to radar scenario
landSurfaceAdd land surface to radar scenario
seaSurfaceAdd sea surface to radar scenario
customSurfaceAdd custom surface with complex scattering to a radar scenario
advanceAdvance radar scenario simulation by one time step
atmosphereAdd atmosphere model object to radar scenario
restartRestart simulation of radar scenario
recordRecord simulation of radar scenario
emitCollect emissions from all emitters in radar scenario
propagatePropagate emissions in radar scenario
detectCollect detections from all sensors in radar scenario
receiveReceive IQ signal from radars in the scenario
clutterGeneratorAdd clutter generator for radar
platformProfilesProfiles of radar scenario platforms
platformPosesPosition information for each platform in radar scenario
coverageConfigSensor and emitter coverage configuration
perturbApply perturbations to radar scenario
cloneCreate copy of radar scenario

すべて折りたたむ

異なる軌跡をたどる 2 つのプラットフォームを使用してレーダー シナリオを作成します。

sc = radarScenario('UpdateRate',100,'StopTime',1.2);

2 つのプラットフォームを作成します。

platfm1 = platform(sc);
platfm2 = platform(sc);

プラットフォーム 1 は、半径 10 m の円形パスを 1 秒間たどります。これは、ウェイポイントを円形に配置し、最初のウェイポイントと最後のウェイポイントが同一であるようにすることで実現されます。

wpts1 = [0 10 0; 10 0 0; 0 -10 0; -10 0 0; 0 10 0];
time1 = [0; 0.25; .5; .75; 1.0];
platfm1.Trajectory = waypointTrajectory(wpts1,time1);

プラットフォーム 2 は 1 秒間直線パスをたどります。

wpts2 = [-8 -8 0; 10 10 0];
time2 = [0; 1.0];
platfm2.Trajectory = waypointTrajectory(wpts2,time2);

シナリオ内のプラットフォームの数を確認します。

disp(sc.Platforms)
    {1×1 radar.scenario.Platform}    {1×1 radar.scenario.Platform}

シミュレーションを実行し、アニメーションの線を使用して各プラットフォームの現在の位置をプロットします。

figure
grid
axis equal
axis([-12 12 -12 12])
line1 = animatedline('DisplayName','Trajectory 1','Color','b','Marker','.');
line2 = animatedline('DisplayName','Trajectory 2','Color','r','Marker','.');
title('Trajectories')
p1 = pose(platfm1);
p2 = pose(platfm2);
addpoints(line1,p1.Position(1),p1.Position(2));
addpoints(line2,p2.Position(2),p2.Position(2));

while advance(sc)
    p1 = pose(platfm1);
    p2 = pose(platfm2);
    addpoints(line1,p1.Position(1),p1.Position(2));
    addpoints(line2,p2.Position(2),p2.Position(2));
    pause(0.1)
end

Figure contains an axes object. The axes object with title Trajectories contains 2 objects of type animatedline. These objects represent Trajectory 1, Trajectory 2.

両方のプラットフォームのウェイポイントをプロットします。

hold on
plot(wpts1(:,1),wpts1(:,2),' ob')
text(wpts1(:,1),wpts1(:,2),"t = " + string(time1),'HorizontalAlignment','left','VerticalAlignment','bottom')
plot(wpts2(:,1),wpts2(:,2),' or')
text(wpts2(:,1),wpts2(:,2),"t = " + string(time2),'HorizontalAlignment','left','VerticalAlignment','bottom')
hold off

Figure contains an axes object. The axes object with title Trajectories contains 11 objects of type animatedline, line, text. One or more of the lines displays its values using only markers These objects represent Trajectory 1, Trajectory 2.

地球中心のレーダー シナリオを作成し、更新レートを指定します。

scene = radarScenario('IsEarthCentered',true,'UpdateRate',0.01);

シナリオに飛行機を表すプラットフォームを追加します。飛行機の軌跡は経度と高度によって変化します。測地経緯度を使用して軌跡を指定します。

geoTraj = geoTrajectory([42.300,-71.351,10600;42.300,-124.411,0],[0 21600]);
plane = platform(scene,'Trajectory',geoTraj);

レーダー シナリオを進め、飛行機ターゲットの測地位置と直交座標位置を記録します。

positions = [];
while advance(scene)
    poseLLA = pose(plane,'CoordinateSystem','Geodetic');
    poseXYZ = pose(plane,'CoordinateSystem','Cartesian');
    positions = [positions;poseXYZ.Position];%#ok<AGROW> Allow the buffer to grow.
end

距離の単位をメートルからキロメートルに変換します。

km = 1000;
positions = positions/km;

ECEF 座標系で開始位置、終了位置、軌跡を可視化します。

hold on
plot3(positions(1,1),positions(1,2),positions(1,3),'b*')
plot3(positions(end,1),positions(end,2),positions(end,3),'bo')
plot3(positions(:,1),positions(:,2),positions(:,3),'b')

開始位置と終了位置の地球半径線をプロットします。

plot3([0 positions(1,1)],[0 positions(1,2)],[0 positions(1,3)],'k:')
plot3([0 positions(end,1)],[0 positions(end,2)],[0 positions(end,3)],'k:')
xlabel('x (km)')
ylabel('y (km)')
zlabel('z (km)')
legend('Start position','End position','Trajectory')
view(3)

Figure contains an axes object. The axes object with xlabel x (km), ylabel y (km) contains 5 objects of type line. One or more of the lines displays its values using only markers These objects represent Start position, End position, Trajectory.

バージョン履歴

R2021a で導入