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 度的两个干扰信号的情况下的波束成形。干扰信号的振幅远大于脉冲振幅。噪声电平设置为 -50 dBW,只强调干扰信号的影响。将 PhaseShift、MVDR 和 LCMV 波束成形算法应用于接收信号,并对其结果进行比较。


模型结构图以[经典波束成形]示例模型(https://engee.com/community/ru/catalogs/projects/formirovanie-lucha-na-fone-shuma)为基础,增加了新的模块:

  • PSP 生成器--模拟具有正态分布规律的干扰分量
  • 传播方向* - 在接收天线阵列*块中设置有用信号和干扰信号的接收方向
  • MVDR 整形* - 在指定方向上实现MVDR整形算法;
  • LCMV* 整形器* - 在指定方向上使用给定权重矩阵实现LCMV整形算法;

系统结构图如下。

image_3.png

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])
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

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