Engee 文档
Notebook

多位置频率调制(MFSK)车载雷达

该示例考察了基于多位置频率调制(MFSK)信号的汽车雷达设计,以估计多个物体的范围和速度。

使用的函数

In [ ]:
Pkg.add(["LinearAlgebra", "DSP"])
   Resolving package versions...
┌ Warning: It looks like the Kaleido process is not responding. 
│ The unresponsive process will be killed, but this means that you will not be able to save figures using `savefig`.
│ 
│ If you are on Windows this might be caused by known problems with Kaleido v0.2 on Windows (you are using version 0.2.1).
│ You might want to try forcing a downgrade of the Kaleido_jll library to 0.1.
│ Check the Package Readme at https://github.com/JuliaPlots/PlotlyKaleido.jl/tree/main#windows-note for more details.
│ 
│ If you think this is not your case, you might try using a longer timeout to check if the process is not responding (defaults to 10 seconds) by passing the desired value in seconds using the `timeout` kwarg when calling `PlotlyKaleido.start` or `PlotlyKaleido.restart`
└ @ PlotlyKaleido /usr/local/ijulia-core/packages/PlotlyKaleido/U5CX4/src/PlotlyKaleido.jl:24
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`
In [ ]:
include("$(@__DIR__)/calcParamMFSK.jl")

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 = 32,
    nfft::Int64=32,
    lap::Int64  = 30,
    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 .*1e3, permutedims(power_new),color= :jet,
        gridalpha=0.5,margin=5Plots.mm,size=(900,400))
    xlabel!("Частота, МГц")
    ylabel!("Время, мс")
    title!(title)

    return fig
end;

1. 模型结构的描述

image_2.png

框图类似于示例([用于估计多个目标的范围和速度的汽车雷达](https://engee.com/helpcenter/stable/ru/interactive-scripts/radars/FMCWRadarMT.html ))。 主要区别是:
*使用具有多位置频率调制的连续辐射发生器;
*考虑到两个参数的信号处理:拍频和扫描之间的相移

信号处理单元

image_2.png

信号处理子系统由以下阶段组成:

  1. 接收信号与Dechirp块中的复共轭输入信号相乘,结果信号被解调;
  2. 在下一阶段,解调的信号在扫频块中被处理,其中其在频域中的频谱是使用快速傅里叶变换计算的;
  3. 接下来,使用一维检测器(CA CFAR检测器)检测与目标对应的光谱中的峰值的过程发生
  4. 在最后阶段,使用所找到的拍频值和扫频之间的相位差,在求解范围多普勒方程块中计算目标的范围和速度的估计。;

2. 输入参数的初始化

仿真场景为以下场景:带雷达的车辆以100km/h(27.8m/s)的速度从参考点移动

观看区域内有两个目标车辆,分别是一辆乘用车和一辆卡车,每辆车都有相应的配送通道。 汽车以距离雷达50米的距离移动,并以60km/h(16.7m/s)的速度移动。 卡车位于距离雷达150米的距离处,以130km/h(36.1m/s)的速度移动。

信号传播通道为自由空间。

要初始化模型的输入参数,我们将连接文件"calcParamMFSK。jl"。 如果您需要更改参数值,请打开此文件并编辑必要的参数。

In [ ]:
include("$(@__DIR__)/calcParamMFSK.jl") # подключения файла с валидационными параметрами
paramRadarMFSKMT = CalcParamMFSK(); # валидация входных параметров
T = paramRadarMFSKMT.T; # шаг моделирования
SimT = T; # Время моделирования

3. 启动模型

In [ ]:
run_model("MFSK_Radar_Range_Estimation_MT",@__DIR__); # Запуск модели
Building...
Progress 0%
Progress 100%
Progress 100%

4. 读取模拟结果

In [ ]:
sig_MFSK, fast_time = DataFrame2Array(MFSK) # входной ЛЧМ-сигнал
out_range, _ = DataFrame2Array(Range) # сигнал после цифровой обработки
out_speed, slow_time = DataFrame2Array(Speed); # оценки дальности

5. 雷达操作的可视化

5.1输入信号频谱图

让我们使用calc_spectrogram函数构造输入信号的频谱图

In [ ]:
calc_spectrogram(
    sig_MFSK, # ЛЧМ-сигнал
    paramRadarMFSKMT.Fs, # частота дискретизации
    "Cпектрограмма сигнала c MFSK";
    num_pulses=1 # количество импульсов отображения
)
Out[0]:

LC频谱图的频率分量具有阶跃特性,其对应于信号的多位置频率调制。 实际上,MFSK信号由具有固定离散频率偏移的两个FMCW信号扫描组成。 发射信号的扫描时间由离散步长与步长的乘积决定,大约为2毫秒,比连续LFM信号长几个数量级(约7微秒)。

5.2估计物体的范围和速度

我们来分析一下雷达运行的结果

让我们比较范围和速度的估计值和真实值(汽车的范围为50米,卡车为150米)

In [ ]:
println("Оценка дальности автомобиля $(round(out_range[1,1,end];sigdigits=5)) м")
println("Оценка дальности грузовика $(round(out_range[2,1,end];sigdigits=5)) м")

println("Оценка дальности автомобиля $(round(out_range[1,1,end]-50;sigdigits=5)) м")
println("Оценка дальности грузовика $(round(out_range[2,1,end]-150;sigdigits=5)) м")
Оценка дальности автомобиля 49.664 м
Оценка дальности грузовика 149.99 м
Оценка дальности автомобиля -0.3361 м
Оценка дальности грузовика -0.011043 м

现在让我们比较估计值和真实速度值(汽车的相对速度为40km/h,卡车为-30km/h)

In [ ]:
println("Оценка относительной скорости автомобиля $(round(out_speed[1,1,end]*3.6;sigdigits=5)) км/ч")
println("Оценка относительной скорости грузовика $(round(out_speed[2,1,end]*3.6;sigdigits=5)) км/ч")
println("Погрешность оценки относительной скорости автомобиля $(round(out_speed[1,1,end]*3.6-40;sigdigits=5)) км/ч")
println("Погрешность оценки относительной скорости грузовика $(round(out_speed[2,1,end]*3.6-(-30);sigdigits=5)) км/ч")
Оценка относительной скорости автомобиля 39.941 км/ч
Оценка относительной скорости грузовика -30.857 км/ч
Погрешность оценки относительной скорости автомобиля -0.059183 км/ч
Погрешность оценки относительной скорости грузовика -0.85661 км/ч

分析所获得的仿真结果,可以得出结论,雷达估计值对应于范围(1米)和速度(1公里/小时)的规定精度

结论

在示例中,考虑了使用具有多位置频率调制的探针信号的原子雷达模型的设计。 作为模型的结果,发现了从雷达到物体(汽车和卡车)的相对速度和距离的估计,雷达分辨率精度为1米,速度约为1km/h。

还应该注意的是,所考虑的信号的使用使得与连续FM信号相比,扫描时间从7微秒增加到2毫秒成为可能,这可以降低设备成本。