1. 引言
在电子对抗仿真中,雷达探测范围是衡量其作战效能的核心指标之一。当雷达受到干扰时,其探测范围会发生显著变化,直观展示这种变化对于分析干扰效果、评估雷达抗干扰能力具有重要意义。
STK(Systems Tool Kit)作为航天与防务领域广泛使用的仿真分析软件,提供了强大的雷达覆盖分析能力。通过 STK 的 Object Model COM 接口,我们可以在 MATLAB 中灵活地控制 STK 场景,实现雷达受干扰前后探测范围的动态对比显示。
本文将介绍如何利用 MATLAB 调用 STK Object Model COM 接口,实现雷达受干扰前后探测范围变化的可视化。
2. 技术基础
2.1 STK Object Model COM 简介
STK Object Model 是 STK 提供的编程接口,支持通过 COM(Component Object Model)技术在外部程序中控制 STK。MATLAB 可以通过 actxserver 函数创建 STK 应用实例,进而操作场景中的对象。
2.2 雷达干扰模型
雷达干扰通常分为压制式干扰和欺骗式干扰两类。本文以压制式干扰为例,干扰机发射噪声信号,降低雷达接收端的信噪比,从而缩小雷达的探测距离。在 STK 中,可以通过调整雷达的检测门限或添加干扰源来模拟这一过程。
3. 环境准备
3.1 软件要求
- MATLAB(建议 R2018b 及以上版本)
- STK 11 或更高版本(需安装 Object Model 组件)
- 操作系统:Windows(COM 接口依赖)
3.2 启动 STK 并连接 MATLAB
在 MATLAB 中启动 STK 并建立连接:
matlab
% 创建 STK 应用实例
stkApp = actxserver('STK11.Application');
% 设置 STK 可见
stkApp.Visible = 1;
% 获取场景根对象
root = stkApp.Personality2;
4. 创建雷达场景
4.1 新建场景
matlab
% 新建场景
root.NewScenario('RadarJammerDemo');
scenario = root.CurrentScenario;
% 设置场景时间
scenario.SetTimePeriod('1 Jan 2026 00:00:00', '1 Jan 2026 01:00:00');
4.2 添加雷达设施
matlab
% 添加雷达设施
facility = scenario.Children.New('eFacility', 'RadarSite');
% 设置雷达位置(经纬度,单位:度)
facility.Position.AssignGeodetic(39.9042, 116.4074, 0.05);
% 获取雷达对象
radar = facility.Children.New('eRadar', 'SearchRadar');
4.3 配置雷达参数
matlab
% 设置雷达工作频率(Hz)
radar.Frequency = 3e9;
% 设置雷达峰值功率(W)
radar.PeakPower = 100000;
% 设置天线增益(dB)
radar.AntennaGain = 30;
% 设置雷达检测门限(dBm)
radar.DetectionThreshold = -110;
5. 添加干扰机
5.1 创建干扰机设施
matlab
% 添加干扰机设施
jammerFacility = scenario.Children.New('eFacility', 'JammerSite');
% 设置干扰机位置(距离雷达约 50 km)
jammerFacility.Position.AssignGeodetic(39.9042, 116.4074 + 0.5, 0.05);
5.2 配置干扰机参数
matlab
% 获取干扰机对象
jammer = jammerFacility.Children.New('eJammer', 'NoiseJammer');
% 设置干扰机有效辐射功率(W)
jammer.EIRP = 1000;
% 设置干扰频率(与雷达同频)
jammer.Frequency = 3e9;
% 设置干扰带宽(Hz)
jammer.Bandwidth = 10e6;
6. 计算并显示探测范围
6.1 无干扰时的探测范围
matlab
% 创建覆盖定义
coverageDef = scenario.Children.New('eCoverageDefinition', 'CovDef');
% 添加雷达作为覆盖的资产
coverageDef.Assets.Add(radar);
% 设置覆盖网格分辨率(度)
coverageDef.Grid.Resolution = 0.5;
% 计算无干扰时的覆盖
coverageDef.ComputeAccesses();
6.2 添加干扰后重新计算
matlab
% 在雷达上添加干扰接收机(模拟干扰对雷达的影响)
radar.Children.New('eReceiver', 'JammerReceiver');
% 重新计算覆盖
coverageDef.ComputeAccesses();
6.3 生成覆盖图
matlab
% 获取覆盖图对象
covFigure = coverageDef.Figures.New('eFigureCoverage', 'CoverageFigure');
% 设置覆盖图属性
covFigure.Attributes.Grid = 1;
covFigure.Attributes.GridColor = [1 0 0];
% 显示覆盖图
covFigure.Visible = 1;
7. 动态对比显示
7.1 创建对比窗口
matlab
% 创建两个 3D 窗口分别显示干扰前后效果
window1 = root.Windows3D.New('BeforeJammer');
window2 = root.Windows3D.New('AfterJammer');
% 设置窗口位置
window1.WindowState = 1; % 正常显示
window2.WindowState = 1;
7.2 控制视角同步
matlab
% 将两个窗口的视角同步到雷达位置
viewPoint = [39.9042, 116.4074, 100000]; % 雷达上方 100 km
window1.Camera.ViewPoint = viewPoint;
window2.Camera.ViewPoint = viewPoint;
7.3 切换干扰状态
matlab
% 关闭干扰机(无干扰状态)
jammer.Enabled = 0;
window1.Capture('BeforeJammer.png');
% 开启干扰机(受干扰状态)
jammer.Enabled = 1;
window2.Capture('AfterJammer.png');
8. 完整示例代码
以下为完整的 MATLAB 脚本,可直接运行:
matlab
%% 雷达受干扰前后探测范围变化演示
% 利用 MATLAB 调用 STK Object Model COM
clear; clc; close all;
%% 1. 启动 STK
stkApp = actxserver('STK11.Application');
stkApp.Visible = 1;
root = stkApp.Personality2;
%% 2. 新建场景
root.NewScenario('RadarJammerDemo');
scenario = root.CurrentScenario;
scenario.SetTimePeriod('1 Jan 2026 00:00:00', '1 Jan 2026 01:00:00');
%% 3. 添加雷达
facility = scenario.Children.New('eFacility', 'RadarSite');
facility.Position.AssignGeodetic(39.9042, 116.4074, 0.05);
radar = facility.Children.New('eRadar', 'SearchRadar');
radar.Frequency = 3e9;
radar.PeakPower = 100000;
radar.AntennaGain = 30;
radar.DetectionThreshold = -110;
%% 4. 添加干扰机
jammerFacility = scenario.Children.New('eFacility', 'JammerSite');
jammerFacility.Position.AssignGeodetic(39.9042, 116.4074 + 0.5, 0.05);
jammer = jammerFacility.Children.New('eJammer', 'NoiseJammer');
jammer.EIRP = 1000;
jammer.Frequency = 3e9;
jammer.Bandwidth = 10e6;
%% 5. 创建覆盖定义
coverageDef = scenario.Children.New('eCoverageDefinition', 'CovDef');
coverageDef.Assets.Add(radar);
coverageDef.Grid.Resolution = 0.5;
%% 6. 计算无干扰覆盖
jammer.Enabled = 0;
coverageDef.ComputeAccesses();
% 生成无干扰覆盖图
covFigure1 = coverageDef.Figures.New('eFigureCoverage', 'CovBefore');
covFigure1.Attributes.Grid = 1;
covFigure1.Attributes.GridColor = [0 1 0]; % 绿色表示正常范围
covFigure1.Visible = 1;
%% 7. 计算受干扰覆盖
jammer.Enabled = 1;
coverageDef.ComputeAccesses();
% 生成受干扰覆盖图
covFigure2 = coverageDef.Figures.New('eFigureCoverage', 'CovAfter');
covFigure2.Attributes.Grid = 1;
covFigure2.Attributes.GridColor = [1 0 0]; % 红色表示受干扰范围
covFigure2.Visible = 1;
%% 8. 保存对比图
% 使用 3D 窗口截图
window = root.Windows3D.New('CompareWindow');
window.Camera.ViewPoint = [39.9042, 116.4074, 200000];
window.Camera.UpVector = [0, 1, 0];
% 分别截图
jammer.Enabled = 0;
pause(1);
window.Capture('BeforeJammer.png');
jammer.Enabled = 1;
pause(1);
window.Capture('AfterJammer.png');
disp('演示完成,对比图已保存!');
9. 结果分析与展示
9.1 对比效果
运行上述代码后,可以得到两张对比图:
- 无干扰状态:雷达探测范围较大,覆盖区域呈圆形或扇形分布;
- 受干扰状态:雷达探测范围明显缩小,尤其在干扰机方向出现凹陷。
9.2 量化分析
可以通过 STK 的覆盖统计功能量化干扰效果:
matlab
% 获取覆盖统计
covStats = coverageDef.ComputeCoverageStatistics();
% 输出覆盖面积(平方千米)
fprintf('覆盖面积: %.2f km^2\n', covStats.Area);
10. 常见问题与注意事项
10.1 COM 连接失败
- 确认 STK 已正确安装且版本与
actxserver中的 ProgID 一致; - 以管理员身份运行 MATLAB;
- 检查 MATLAB 与 STK 的位数是否一致(均为 64 位)。
10.2 干扰效果不明显
- 增大干扰机 EIRP 或减小干扰距离;
- 降低雷达检测门限;
- 调整干扰频率使其更精确地对准雷达工作频率。
10.3 覆盖图不显示
- 确认
coverageDef.ComputeAccesses()已成功执行; - 检查覆盖图对象是否设置为可见;
- 尝试使用
root.ExecuteCommand命令刷新视图。
11. 总结
本文详细介绍了如何利用 MATLAB 调用 STK Object Model COM 接口,实现雷达受干扰前后探测范围变化的可视化。通过 STK 的覆盖分析功能,我们可以直观地对比干扰前后的探测范围差异,为电子对抗仿真分析提供了有效手段。
该方法具有良好的扩展性,可以进一步应用于多雷达组网、多干扰机协同等复杂场景的仿真分析。