Engee 文档
Notebook

暴露于干扰时的自适应波束成形

本例演示了自适应波束形成算法MVDRLCMV在两个干扰信号条件下的应用。

辅助功能

In [ ]:
# запуск симуляцик системной модели
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_array_out(out, name)
    array = zeros(eltype(out[name].value[1]),size(out[name].value[1],1),size(out[name].value[2],2),length(out[name].value))
    [array[:,:,i] = collect(out[name].value[i]) for i in eachindex(out[name].value)]
    return array
end

# построение выходных графиков
default(titlefontsize=11,top_margin=-1Plots.mm,guidefont=10,
   fontfamily = "Computer Modern",colorbar_titlefontsize=8,bottom_margin = -6Plots.mm
)

function plot_result(out, title, number, t_step = 0.3)
    t = Vector(0:t_step/size(out, 1):t_step*(1-1/size(out, 1)))*1e3 # сетка времени в мс
    plot(t, out[:, 1, number], label = title, title = title,size=(500,150))
    plot!(t, out_ref_pulse[:, 1, number], label = "Эталонный сигнал", 
        xlabel = "Время (мс)", уlabel = "Амплитуда (В)"
    )
end;

1. 模型结构的描述

该模型说明了在存在来自30和50度方位角的两个干扰信号的情况下形成光束。 干扰信号的幅度远大于脉冲的幅度。 噪声电平设置为-50dBW,仅强调干扰的影响。 将PhaseShift、MVDR和LCMV波束成形算法应用于接收信号,并对它们的结果进行比较。


该模型的结构图基于[经典波束成形]模型的示例(https://engee.com/community/ru/catalogs/projects/formirovanie-lucha-na-fone-shuma )随着新块的增加:
PSP发生器-模拟具有正态分布规律的干扰分量
传播方向-设置块中有用信号和干扰信号的接收方向接收天线阵列
MVDR整形器-在给定方向上实现
MVDR
整形算法;
LCMV整形器-在给定方向上使用给定权重矩阵实现
LCMV**整形算法;

该系统的框图如下所示。

image_3.png

2. 模型参数的初始化

模型参数在文件中设置 ParamBeamformarI.jl 使用辅助功能 calcParamBeamformerI. 此函数在加载模型时执行一次。 它将结构导出到工作区,其中的字段由模型的对话框面板引用。 要更改任何参数,请从命令行更改结构中的值,或编辑辅助函数并重新启动它以更新参数结构。

###模型参数
#雷达参数
propSpeed=physconst("LightSpeed")#传播速度(m/s)
fc=100e6#载波频率(Hz)
lambda=propSpeed/fc#波长(m)

#天线阵列参数
numElements=10#项目数
ElementSpacing=0.5*lambda#元素之间的距离(m)

天线=EngeePhased。ULA(numElements=10,ElementSpacing=0.5*lambda)

#探测信号的参数
fs=1000;#1kHz的采样率
prf=1/0.3;#脉冲重复率(Hz)

#接收装置
NoisePower=1/db2pow(50);#噪声功率(W)

增益=0.0#增益(dB))
LossFactor=0.0#接收器损耗(dB)

#LCMV波束成形器的权重矩阵
steeringvec=EngeePhased。SteeringVector(SensorArray=天线)
cMatrix=steeringvec(fc,[43 45 47])
In [ ]:
# подключение файла с параметрами модели
include("$(@__DIR__)/ParamBeamformerI.jl");

3. 启动模型

使用函数 run_model 让我们运行系统模型的模拟 Beamformer_Interference. 我们将生成的模拟结果写入一个变量中 out.

In [ ]:
out = run_model("Beamformer_Interference", @__DIR__) # запуск модели
Building...
Progress 0%
Progress 10%
Progress 20%
Progress 60%
Progress 100%
Progress 100%
Out[0]:
SimulationResult(
    "PhaseShift" => WorkspaceArray{Matrix{Float64}}("Beamformer_Interference/PhaseShift")
,
    "LCMV" => WorkspaceArray{Matrix{Float64}}("Beamformer_Interference/LCMV")
,
    "MVDR" => WorkspaceArray{Matrix{Float64}}("Beamformer_Interference/MVDR")
,
    "ReferencePulse" => WorkspaceArray{Vector{Float64}}("Beamformer_Interference/ReferencePulse")

)

4. 读取输出数据

使用函数 calc_array_out 从变量计数数据 out 对于每个承诺的产出。

In [ ]:
out_ref_pulse = calc_array_out(out, "ReferencePulse") # Эталонный импульс
out_lcmv = calc_array_out(out, "LCMV") # Формиватель луча LCMV
out_mvdr = calc_array_out(out, "MVDR") # Формиватель луча MVDR
out_phase_shift = calc_array_out(out, "PhaseShift"); # Формиватель луча PhaseShift

5. 模型结果的可视化

结果的可视化可以通过两种方式实现:
*在"图形"选项卡中(通过选择"数组构造"图形类型)
*在脚本中使用作为模拟结果获得的数据

使用第一种方法,我们可视化具有和不具有射线整形的输出的模型结果。:

beam_interf.png

图中显示了3个预设光束整形器的输出:PhaseShift,MVDR和LCMV。 可以注意到,经典相移波束形成器不应对在干扰背景下检测目标的任务,因为干扰幅度远大于有用信号并且仅仅增加信噪比是不够的。

如果使用MVDR和LCMV波束形成算法,则输出图发生变化:经过信号处理后,形成对应于目标真实位置的峰值。

同样,您可以使用第二种方法可视化仿真结果。 要在脚本中构建它,请使用辅助函数 plot_result:

In [ ]:
num_puls = length(collect(out["ReferencePulse"]).time) # извлечение номера последнего импульса
plot_result(out_phase_shift, "Формиватель PhaseShift", num_puls, t_step) |> display
plot_result(out_mvdr, "Формиватель MVDR", num_puls, t_step) |> display
plot_result(out_lcmv, "Формиватель LCMV", num_puls, t_step)
Out[0]:

比较生成的图形,您可以看到生成的图像是相同的。

结论

在该示例中,在强干扰分量的背景下,对简单的和自适应的波束成形器进行了比较。 结果表明,传统的相移整形器"相移波束形成器"不能检测到有用的信号,在这种情况下,有必要采用更先进的整形算法**"MVDR""LCMV"**

示例中使用的块