用于单个目标距离估计的车载雷达¶
本例讨论基于线性频率调制(LFM)信号的汽车雷达系统模型的设计,用于单个目标的距离估计。
使用的函数¶
Pkg.add(["LinearAlgebra", "DSP", "FileIO" ,"Images" , "ImageShow"])
using DSP,FFTW,LinearAlgebra
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 ) # Открыть модель
engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
else
model = engee.load( Path, force=true ) # Загрузить модель
engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
end
return
end;
function DataFrame2Array(X)
out = collect(X)
out_data = zeros(eltype(out.value[1]),size(out.value[1],1),size(out.value[1],2),length(out.value))
[out_data[:,:,i] = out.value[i] for i in 1:length(out.value)]
return out_data, out.time
end
function calc_spectrogram(x::Array,fs::Real,title::String;
num_pulses::Int64 = 4,
window_length::Int64 = 64,
nfft::Int64=512,
lap::Int64 = 60,
thesh::Real = -Inf)
gr()
spec_out = DSP.spectrogram(x[:,:,1:num_pulses][:],window_length,lap;window=kaiser(window_length,3.95),nfft=nfft,fs=fs)
power = DSP.pow2db.(spec_out.power)
power .= map(x -> x < thesh ? thesh : x,power)
power_new = zeros(size(power))
power_new[1:round(Int64,size(power,1)/2),:] .= power[round(Int64,size(power,1)/2)+1:end,:]
power_new[round(Int64,size(power,1)/2)+1:end,:] .= power[1:round(Int64,size(power,1)/2),:]
fig = heatmap(fftshift(spec_out.freq).*1e-6,spec_out.time .*1e6, permutedims(power_new),color= :jet,
gridalpha=0.5,margin=5Plots.mm,size=(900,400))
xlabel!("Частота, МГц")
ylabel!("Время, мкс")
title!(title)
return fig
end;
1. 模型结构描述¶
1.1 系统模型的总体方案¶
系统模型的总体结构图如下:
让我们来详细了解一下模型的结构:
** FMCW 波形*:使用连续调频信号作为探测信号 (SS);
- 发射器:发射器放大信号并产生定向模式 (DN); ** 通道:信号传播到目标并返回接收器,根据与目标的距离进行衰减; 目标(汽车):代表一辆行驶中的汽车;
- 接收器前置放大器:将汽车反射的信号送入接收天线阵列并放大,同时考虑接收器自身的热噪声; ** 信号处理:估计汽车的射程。
模型原理图如下图所示。
1.2 数字信号处理步骤说明¶
在雷达接收器中,反射信号要经过个处理步骤,然后才能获得目标车辆的距离估计值。信号处理过程包括两个阶段: **1 阶段:测距处理。接收到的信号与复共轭输入信号相乘,从而在反射信号和测深仪之间产生一个因目标运动而产生的差频(或跳频)。然后,64 个脉冲在相干积分子系统中相干累积,从而提高信噪比。接下来,数据被传送到测距响应单元,该单元执行快速傅立叶变换(FFT),以进行后续测距估计。
- 第二阶段:目标检测和距离估计**由 5 个并行处理通道组成,用于检测和估计目标物体的距离。
在步骤 2 中,每个通道包括 3 个处理步骤:
** 目标检测:雷达数据首先传输到采用滑动均值窗算法的一维误报率(CFAR)(CFAR)**检测器。该装置检测是否存在反射信号。
聚类:然后在"DBSCAN 聚类器 "块中执行聚类过程,利用在CFAR块中获得的数据将探测单元聚类为范围组。
- 范围估算器**是识别探测对象和群组的最后一步。该步骤利用雷达数据估算探测目标的范围。
1.3 渠道模式和目标¶
信道和目标子系统模拟信号传播和目标飞行器的反射。 ** 信道 - 模拟雷达车和目标车之间的信号传播。信道可配置为自由空间信道(自由空间信道)或双光束信道(信号通过直接和反射路径到达接收器)(双光束信道)。默认选择自由空间信道。
** 目标** - 反射入射信号并模拟目标飞行器的路径。下图所示子系统由两部分组成:模拟反射信号的目标模型(块 - 目标)和模拟目标飞行器动态的空间物体模型(块 - 平台)。
2.输入参数初始化¶
在模型场景中,一辆装有雷达的汽车以 100 公里/小时(27.8 米/秒)的速度从参考点出发,目标物以 96 公里/小时(26.7 米/秒)的速度从其前方 43 米处出发。雷达和目标物的位置和速度在传播通道中用于计算延迟、多普勒效应和信号衰减。
为了初始化模型的输入参数,我们连接了文件 "FMCWParam.jl"。如果需要更改参数值,请打开该文件并编辑必要的参数。
include("$(@__DIR__)/FMCWParam.jl") # подключение файла с входными параметрами
paramRadarFMCW = FMCWParam(); # запись входных параметров в структуру
T = paramRadarFMCW.T; # шаг дискретизации модели
simT = 640*T; # время симуляции модели
3.运行模型¶
让我们使用 run_model 函数运行模型模拟计算:
run_model("FMCW_Radar_Range_Estimation",@__DIR__); # Запустить модель
4.读取输出数据¶
让我们从写入工作区的变量中提取模拟结果到数组中,以便进一步可视化:
input_signal, _ = DataFrame2Array(in_sig) # входной ЛЧМ-сигнал
dec_signal, _ = DataFrame2Array(dec_sig) # сигнал после цифровой обработки
range_estimate, slow_time = DataFrame2Array(rng_est) # оценки дальности
RPos, fast_time = DataFrame2Array(RPos) # положение радара
CPos,_ = DataFrame2Array(CPos); # положение объекта
5.雷达运行可视化¶
5.1 输入信号的频谱图¶
首先让我们来看看发射的低频调制信号的频谱图。
calc_spectrogram(
input_signal, # ЛЧМ-сигнал
paramRadarFMCW.Fs, # частота дискретизации
"Cпектрограмма ЛЧМ-сигнала";
num_pulses=4 # количество импульсов отображения
)
上面的频谱图显示,频率偏差为 150 兆赫,周期为每 7 微秒一次,相当于约 1 米的分辨率。
5.2 数字处理后的信号频谱图¶
接下来,我们来看看数字处理后的信号频谱图:
calc_spectrogram(
dec_signal[:,:,2:end], # сигнал после обработки (отображается со 2 импульса)
paramRadarFMCW.Fs/paramRadarFMCW.NumSweeps, # частота дискретизации
"Cпектрограмма сигнала после обработки";
num_pulses=4, # количество импульсов
thesh=-300 # порог, дБ
)
从图中可以看出,物体产生的节拍频率约为 100 kHz。请注意,经过处理后,信号只有一个频率成分。根据节拍频率计算出最终的测距估计值,精度为 1 米。
5.3 估算目标距离¶
最后,让我们来看看雷达的结果:
gr()
true_range = [norm(CPos[:,1,i].-RPos[:,1,i]) for i in 1:size(CPos,3)]
p1 = plot(Vector(slow_time)*1e3,range_estimate[:],label="оценка расстояния",margin=5Plots.mm,
titlefont=font(10,"Computer Modern"),guidefont = font(8,"Computer Modern"),legendfont = font(8,"Computer Modern"))
plot!(Vector(fast_time)*1e3,true_range,label="истинное расстояние")
ylabel!("Расстояние, м")
title!("Зависимость оценки расстояния до цели от времени")
p2 = plot(Vector(slow_time)*1e3,abs.(range_estimate[:].-true_range[1:paramRadarFMCW.NumSweeps:end]),lab="",
titlefont=font(10,"Computer Modern"),guidefont = font(8,"Computer Modern"),legendfont = font(8,"Computer Modern"))
xlabel!("Время, мс")
ylabel!("Расстояние, м")
title!("Отклонение оценки")
plot(p1,p2,layout=(2,1),size=(900,460))
因此,雷达与目标物体之间距离的估算精度与宣布的精度一致 - 1 米。
5.4 分析双波束信号传播的影响¶
上一段的结果是通过模拟自由空间中的直接传播信道得出的。在现实中,车辆之间的传播通常使用发射器和接收器之间的多条路径。因此,来自不同路径的信号可以同相或反相叠加。
如果建立一个在(双射线)信道(这是最简单的多径信道)上传播的模型,就会发现在噪声频谱的背景下无法分辨出主拍频(见下面的频谱图),因为直达信号与反射信号叠加在一起。
关闭¶
在本示例中,我们考虑了原子移动雷达基本模型的建模,并将连续 LFM 信号用作探测信号。模型运行的结果是,雷达与目标物体(汽车)之间的距离估计精度为雷达分辨率 - 1 米。
还研究了信号传播模型的影响:直接传播通道和双折射传播通道。结果表明,双波束传播模型会通过补偿拍频分量对雷达性能产生负面影响,从而导致无法进行测距。