mcpField
M
matlab-simulate-radar-detections

matlab-simulate-radar-detections

github.com/matlabその他1.2k56 回インストール1 日前に更新
リポジトリ

matlab-simulate-radar-detections について

radarScenario 内の radarDataGenerator を使い、検出レベルの統計的なレーダーシミュレーションを行う MATLAB スキルです。ハードウェア仕様や性能要件をシナリオ設定に落とし込み、波形レベルのモデル化との違いも明確にします。

主な機能

  1. 01radarScenario と radarDataGenerator の設定
  2. 02ハードウェア仕様からシミュレーション値を導出
  3. 03スキャン、ターゲット、検出性能のモデル化
  4. 04スキャン方式とカバレッジの比較
  5. 05トラッキング用検出データの生成

活用シーン

  1. 01移動ターゲットの検出評価
  2. 02機械走査と電子走査の比較
  3. 03レーダーのカバレッジや配置の検討
  4. 04トラッカー向け検出データの生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-simulate-radar-detections

インストール後、Claude Code で/matlab-simulate-radar-detectionsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

manifest.yaml
references/
coordinates-and-transforms.md
coupled-parameters.md
detection-model.md
fov-and-scan.md
interaction-flow.md
radar-equation-tools.md
requirements-sheet-template.md
terrain-clutter-atmosphere.md
trajectories.md
visualization.md

詳細

レーダーデータ生成器 — 統計的検出シミュレーション

radarScenario 内で radarDataGenerator を使用して、検出レベルのレーダーシミュレーションを構築します。このスキルは、ユーザーのハードウェア仕様や性能要件を Radar Toolbox の統計シミュレーション API に結び付けます。

使用する場面

  • ユーザーが移動するターゲットのレーダー検出をシミュレーションしたい場合
  • ユーザーがレーダーのハードウェア仕様(データシート)や性能要件を持ち、シミュレーションを構築したい場合
  • ユーザーが監視レーダー、スキャン、再訪時間、検出確率、レーダーのカバレッジについて言及した場合
  • ユーザーがスキャン戦略(機械式、電子式、ハイブリッド)を比較したい場合
  • ユーザーがトラッカー(trackerGNN、trackerJPDA)に渡す検出データを生成したり、センサーフュージョンを行ったりしたい場合
  • ユーザーがモンテカルロ解析、トレードスタディ、またはリンクバジェット予測に対する検証を行いたい場合
  • ユーザーがカバレッジを最大化するためのレーダー配置やジオメトリを調べている場合
  • ユーザーが既存の radarDataGenerator コードを使用しているが、未検出や設定エラーなどの問題がある場合
  • ユーザーがシミュレーション結果を期待される性能に照らして検証したい場合

使用しない場面

  • ユーザーが I/Q レベルの波形シミュレーションを必要としている場合(radarTransceiver とパルスドップラーチェーンを使用してください)
  • ユーザーが CFAR 検出器の設計やビームフォーミングを必要としている場合
  • ユーザーが波形設計を必要としている場合(曖昧度関数、チャープ最適化)
  • ユーザーがすでに検出データを持っており、それを処理したい場合
  • ユーザーがバイスタティックまたはマルチスタティックレーダーの構成を必要としている場合
  • ユーザーが干渉やジャミングのモデル化を必要としている場合(EW シナリオ)
  • ユーザーがカスタムシミュレーションループで radarScenario を使わずに radarDataGenerator を単独で呼び出したい場合

ユーザーが信号レベルの忠実度を必要としている場合は、トレードオフを説明して引き継いでください。

検出経路

radarDataGenerator は、2 つの検出経路をサポートしています。このスキルでは、ターゲット姿勢経路のみを使用します。

経路呼び出しシグネチャ検出を決定する要素使用場面
ターゲット姿勢(このスキル)detect(scenario)DetectionProbability、FalseAlarmRate、ReferenceRange、ReferenceRCS標準的なレーダーシミュレーション — ターゲットを軌道を持つプラットフォームとして定義します
放射信号detect(scenario, propagatedEmissions)Sensitivity、DetectionThresholdESM 受信機、明示的な放射信号の伝搬を伴うバイスタティック構成

一方の経路のプロパティは、もう一方の経路にはまったく影響しません。ターゲット姿勢経路で Sensitivity または DetectionThreshold を設定すると、「関連なし」という警告が表示されます。

スタンドアロンモード: radarDataGenerator はシナリオの外でも呼び出せます:[dets, numDets, config] = rdg(targetPoses, simTime)。カスタムループ(Simulink、イベント駆動型)への統合に使用します。このモードでは、advance()、軌道の自動化、マルチセンサー集約、カバレッジの可視化は利用できません。スタンドアロン API と姿勢構造体の要件については、references/detection-model.md を参照してください。

ワークフロー

以下の 9 つのステップを対話形式で進めてください。パラメーターを黙って選択してはいけません。各判断点でユーザーに確認してください。

ステップ 1:アプローチの提案

radarScenario 内で radarDataGenerator を使用する統計レベルのシミュレーションを提案してください。シナリオ設計をすばやく反復できる一方で、信号処理の制御性は低くなるというトレードオフを説明してください。ユーザーが I/Q レベルの忠実度を必要としている場合は、代替手段(radarTransceiver + パルスドップラー + CFAR)を示し、構造化された 9 ステップのフローを終了してください。

統計レベルのシミュレーションをユーザーが確認したら、アプローチを伝え、使用する API(radarScenario、radarDataGenerator、platform、waypointTrajectory/kinematicTrajectory/geoTrajectory)を示してください。

ステップ 2:ユースケースを確認する

ユースケース(例:地上から特定のセクターを走査する監視)を提案します。以下を確認します。

  • 走査タイプ: 機械走査を提案し、電子走査または両方を選択肢として提示します。
  • 座標系: NED(デフォルト)、ENU、または地球中心座標系。各座標系の影響を説明します。
  • 構成: モノスタティックであることを確認します。
  • 伝搬環境: デフォルトは FreeSpace(屈折なし)です。ユーザーが長距離、仰角の低いターゲット、または見通し線外について言及した場合は、大気モデル atmosphere(scenario, model) を提示します。選択肢は 'EffectiveEarth'(半径の 4/3)、'RefractivityGradient'、または 'CRPL' です。これらは伝搬経路に屈折バイアス(光線の湾曲)を加え、報告されるターゲット位置に影響しますが、リンクバジェットに大気減衰を加えるものではありません。気象や降水は統計的なレベルではモデル化されません。
ステップ 3:パラメーターの指定方法を確認する

「どの方向で進めますか?トップダウン(要件を指定してハードウェアを導出)、ボトムアップ(ハードウェアを指定して性能を導出)、それとも両方を組み合わせますか?」

ユーザーがデータシートを提示した場合は、references/coupled-parameters.md のデータシート取り込み手順に従います。パラメーターを抽出し、グループに対応付け、不足項目を特定し、リンクバジェットを確定して、矛盾があれば明示します。

ここでフローが分岐します。

トップダウンの経路(ステップ 4 → 5):ユーザーがまず性能要件を指定し、その後ハードウェアを導出します。

  • ステップ 4:基準性能(距離、RCS、Pd、Pfa)を提案します。
  • ステップ 5:関連パラメーターの表を提示し、要件を満たすために必要なハードウェアを導出します。

ボトムアップの経路(ステップ 5 → 4):ユーザーがまずハードウェアを指定し、その後性能を導出します。

  • ステップ 5:関連パラメーターの表を提示し、ハードウェア仕様(電力、ゲイン、NF、帯域幅など)を収集します。
  • ステップ 4:ハードウェアから radareqrng を使って基準性能を導出し、提示します。

混合/データシート: ユーザーが提示した情報を収集し、両方の方向から不足項目を補い、矛盾があれば明示します。

どちらの経路もステップ 6(ターゲットセットの設計)に合流します。

ステップ 4:基準性能を提案する

基準ターゲット仕様として、以下を提示します。

  • 基準距離、基準 RCS(ReferenceRCS の単位は dBsm であることに注意)
  • 検出確率、誤警報率(有効範囲:[1e-7, 1e-3])
  • 積分タイプとパルス数(コヒーレントを前提とし、N または CPI を確認)
  • モノスタティック、晴天

トップダウン: 具体的なデフォルト値を提示します。ユーザーに確認し、変更を受け付けます。 ボトムアップ: ユーザーのハードウェアから導出した値を提示します。導出過程(使用した関数と入力値)を示します。積分についてはコヒーレントを前提とし、パルス数または CPI の継続時間を確認します。必要な SNR には detectability(Pd, Pfa, 1, 'SwerlingN') - 10*log10(N) を使います。Swerling 引数は文字列です:'Swerling0'、'Swerling1'、…、'Swerling4'。コヒーレントシステムでは、detectability に N を渡してはいけません。これは非コヒーレント損失を適用します。詳しくは references/interaction-flow.md § ステップ 4 の完全な判断表を参照してください。

ステップ 5:関連パラメーターの表を提示する

references/coupled-parameters.md にあるパラメーター間の関係を示す表を提示します。これにより、信頼性と追跡可能性を示し、修正を促します。

トップダウン: 表を使って、合意した基準性能を満たすために必要なハードウェアを導出します。 ボトムアップ: 表を使ってユーザーのハードウェア仕様を収集し、制約されているグループを特定します。

ステップ 6:ターゲットセットの設計

幾何条件(レーダーの配置、走査セクター、空中ターゲット)を確認します。次の項目が異なる、実際の環境を反映したターゲットを提案します。

  • RCS(UAV:約 0.01 m²、戦闘機:約 1 m²、民間航空機:約 10 m²)
  • 速度(回転翼機:50 m/s、ジェット機:250 m/s、高速移動体:300 m/s 以上)
  • 高度(低空飛行:500 m、中高度:5 km、高高度:10 km)

Swerling モデル(I=緩やかな変動、III=支配的な散乱体)を提案します。各プラットフォームの Signatures プロパティにある rcsSignature で、ターゲットごとの RCS を設定します。設定例については、references/detection-model.md を参照してください。デフォルトのプラットフォーム RCS は 10 dBsm(Swerling0)です。

続行する前の健全性チェック:

  1. horizonrange(antennaHeight) を使用して、ターゲットの位置がレーダーの地平線内にあることを確認します。指定された高度で LOS を超えるターゲットがある場合は、ユーザーにその旨を伝えます。

  2. 各ターゲットについて、Pd 0.9 の基準距離を計算します。次のような表を提示します。

ターゲットRCS (dBsm)Swerling距離 (km)予測 Pd
UAV-201150.72
戦闘機01400.95

次の式を使用します:SNR_at_R = RadarLoopGain + RCS_dBsm - 40*log10(range)。その後、正しい Swerling の式で SNR を Pd に変換します(references/radar-equation-tools.md を参照)。予測 Pd が 0.5 未満のターゲットがあれば、その旨を伝えます。ユーザーがシミュレーションを実行する前に、検出の信頼性が低いターゲットを把握できるようにします。

次のように質問します。「地形や地上反射が必要ですか。それとも自由空間で十分ですか?」

ステップ 7:地形/遮蔽

該当する場合は、地形のオプションについて references/terrain-clutter-atmosphere.md を参照してください。検出を自由空間で検証した後に、地形と遮蔽を追加します。landSurface は標高マップ、seaSurface は海況、customSurface はユーザー定義のサーフェスに使用します。landSurface には LOS の遮断を判定する occlusion() があります。radarDataGenerator の HasOcclusion はターゲット間の遮蔽を示します。

ステップ 8:シミュレーション時間

秒数、走査回数、ターゲットへの照射回数、イベントベースのいずれかで、ユーザーが指定する単位を尋ねます。走査パラメーターが確定したら、これらの単位を相互に換算します。

ステップ 9:要件シートの作成

3 つのセクションからなる独立したドキュメントを生成します。references/requirements-sheet-template.md を参照してください。

主な機能

機能用途ツールボックス
radarScenarioシナリオのコンテナ(プラットフォーム、時間、検出)Radar
radarDataGenerator統計的検出センサーRadar
platformシナリオにプラットフォームを追加Radar
waypointTrajectoryローカル座標でのウェイポイントベースの動作(ReferenceFrameを持ちます)Radar
kinematicTrajectoryローカル座標での状態ベースの動作(ReferenceFrameはありません)Radar
geoTrajectory測地座標(緯度/経度/高度)でのウェイポイントベースの動作 — IsEarthCentered = trueが必要ですRadar
radareqrngレーダー方程式から最大検出距離を算出Radar
radareqpow必要な送信電力Radar
radareqsnr距離における受信SNRRadar
detectabilityPd/Pfa/N/Swerlingに必要なSNR(検出可能性係数)Radar
albersheimPd/Pfa/Nに必要なSNR(Swerling 0のみ)Phased Array
shnidmanPd/Pfa/N/Swerling 0~4に必要なSNRPhased Array
horizonrangeアンテナ高からレーダーの見通し距離を算出Radar
height2el目標の高度と距離から仰角を算出Radar
freq2wavelen周波数から波長を算出Phased Array
rangeres2bw距離分解能から帯域幅を算出Phased Array
bw2rangeres帯域幅から距離分解能を算出Phased Array
speed2dop速度からドップラーシフトを算出。片道の規約 — モノスタティックの往復の場合:fd = 2*speed2dop(v, lambda)Phased Array
dop2speedドップラーシフトから速度を算出。片道の規約 — モノスタティックの往復の場合:v = dop2speed(fd, lambda)/2を使用するか、直接lambda*fd/2を使用しますPhased Array
beamwidth2gain半値幅からアンテナ利得を算出。[azBW; elBW]の列ベクトルを渡す必要があります — スカラーの場合は対称ビームを仮定します。Phased Array
aperture2gain有効開口面積からアンテナ利得を算出Phased Array
gain2apertureアンテナ利得から有効開口面積を算出Phased Array
ap2beamwidth開口長と波長からビーム幅を算出Phased Array
beamwidth2apビーム幅と波長から開口長を算出Phased Array
effbeamwidth往復の実効ビーム幅(送信+受信)→ AzimuthResolution/ElevationResolutionに対応しますPhased Array
systempシステム雑音温度Phased Array
noisepow温度と帯域幅から雑音電力を算出Phased Array
theaterplotシナリオの可視化Radar
coverageConfigカバレッジ図Radar
radarmetricplot目標値/しきい値の線と信号機表示を付けて、距離に対する指標をプロットRadar
orientationPlotterビームの指向方向を可視化(theaterPlotプロッター)Radar
detectionPlottertheaterプロット上に検出結果を可視化Radar
landSurface静的な地形(高さ行列またはDTED)— IsEarthCentered=trueの場合のみ遮蔽に使用されますRadar
seaSurface動的な海面(スペクトルモデル、風、フェッチ)Radar
customSurfaceクラッター用の偏波散乱行列サーフェスRadar
surfaceReflectivityLand陸上クラッター反射率モデル(Barton、GITなど)Radar
surfaceReflectivitySea海上クラッター反射率モデルRadar
clutterGeneratorシナリオにクラッターを追加(レーダーセンサーと1対1で対応し、サーフェスが必要です)Radar
ringClutterRegion明示的なクラッター領域を定義(UseBeam=falseの場合に必要です)Radar
getClutterGeneratorレーダー用の既存のクラッター生成器を取得Radar

規約

トレーサビリティ
  • すべての確率的な量は、設定済みのパラメーターに追跡可能です
  • radarDataGeneratorには組み込みのトレーサビリティがあります — プロパティ名自体がドキュメントです
  • 計算を手作業で実装する場合は、モデル、そのパラメーター、およびシステム設計との関連をコメントに記載してください
座標フレーム
  • フレームを1つ選び、全体で一貫して使用します
  • waypointTrajectory には 'ReferenceFrame' プロパティがあり、'NED' または 'ENU' を指定します。IsEarthCentered = false と組み合わせて使用します
  • kinematicTrajectory には ReferenceFrame がなく、シナリオから継承します。IsEarthCentered = false と組み合わせて使用します
  • geoTrajectory は [lat, lon, alt] の地理座標ウェイポイントを [deg, deg, m] で使用します。IsEarthCentered = true が必須です
    • 速度と向きの解釈には 'ReferenceFrame'('NED'/'ENU')を使用します
    • Velocities の代わりに Course、GroundSpeed、ClimbRate も使用できます
    • DetectionCoordinates = 'Scenario' は緯度/経度ではなく、ECEF(メートル単位)で値を報告します
    • ウェイポイントが1つの場合、プラットフォームは静止します(TimeOfArrival は無視されます)
  • 制約: 軌道の種類と IsEarthCentered は厳密に連動しているため、組み合わせが一致しない場合はエラーになります
  • NED:仰角は水平線より上で負になります。ENU:仰角は水平線より上で正になります
  • 必ず検証します。期待される仰角を解析的に計算し、測定値と比較します
パラメーターソースタグ

要件シートの各パラメーターにタグを付けます。

  • ユーザー提供 — ユーザーから提示された値です
  • ドメイン上の仮定 — 妥当なデフォルト値であり、その根拠を示します
  • 導出値 — 他のパラメーターから計算した値です(使用した関数を示します)
システムパラメーターとシミュレーションパラメーター

ユーザーの要件とユースケースを確認した後(ステップ2~6)、次のように区別します。

  • システムパラメーター(ユーザーの設計):FieldOfView、CenterFrequency、Bandwidth、MaxAzimuthScanRate、ReferenceRange、アンテナの高さなど。シミュレーションの問題を修正するために、これらを変更してはいけません。
  • シミュレーションパラメーター(こちらで設定する項目):UpdateRate、RangeLimits、シナリオの UpdateRate、DetectionCoordinates、シミュレーション時間。これらは自由に調整できます。

シミュレーション上のアーティファクトが発生した場合(例:ビームのステップ移動による検出漏れ)、シミュレーションパラメーターを調整して修正します。修正にシステムパラメーターの変更が必要な場合は、物理的な直感を交えてユーザーに伝えます。これは設計上の洞察であり、シミュレーションの修正ではありません。

整合性の検証

すべてのパラメーターを導出した後、一連の処理が整合していることを検証します。

  • ハードウェアの値から radareqrng で Rmax を計算します
  • ReferenceRange = Rmax に設定します
  • シミュレーションを実行し、基準距離で約 Pd となることを確認します
  • 不一致がある場合は、原因を診断して明示します

よくある間違い

間違い誤りである理由正しい方法
release() を呼び出さずに調整不可のプロパティを変更するradarDataGenerator は System オブジェクトです。調整不可のプロパティ(FieldOfView、ScanMode、AzimuthResolution、スキャン制限)は、最初に detect() を呼び出した後はロックされます調整不可のプロパティを変更する前に release(radar) を呼び出し、再実行する前に restart(scenario) を呼び出します
ReferenceRCS に線形の m² を指定するこのプロパティが要求するのは dBsm です変換します:10*log10(rcs_linear)
range2bw / bw2range非推奨ですrangeres2bw / bw2rangeres を使用します
MechanicalScanLimits存在しませんMechanicalAzimuthLimits、MechanicalElevationLimits を使用します
電子走査で MaxAzimuthScanRate を設定する無視されます(警告が表示されます)電子モードでは、ビームは更新ごとに FieldOfView(1) ずつ移動します
detect(scenario) と detect(platform, time) を混同するシグネチャが異なります。シナリオレベルでは、すべてのセンサーの検出結果がまとめて返されますdets = detect(scenario) または [dets, configs] = detect(scenario) のどちらも有効です。プラットフォームごとの場合は [dets, ~, configs] = detect(platform, time) です
NED の仰角の符号を忘れる地平線より上にあるターゲットの仰角は負になります符号を確認します:NED では el = -asind(alt/range) です
Custom 以外のスキャンで HasScanLoss を使用するScanMode='Custom' の場合にのみ適用されますMechanical/Electronic モードでは省略します
軌道の参照座標系を混在させる位置に関するエラーが通知されないまま発生しますすべての waypointTrajectory オブジェクトで同じ 'ReferenceFrame' を設定します
waypointTrajectory が StopTime より短いシナリオは StopTime ではなく、軌道の最大終点で停止します。軌道の終了後、プラットフォームの位置は NaN になり、検出されなくなります(通知はありません)。すべての waypointTrajectory の終点を StopTime 以上に延長します(停止用のウェイポイントを追加します)。または、一定速度のプラットフォームには kinematicTrajectory を使用します。
radar/waypointTrajectory と drivingScenario の軌道を混同するAPI が異なります。drivingScenario では、このクラスではなくアクターのウェイポイントを使用しますradarScenario では、常に waypointTrajectory、kinematicTrajectory、または geoTrajectory を使用します
前方を見るセンサーを搭載した移動プラットフォームに kinematicTrajectory を使用する機体座標系の向きは固定されます(デフォルトは恒等行列=シナリオ座標軸)。速度に合わせて回転しないため、前方を見るセンサーは飛行経路を追跡しません。センサーを搭載した移動プラットフォームには waypointTrajectory または geoTrajectory を使用します。これらでは機体座標系が進行方向に合わせて回転します。
ハードコードされたノイズ(例:0.2*randn)を使用する追跡できず、自己整合性が損なわれますradarDataGenerator の組み込みノイズモデルを使用するか、出典をコメントに記載します
センサーの UpdateRate を設定しないデフォルトは 1 Hz です。スキャンレートは FoV(1)*1 となり、非常に遅くなりますradarDataGenerator では常に 'UpdateRate' を明示的に設定します
シナリオの UpdateRate がセンサーの UpdateRate より小さいエイリアシングが発生し、FoV の滞留位置の一部しかサンプリングされません。サンプリング位置の間にあるターゲットは、通知なしに検出数がゼロになります。検出漏れのないシミュレーションでは、シナリオの UpdateRate をセンサーの UpdateRate と同じ値に設定します。
センサーの直交座標測定値をシナリオ座標系の真値と直接比較するセンサーの直交座標はビーム回転座標系です。各検出の座標系は、検出時にビームが向いていた方向によって異なります。測定値をそのまま使うと、真値から数十 km ずれることがあります。検出ごとの MeasurementParameters(1) を使用します:scenarioPos = Orientation * Measurement + OriginPosition。Orientation 行列には、取り付け方向と現在のスキャン角度が反映されます。
球面測定値の順序が [range, az, el] だと想定する'Sensor spherical' の実際の順序は [az, el, range] ですDetectionCoordinates の設定を確認します。デフォルトは 'Body'(直交座標)です
RangeLimits を設定しないデフォルトは [0, 100 km] です。100 km を超えるターゲットは、通知なしに検出されません'RangeLimits', [0, R] を設定します。R は max(maxTargetRange, ReferenceRange * 1.2) です
MechanicalElevationLimits とともに 'Sector' を使用する'Sector' は HasElevation=false に設定するため、仰角制限は無視されます(警告が表示されます)仰角スキャンが必要な場合は、HasElevation=true を指定した明示的な 'ScanMode','Mechanical' を使用します
検出の問題について HasElevation を設定したり調査したりするHasElevation はターゲットが検出されるかどうかに影響しません。仰角が測定されるかどうか、およびビームが仰角方向にスキャンするかどうかだけを制御します。デフォルトは false(方位角のみ)です。HasElevation=false は設定しないでください(すでにデフォルトです)。検出漏れのデバッグ時に HasElevation を調査しないでください。検出漏れの原因にはなりません。検出漏れの原因は、RangeLimits、ターゲットがスキャンセクターの外にあること、不十分な ReferenceRange/ReferenceRCS、または低すぎる UpdateRate です。
IsEarthCentered=false の状態で atmosphere(scene, model) を呼び出す「IsEarthCentered property must be true to modify the atmosphere model」というエラーが発生しますすべての大気/屈折モデルでは IsEarthCentered=true が必要です。平面地球シナリオは常に自由空間です。
IsEarthCentered=false でも地形がターゲットを遮ると想定するdetect() による地形遮蔽は IsEarthCentered=true の場合にのみ機能します地形によるマスキングが重要な場合は、geoTrajectory を使用した地球中心シナリオを使用します
HasOcclusion と地形遮蔽を混同するHasOcclusion はターゲット間の遮蔽(拡張オブジェクト)を扱います。地形の見通し線は SurfaceManager を介して処理されます地形によるマスキングには、IsEarthCentered=true と landSurface を使用します。ターゲット間の遮蔽には HasOcclusion=true を使用します
地表面を設定せずに clutterGenerator を使用する通知なしにクラッター検出数が 0 になりますクラッタージェネレーターを作成する前に landSurface(scene) または seaSurface(scene) を追加します
radarDataGenerator で ScattererDistribution='RangeDopplerCells' を使用するdetect() でエラーが発生しますradarTransceiver でのみ機能します。radarDataGenerator では 'Uniform'(デフォルト)を使用します
ringClutterRegion なしで UseBeam=false を設定するクラッター検出数が 0 になります明示的な領域を追加します:ringClutterRegion(cg, minR, maxR, azSpan, azCenter)
ターゲット姿勢モードで Sensitivity または DetectionThreshold を設定する「該当しません」。これらは放射経路でのみ使用されますターゲット姿勢の経路(detect(scenario))では、検出は Pd/Pfa/ReferenceRange/ReferenceRCS のみで決まります
表面クラッターをシミュレートするために FalseAlarmRate を増やすFalseAlarmRate は一様分布の誤検出(白色雑音)を生成します。現実的なシグマゼロ、幾何形状、ドップラーを持つ、空間的に相関した表面クラッターはモデル化しません表面(landSurface/seaSurface)と反射率モデルを用いて clutterGenerator を使用します。terrain-clutter-atmosphere.md を参照してください。
radarDataGenerator で信号処理による損失(MTI、STAP、CFAR)をモデル化できると想定する統計モデルでは、クラッター除去フィルターによる損失、STAP の適応重みによる損失、レンジ・ドップラー空間のクラッターリッジ付近での検出能力低下はシミュレートされませんこれらの効果を再現するには、I/Q レベルのシミュレーション(Phased Array System Toolbox の波形と受信機チェーン)が必要です。統計レベルで近似するには、リンクバジェット(radareqsnr)の Loss パラメーターで想定される処理損失を加えるか、クラッターの影響を受ける領域で DetectionProbability を下げます。
モノスタティックの速度分解能に dop2speed(1/CPI, lambda) を使用する正しい値の 2 倍(1.5 m/s ではなく 3.0 m/s)になりますdop2speed は片道の規約を使用します。モノスタティックの速度分解能は lambda/(2*CPI) です。手動の式を使用するか、dop2speed(fd,lambda)/2 を使用します。
radareqrng(SNR, lambda, ...) を呼び出す(引数の順序が誤り)エラーなしで誤った値が返されます正しくは radareqrng(lambda, SNR, Pt, tau, ...) です。lambda が先です
線形値の Gain を radareqrng に渡す非現実的な距離(10^49 km)になりますGain は線形値ではなく dBi です。1000 ではなく 30 を渡します。
dBsm の RCS を radareqrng に渡す3 倍ずれた値になるか、負の値でエラーになりますRCS は線形の m²です。変換します:db2pow(rcs_dBsm)
平均電力を Pt として radareqrng に渡す距離を過小評価しますPt はピーク電力(Watts)です。次のように算出します:Ppeak = Pavg / (tau * PRF)
アンテナゲインの導出に FieldOfView を使用するFoV ≠ ビーム幅の場合、ゲインが誤りますゲインは beamwidth2gain([AzimuthResolution; ElevationResolution]) から求めます。ビーム幅は両方必要です。スカラー入力では対称ビームが仮定されます(ファンビームでは最大 10 dB の誤差)。FoV はスキャン位置ごとの角度範囲であり、必ずしも受信ビーム幅と等しいとは限りません。
FieldOfView は AzimuthResolution と等しくなければならないと想定するAESA または広い Tx 構成でスキャンステップが誤りますFoV と分解能は独立しています。FoV は通常 Tx ビーム幅です。開口を共用する場合、FoV = AzRes です。広い Tx と狭い Rx の場合、FoV > AzRes です。
デフォルト(Swerling0)のターゲットに Swerling I の Pd 式を適用する基準距離で Pd を約 40%過小評価します(0.52 に対して 0.89)target.Signatures{1}.FluctuationModel を確認します。デフォルトは Swerling0 です。marcumq を使用します。Swerling1 ターゲットの場合は Pfa^(1/(1+SNR_lin)) を使用します。

スキャンモード早見表

モード主な動作
'Mechanical'actualRate = min(FieldOfView(1) * sensorUpdateRate, MaxAzimuthScanRate)。以下のスキャンレートモデルを参照してください。
'Electronic'更新ごとにビームが FieldOfView(1) ずつステップします。MaxAzimuthScanRate は無関係です。
'Mechanical and electronic'機械式スキャンで粗く指向し、電子式スキャンで補正します。
'No scanning'ビームを固定して照射します。

便利なコンストラクター:radarDataGenerator(id, 'Raster')、'Rotator'、'Sector'、'Custom'。

機械式スキャンのレートモデル(重要)

機械式モードの実際のスキャンレートは次のとおりです。

actualScanRate = min(FieldOfView(1) * sensorUpdateRate, MaxAzimuthScanRate)  [deg/s]
stepPerScenarioUpdate = actualScanRate / scenarioUpdateRate  [deg]

センサーのデフォルトの UpdateRate は 1 Hz です。 明示的に設定しない場合、MaxAzimuthScanRate にかかわらず、2 度のビームはわずか 2 度/秒でスキャンします。センサーの UpdateRate は必ず明示的に設定してください。

radar = radarDataGenerator(1, 'Sector', ...
    'UpdateRate', 20, ...  % MUST set — default 1 Hz causes very slow scan
    'FieldOfView', [2; 20], ...
    'MaxAzimuthScanRate', 36, ...
    ...);
% actualRate = min(2*20, 36) = 36 deg/s ✓

ビーム幅を狭く保ちながら、希望するスキャンレートを実現するには:

  • sensorUpdateRate >= desiredRate / FieldOfView(1)
  • 例:ビーム幅 2 度で 36 度/秒を実現するには、UpdateRate >= 18 Hz が必要です。
シナリオとセンサーの UpdateRate

センサーは自身の UpdateRate で動作します。シナリオの UpdateRate は、advance()/detect() の実行頻度を制御します。シナリオのレートがセンサーのレートより低い場合、滞空位置の一部しかサンプリングされず、サンプリング位置の間にあるターゲットは検出されないままになります。

ルール: 検出頻度を意図的に疎にする場合を除き、シナリオの UpdateRate はセンサーの UpdateRate と必ず同じ値に設定してください。

検出モデル

SNR = RadarLoopGain + RCS_dBsm - 40*log10(Range)
  • RadarLoopGain:読み取り専用です。ReferenceRange、ReferenceRCS、DetectionProbability、FalseAlarmRate から導出されます。基準 SNR では内部的に Swerling0(変動なし)を使用し、ターゲットの変動モデルは検出時に別途適用されます。
  • ハードウェアの調整項目(Pt、Gain、NF)はありません。すべてが基準性能にまとめられています。
  • CenterFrequency/Bandwidth が影響するのは分解能のみで、検出距離には影響しません。
  • 測定精度:σ² = (Δ/√(2·SNR))² + (BiasFraction·Δ)² — クラメール・ラオ下限にバイアスの下限値を加えたものです。デフォルト値:AzimuthBiasFraction=0.1、RangeBiasFraction=0.05、ElevationBiasFraction=0.1。SNR が高い場合はバイアスの下限値が支配的になります(方位角 0.3°、距離 3.75 m)。
  • 距離に対する Pd はターゲットの FluctuationModel に依存します — デフォルトのプラットフォームは Swerling0(変動なし)です。Swerling0 には marcumq、Swerling1 には Pfa^(1/(1+SNR)) を使用してください。誤った式を使用すると、Pd に約 40% の誤差が生じます。詳しい手順は references/radar-equation-tools.md を参照してください。

エージェントの役割は、レーダー方程式ツールを変換レイヤーとして使用し、ユーザーのハードウェア仕様とこの統計的インターフェースの間をつなぐことです。

トラブルシューティング

症状考えられる原因診断/対処方法
検出がまったくないRangeLimits が短すぎますradar.RangeLimits(2) が最大目標範囲以上であることを確認します
検出がまったくないセンサーの UpdateRate が 1 Hz(デフォルト)ですビームの走査が遅すぎます。UpdateRate を明示的に設定します
検出がまったくない(UpdateRate は設定済み)シナリオの UpdateRate がセンサーの UpdateRate より小さいですFoV の滞留時間のエイリアシングが発生しています。サンプリングされた位置でのみ検出されます。シナリオの UpdateRate をセンサーの UpdateRate と同じに設定します。
検出がまったくない目標がビームの FoV の外側にありますcoverageConfig(radar) を使って現在のビーム方向を取得し、目標の方位と比較します
一部のスキャンでしか検出されない目標がビームのステップ境界付近にあります機械走査では正常な動作です。ビームのステップ位置に方位が一致する高速目標は、一部の走査で見逃されることがあります。ステップサイズを小さくするには、センサー/シナリオの UpdateRate を上げます(シミュレーション上のアーティファクトを修正するために、FieldOfView などのシステムパラメーターは決して変更しないでください)。
検出が多すぎる自己検出(レーダープラットフォーム)フィルターを適用し、TargetIndex == radar platform ID(通常は 1)の検出を無視します
Pd が設定値より大幅に低い目標が ReferenceRange を超えていますSNR は 40·log10(R) に従って低下します。これは想定どおりです。Pd は基準範囲でのみ指定されています
Pd が予想より高い目標の RCS が ReferenceRCS を超えていますRCS が高いほど SNR が上昇します。目標プラットフォームの rcsSignature を確認します
実測 Pd が 1.0 を超える照射回数ではなくスキャン回数で検出数を割っています機械走査は双方向です。セクタースキャンでは照射回数 = 2 × スキャン回数です。IsScanDone からビームの通過回数を数えるか、スキャンのタイミングから計算します:nIlluminations = StopTime / (sector / scanRate)。
測定位置が真値から大きく離れているシナリオ座標系の真値と生の .Measurement をプロットしています必ず最初にシナリオ座標系へ変換してください。 MeasurementParameters.Orientation と .OriginPosition を使って変換します。「方位角 0」はセンサーのボアサイトであり、北ではありません。変換方法の例は API Answer Key を参照してください。
距離制限と LOS 制限の違い目標がレーダーの地平線を超えていますhorizonrange(antennaHeight) を使って確認します。LOS により検出されないことが想定される箇所には、コード内にコメントを記載します。また、コードを書く前の妥当性チェック(ステップ 6 — 目標のジオメトリがレーダーの地平線内にあることを確認)でも検出する必要があります。
自己整合性チェックに失敗するハードウェアから導出した Rmax ≠ 設定済みの ReferenceRangeradareqrng の入力値が、導出に使用したハードウェア仕様と一致しているか再確認します
プログラムによる検証

検出精度のチェック — 測定誤差が想定範囲内であることを確認します。DetectionCoordinates モードを考慮する必要があります。'Scenario' モードを使用しない限り、生の .Measurement 値をシナリオ座標系の真値と比較することはできません。

% Convert detection to scenario frame FIRST (required for all non-Scenario modes)
mp = dets{k}.MeasurementParameters(1);  % first element = position transform
meas = dets{k}.Measurement;
switch mp.Frame
    case 'Spherical'
        az = meas(1); el = meas(2); R = meas(3);
        posSensor = [R*cosd(el)*cosd(az); R*cosd(el)*sind(az); R*sind(el)];
        measScenario = mp.Orientation * posSensor + mp.OriginPosition(:);
    case 'Rectangular'
        measScenario = mp.Orientation * meas(1:3)' + mp.OriginPosition(:);
end
posError = norm(measScenario - truthPos);
expectedSigma = sqrt(trace(dets{k}.MeasurementNoise(1:3,1:3)));
assert(posError < 5*expectedSigma, 'Position error exceeds 5-sigma');

SNR のチェック — 報告された SNR がリンクバジェットの予測と一致することを確認します(約 1 dB 以内)。

expectedSNR = radar.RadarLoopGain + rcs_dBsm - 40*log10(slantRange);
reportedSNR = dets{k}.ObjectAttributes{1}.SNR;
assert(abs(reportedSNR - expectedSNR) < 1.0, 'SNR mismatch > 1 dB');

モードを考慮した検証パターンの全例については、座標と変換 — 検証を参照してください。

デバッグ: ビームポインティングの切り分け

「検出がまったくない」または予期しない検出ギャップを診断する際は、問題がビームポインティングにあるのか、それとも別の要因にあるのかを切り分けます。

  1. センサーを解放してから、全方向モードに切り替えます:
origFoV = radar.FieldOfView;
origScan = radar.ScanMode;
release(radar);
radar.FieldOfView = [360; 180];
radar.ScanMode = 'No scanning';
  1. 再起動してシナリオを再実行します (restart(scenario) + 進行ループ)
  2. 結果を解釈します:
    • 検出が現れる → 問題はビームポインティング (スキャン範囲、MountingAngles、FoV、ターゲットを飛び越すスキャンステップ)
    • それでも検出がない → 問題は別の箇所 (RangeLimits、UpdateRate のエイリアシング、ReferenceRange、水平線、ターゲット RCS)
  3. 続行する前に解放して元の構成に戻します:
release(radar);
radar.FieldOfView = origFoV;
radar.ScanMode = origScan;

注意: radarDataGenerator は System オブジェクトです。detect() を呼び出した後は、先に release(radar) を呼び出さない限り、調整不可のプロパティ (FieldOfView、ScanMode、AzimuthResolution、スキャン範囲など) を変更できません。調整不可のプロパティを変更する前には、必ず release() を呼び出してください。

これは個々のパラメータを掘り下げる前に実施してください。1 回のテストで問題の範囲を半分に絞り込めます。

デバッグの順序
  1. 全方向モードによる切り分け (上記) — 1 回のテストでビームポインティングの可能性を除外します
  2. 系統的な原因の調査 — RangeLimits のゲート、スキャンセクターの境界、UpdateRate のエイリアシング。これらは決定論的な失敗 (検出確率 0%) を引き起こし、1 回の実行で特定できます。
  3. モンテカルロ試行 (最後) — 系統的な原因が除外された後にのみ行います。反復実行を用いて確率的な挙動を特徴づけます: Swerling ゆらぎ、検出境界付近での断続的な検出、経験的 Pd と解析的 Pd の比較。検出が 0 件になるターゲットの診断にモンテカルロを実行しないでください。それは常に系統的な原因です。
前向きの修正: ステップ階層

検証が失敗した場合、誤りである可能性がある最新のステップを修正します。シナリオの選択 (ステップ 6〜7) に合わせるためにシステムパラメータ (ステップ 1〜5) を決して変更しないでください。レーダーの FoV がターゲットを覆っていない場合、そのターゲットはカバレッジ外です。「修正」するために FoV を広げないでください。真の設計上の誤りがある場合にのみ、以前のステップに戻って検討します。

シミュレーション出力の分析

サイレントエラーを引き起こす重要な NED の落とし穴:

  • 幾何学的仰角 (上が正): atand(-dx(3) ./ horizRange) — 空中ターゲットが正の角度になるように D 軸を反転します。センサーの球面仰角は NED では符号が逆になります (センサーの +z = Down): 空中ターゲットは負の el になります。
  • 方位角: atan2d(East, North) — 引数を入れ替えると方位角が東基準になります (90° の誤差)
  • 経験的 Pd: platformID = targetIndex + 1 (レーダーはプラットフォーム 1) — 1 ずれるオフバイワンがよくあります
  • 解析的 Pd: デフォルトは Swerling0 (marcumq) であり、Swerling I ではありません — 誤った式を使うと 40% の誤差になります
  • SNR: RadarLoopGain + RCS_dBsm - 40*log10(R) — 積分利得を加算しないでください (RLG にすでに含まれています)

完全な変換レシピと検証パターンについては、座標と変換を参照してください。

出力要件

  1. 要件シート — 独立した文書 (references のテンプレートを参照)
  2. MATLAB スクリプト — 実行可能で、設計根拠のコメントと結合パラメータ表を含むもの
  3. 検証 — シミュレーションの検出結果を解析的予測と比較する
コード生成のルール
  • radarDataGenerator のデフォルトに決して頼らないでください。 デフォルト値を使用する場合でも、コンストラクターで関連するすべてのプロパティを明示的に設定してください。これによりコードが自己文書化されます。読者はドキュメントを参照することなく、すべてのパラメータの選択を確認できるべきです。隠れたデフォルトは隠れた前提です。例外 — プロパティのゲーティング: 現在の構成に関係のないプロパティは設定しないでください。ゲートされたプロパティを設定すると警告が発生します (「この構成では関係ありません」)。以下のプロパティゲーティング表を参照してください。
  • 各パラメータ値をその出所 (ユーザー提供、導出 (どの入力からか)、またはドメインの前提 (根拠付き)) でタグ付けしてください。
プロパティのゲート条件

Has* フラグでゲートされるプロパティ:フラグが false の場合は設定しないでください。

ゲート(false の場合)設定しないプロパティ
HasElevationElevationResolution、ElevationBiasFraction、MaxElevationScanRate、MechanicalElevationLimits、ElectronicElevationLimits
HasRangeRateRangeRateResolution、RangeRateBiasFraction、RangeRateLimits、HasRangeRateAmbiguities
HasRangeAmbiguitiesMaxUnambiguousRange
HasRangeRateAmbiguitiesMaxUnambiguousRadialSpeed

ScanMode でゲートされるプロパティ:

ScanMode設定しないプロパティ
'No scanning'MaxAzimuthScanRate、MaxElevationScanRate、MechanicalAzimuthLimits、MechanicalElevationLimits、ElectronicAzimuthLimits、ElectronicElevationLimits
'Mechanical'ElectronicAzimuthLimits、ElectronicElevationLimits
'Electronic'MechanicalAzimuthLimits、MechanicalElevationLimits、MaxAzimuthScanRate、MaxElevationScanRate
'Mechanical and electronic'(すべてのスキャンプロパティが有効)

HasScanLoss は決して設定しないでください。すべてのスキャンモードで警告が表示されます(現在のどの構成でも有効ではありません)。

EmissionsInputPort=true の場合:ScanMode、FieldOfView、またはスキャンの制限値/レートプロパティは設定しないでください(スキャンはエミッションによって制御されます)。

TargetReportFormat でゲートされるプロパティ:

Format設定しないプロパティ
'Clustered detections' または 'Detections'FilterInitializationFcn、ConfirmationThreshold、DeletionThreshold、TrackCoordinates
'Tracks'DetectionCoordinates

DetectionMode でゲートされるプロパティ:

Mode設定しないプロパティ
'ESM'ReferenceRange、ReferenceRCS、DetectionProbability

参考資料

タスクに必要なものだけを読み込んでください。プロンプトごとにすべての参考資料を読む必要はありません。

参考資料読むタイミング
検出モデルレーダープロパティの設定、プロパティ名のデバッグ、検出経路の理解
FoV とスキャンFieldOfView の設定、スキャンモードの構成、UpdateRate/スキャンレートの導出
座標と変換検出結果の解釈、座標系の変換、NED の仰角/方位角、プロット
軌跡ターゲットの動き、静止プラットフォーム、シナリオの継続時間、機体座標系の向き
地形、クラッター、雰囲気表面の追加、クラッター生成器、雰囲気モデル、遮蔽
レーダー方程式ツールボトムアップの導出、ハードウェアから ReferenceRange への橋渡し、距離に対する Pd
可視化theaterPlot、カバレッジプロット、radarmetricplot
連動パラメーターステップ 5:パラメーター関係表、データシートの取り込み
対話フロー推奨表現を含む 9 ステップのワークフロー全体
要件シートのテンプレートステップ 9:3 セクションから成る出力成果物の構成

Copyright 2026 The MathWorks, Inc.

コメント