多目标情况下雷达系统测距和多普勒频率数据的建模和可视化¶
本例演示如何模拟雷达系统,并使用calc_range_doppler_visual函数在Engee中可视化随时间变化的测距和多普勒强度数据。测距-时间和多普勒强度表通过显示目标测距和多普勒参数随时间变化的情况,帮助探测环境中的目标。
使用的功能¶
# функция для прогона модели
function run_model( name_model, path_to_folder )
Path = path_to_folder * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
model = engee.open( name_model ) # Открыть модель
model_output = engee.run( model, verbose=true ); # Запустить модель
# engee.close( name_model, force=true ); # Закрыть модель
else
model = engee.load( Path, force=true ) # Загрузить модель
model_output = engee.run( model, verbose=true ); # Запустить модель
# engee.close( name_model, force=true ); # Закрыть модель
end
return model_output
end;
# функция построения динамическогой визуализации изменения дальности и частоты Доплера
function calc_range_doppler_visual(out_range,out_doppler,time_simulation,paramRadarVisual)
gr()
out_doppler .= 20log10.(out_doppler .+ eps(1.0))
max_doppler = maximum(out_doppler)
out_doppler.= map(x-> x> max_doppler-5 ? x : max_doppler-5,out_doppler)
num_step = ceil(Int64,size(out_range,3)/20) # шаг по отсчетам в симуляции
# Выделение памяти для заполнения данных симуляции
viz_Range = fill(NaN,size(out_range)...)
viz_Doppler = fill(NaN,size(out_doppler)...)
# Задание осей для построения динамического графика
x_axis_range = Vector(range(start=0,stop=paramRadarVisual.max_range,length=size(viz_Range,1)))
y_axis_range = Vector(range(start=0,stop=time_simulation,length=size(viz_Range,3)))
x_axis_doppler = Vector(range(start=paramRadarVisual.DopplerOff,
stop=-paramRadarVisual.DopplerOff,length=size(viz_Doppler,1)))
y_axis_doppler = Vector(range(start=0,stop=time_simulation,length=size(viz_Doppler,3)))
plot_range = heatmap(ylabel="Время,с", xlabel="Дальность,м",font_family="Computer Modern",
title="Изменение дальности целей во времени",title_font=font(12,"Computer Modern"),
colorbar_title="Мощность, мкВт",color=:viridis,size = (600,400))
plot_doppler = heatmap(ylabel="Время,с", xlabel="Частота Доплера, Гц",font_family="Computer Modern",
title="Изменение частоты Доплера целей во времени",title_font=font(12,"Computer Modern"),
colorbar_title="Мощность, дбВт",color=:viridis,size = (600,400))
@info "Построение визуализации изменения дальности целей от времени..."
anim1 = @animate for i in 1:num_step:size(viz_Range,3)
@info "$(round(100*i/size(viz_Range,3))) %"
viz_Range[:,:,1:i] .= out_range[:,:,1:i]*1e6
heatmap!(plot_range,x_axis_range,y_axis_range,permutedims(viz_Range[:,1,:]),colorscale= :haline)
(i+num_step > size(viz_Range,3)) && (heatmap!(plot_range,x_axis_range,y_axis_range,
permutedims(out_range[:,1,:]*1e6),colorscale= :haline); @info "100.0 %")
end
@info "Построение визуализации изменения частоты Доплера от времени ..."
anim2 = @animate for i in 1:num_step:size(viz_Doppler,3)
@info "$(round(100*i/size(viz_Doppler,3))) %"
viz_Doppler[:,:,1:i] .= out_doppler[:,:,1:i]
heatmap!(plot_doppler,x_axis_doppler,y_axis_doppler,permutedims(viz_Doppler[:,1,:]),colorscale= :haline)
(i+num_step > size(viz_Doppler,3)) && (heatmap!(plot_doppler,x_axis_doppler,y_axis_doppler,
permutedims(out_doppler[:,1,:]),colorscale= :haline); @info "100.0 %")
end
return anim1,anim2
end;
1. 模型结构描述¶
让我们来详细了解一下模型的结构方案:
发送器(发射器)
Waveform Rectungular:产生一串矩形脉冲的探测信号源;- 发射器**:产生的矩形脉冲的放大器;
- 窄带发射阵列**:形成定向模式的发射天线元件(或天线阵列);
物体运动(平台)
平台子系统模拟雷达和目标的运动。雷达和目标的位置和速度被自由空间块用于模拟传播,射角块用于计算目标位置的信号入射角。- 雷达平台***:用于模拟雷达运动。雷达安装在位于原点的静止平台上。 目标平台:用于模拟目标运动。 ** 射程角**:用于模拟目标运动。
通道和目标
。自由空间:信号传播到目标并返回接收器的自由空间,其衰减与目标的距离成正比;
- 目标**:根据雷达截面(RCS)反射入射信号的目标模型。
- 接收器前置放大器**:将目标反射的信号送入接收天线阵列,并加上接收器自身的热噪声进行放大。
接收器
** 窄带接收阵列**:模拟天线接收的信号。
- 接收器前置放大器:放大从目标接收的信号,并添加自身的热噪声。 ** 范围处理子系统 - 执行匹配滤波以提高信噪比,然后由一个块(时变增益)执行可调增益以补偿范围损失,并对 10 个脉冲进行不连贯积分。
**多普勒处理子系统*** - 将接收到的信号在一个数据包中累积 10 个脉冲,然后进行 FFT,以估算目标的多普勒频率(速度)。
该模型的运行示意图如下图所示:
数字处理包括以下要素
根据结构图,我们开发了下图所示的雷达模型。
2 输入参数初始化¶
为了初始化模型的输入参数,我们连接了文件 "ParamRadarVisual.jl"。如果需要更改参数值,请打开该文件并编辑必要的参数
include("$(@__DIR__)/ParamRadarVisual.jl")
paramRadarVisual = calcParamRadarVisual();
pulse_length = paramRadarVisual.pulse_length*100; # Длительность импульса
该模型允许对发射器和接收器的天线阵列进行灵活调整,包括:元件类型、天线阵列的几何形状(如下图所示,该模型使用 1 个各向同性辐射器):
3.运行模型¶
让我们定义模型运行函数 run_model 并运行模型模拟:
run_model("RadarSystemVisualExample", @__DIR__);
模拟结果可通过"强度图 "图形类型进行可视化:
在测距-多普勒图中,可以观察到 3 个目标:1 个正在接近雷达,1 个正在远离雷达,3 个静止不动。此外,在测距-多普勒图中还可以观察到多普勒频率的估计值
动态可视化的结果显示在视频 "VizualizeDiagramm.gif "中。
4.读取输出数据¶
从工作区读取必要的变量(本例中为 Range 和 Doppler):
out_Range = zeros(Float64,size(Range.value[1],1),size(Range.value[2],2),length(Range.value))
[out_Range[:,:,i] = collect(Range.value[i]) for i in eachindex(Range.value)]
out_Doppler = zeros(Float64,size(Doppler.value[1],1),size(Doppler.value[2],2),length(Doppler.value))
[out_Doppler[:,:,i] = collect(Doppler.value[i]) for i in eachindex(Doppler.value)]
time_simulation = Range.time[end];
5.显示结果¶
利用之前计算的数据,我们来建立一个可视化的系统响应范围和多普勒频率。为此,请调用 calc_range_doppler_visual函数:
# сохранения анимации в переменных anim_range,anim_doppler
anim_range,anim_doppler = calc_range_doppler_visual(out_Range,out_Doppler,time_simulation,paramRadarVisual)
# Сохранение визуализации отклика в файле формата .gif
gif(anim_range, "Visual_Range.gif", fps = 1)
gif(anim_doppler, "Visual_Doppler.gif", fps = 1);
保存文件后,当前文件夹的内容中将出现两个文件--Visual_Range.gif 和 Visual_Doppler.gif,这两个文件存储了测距和多普勒频率随时间变化的动态变化:
可视化示例如下:
gif(anim_range, "Visual_Range.gif", fps = 1)
gif(anim_doppler, "Visual_Doppler.gif", fps = 1)
结论¶
总之,本案例研究展示了恩吉环境中雷达系统的设计,以及随时间变化的测距和多普勒频率信息可视化的计算和构建。