暴露于干扰时的自适应波束成形
本例演示了自适应波束形成算法MVDR和LCMV在两个干扰信号条件下的应用。
辅助功能
# запуск симуляцик системной модели
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**整形算法;
该系统的框图如下所示。
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])
# подключение файла с параметрами модели
include("$(@__DIR__)/ParamBeamformerI.jl");
3. 启动模型
使用函数 run_model 让我们运行系统模型的模拟 Beamformer_Interference. 我们将生成的模拟结果写入一个变量中 out.
out = run_model("Beamformer_Interference", @__DIR__) # запуск модели
4. 读取输出数据
使用函数 calc_array_out 从变量计数数据 out 对于每个承诺的产出。
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. 模型结果的可视化
结果的可视化可以通过两种方式实现:
*在"图形"选项卡中(通过选择"数组构造"图形类型)
*在脚本中使用作为模拟结果获得的数据
使用第一种方法,我们可视化具有和不具有射线整形的输出的模型结果。:
图中显示了3个预设光束整形器的输出:PhaseShift,MVDR和LCMV。 可以注意到,经典相移波束形成器不应对在干扰背景下检测目标的任务,因为干扰幅度远大于有用信号并且仅仅增加信噪比是不够的。
如果使用MVDR和LCMV波束形成算法,则输出图发生变化:经过信号处理后,形成对应于目标真实位置的峰值。
同样,您可以使用第二种方法可视化仿真结果。 要在脚本中构建它,请使用辅助函数 plot_result:
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)
比较生成的图形,您可以看到生成的图像是相同的。
结论
在该示例中,在强干扰分量的背景下,对简单的和自适应的波束成形器进行了比较。 结果表明,传统的相移整形器"相移波束形成器"不能检测到有用的信号,在这种情况下,有必要采用更先进的整形算法**"MVDR"或"LCMV"**