干扰影响下的自适应波束成形
本例演示了 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 度的两个干扰信号的情况下的波束成形。干扰信号的振幅远大于脉冲振幅。噪声电平设置为 -50 dBW,只强调干扰信号的影响。将 PhaseShift、MVDR 和 LCMV 波束成形算法应用于接收信号,并对其结果进行比较。
模型结构图以[经典波束成形]示例模型(https://engee.com/community/ru/catalogs/projects/formirovanie-lucha-na-fone-shuma)为基础,增加了新的模块:
- PSP 生成器--模拟具有正态分布规律的干扰分量
- 传播方向* - 在接收天线阵列*块中设置有用信号和干扰信号的接收方向
- MVDR 整形* - 在指定方向上实现MVDR整形算法;
- LCMV* 整形器* - 在指定方向上使用给定权重矩阵实现LCMV整形算法;
系统结构图如下。

2 模型参数初始化
模型参数是通过辅助函数calcParamBeamformerI
在文件ParamBeamformarI.jl
中设置的。该函数在加载模型时执行一次。它将一个结构导出到工作区,该结构的字段被模型中的对话框引用。要更改任何参数,可以通过命令行更改结构中的值,或者编辑辅助函数并重新启动以更新 参数结构。
模型参数
### 雷达参数
propSpeed = physconst("LightSpeed") # 传播速度(米/秒)
fc = 100e6 # 载波频率(赫兹)
lambda = propSpeed/fc # 波长(米)
# 天线阵列参数
NumElements = 10 # 元素数量
ElementSpacing = 0.5*lambda # 元件间距(米)
天线 = EngeePhased.ULA(NumElements=10,ElementSpacing=0.5*lambda)
# 探测信号参数
fs = 1000; # 采样频率 1 kHz
prf = 1/0.3; # 脉冲重复率(赫兹)
# 接收设备
NoisePower = 1/db2pow(50); # 噪声功率(瓦)
Gain = 0.0; # 增益 (dB))
LossFactor = 0.0 # 接收机损耗(分贝)
# LCMV 波束形成器的加权矩阵
steeringvec = EngeePhased.SteeringVector(SensorArray=Antenna)
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.模型结果的可视化
模型结果的可视化有两种方式:
- 在 "图形 "选项卡中(选择 "阵列绘图 "类型的图形)
- 在脚本中使用模拟结果获得的数据
使用第一种方法,我们将可视化有波束形成和无波束形成输出的模型结果:

图中显示了三种特定波束成形器的输出结果:移相器、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 "**。