Engee 文档
Notebook

基于相移的波束成形

本例展示了如何将经典相移波束成形应用于天线阵列接收的窄带信号。系统模型包括接收器的固有噪声。

辅助函数

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

# построение выходных графиков
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)))*10^3 # сетка времени в мс
    plot(t, out[:, 1, number], label = title, title = title,size=(500,250))
    plot!(t, out_ref_pulse[:, 1, number], label = "Эталонный сигнал", 
        xlabel = "Время (мс)", уlabel = "Амплитуда (В)"
    )
end;

图中显示了单个元件(无波束成形)的输出和参考脉冲,以及波束成形器的输出和参考脉冲。当接收到的信号未进行波束成形时,由于噪声的影响,无法检测到脉冲。波束成形器输出的图像显示,波束成形信号远大于噪声。输出信噪比约为单天线接收信号的 10 倍,因为 10 元阵列的增益为 10。

1. 模型结构描述

该模型模拟在 10 元均匀线性天线阵(AA)上接收带偏移延迟的矩形脉冲。脉冲源位于方位角为 45 度、位置角为 0 度的方向上。在每个阵元上,向信号中添加 0.5 W 的噪声。然后应用波束成形器,将 AR 阵元之间的相移考虑在内。示例将波束成形器的输出与一个天线元件接收到的信号进行比较。

系统结构图如下。

image_3.png

系统实现包括接收信号建模、信号接收和信号处理。以下模块与模型的每个阶段相对应:

信号建模:

** 矩形脉冲发生器**(矩形)- 创建矩形脉冲。

  • 延迟**(偏移波形)--延迟单元将每个脉冲延迟 150 个采样点。

接收信号:

** 窄带接收阵列(Narrowband Rx Array)--模拟 AR 接收到的信号。该模块的第一个输入是包含接收脉冲的列向量。假定脉冲为窄带,载波频率等于程序块对话框中指定的工作频率。第二个输入 "Ang"指定脉冲下降的方向。天线阵列的配置在程序块对话框的 "传感器阵列"选项卡中创建。输出数据的每一列都与天线阵列每个元件接收到的信号相对应。

  • 接收器前置放大器**(接收器前置放大器)--对接收到的 AR 信号进行初步放大。该单元考虑了接收机的固有热噪声。

** 信号方向(信号方向)--设置脉冲到达窄带接收阵列的方向。

信号处理: ** 波束形成角度(Angle to beamform)--常数块设置信号到达波束形成器的方向。

** 相移波束成形器(Phase Shift Beamformer)--执行窄带波束成形,同时考虑到天线阵列每个元件的相移。

可在 "相移波束成形器"模块的 "传感器阵列"选项卡中设置天线阵列的特性。下图所示为 10 个元素的线性天线阵列参数化初始化示例。

snimok_ekrana_2025_03_21_152100.png

2 模型参数初始化

模型参数是通过辅助函数calcParamBeamformer 在文件ParamBeamformar.jl 中设置的。该函数在加载模型时执行一次。它将一个结构导出到工作区,该结构的字段被模型中的对话框引用。要更改任何参数,可以通过命令行更改结构中的值,或者编辑辅助函数并重新启动以更新 参数结构。

image.png

In [ ]:
# подключение файла с параметрами модели
include("$(@__DIR__)/ParamBeamformer.jl");

3.运行模型

使用函数run_model 运行系统模型模拟Beamformer_with_noise 。记录的模拟结果将写入变量out

In [ ]:
out = run_model("Beamformer_with_noise", @__DIR__) # запуск модели
Building...
Progress 0%
Progress 10%
Progress 100%
Progress 100%
Out[0]:
SimulationResult(
    "Эталонный_импульс" => WorkspaceArray{Vector{Float64}}("Beamformer_with_noise/Эталонный_импульс")
,
    "После_формирования" => WorkspaceArray{Matrix{Float64}}("Beamformer_with_noise/После_формирования")
,
    "Без_формирования" => WorkspaceArray{Vector{Float64}}("Beamformer_with_noise/Без_формирования")

)

4.读取输出数据

使用函数calc_array_out 从变量out 中读取每个记录输出的数据。

In [ ]:
out_ref_pulse = calc_array_out(out, "Эталонный_импульс")
out_beamformer = calc_array_out(out, "После_формирования")
out_not_beamformer = calc_array_out(out, "Без_формирования");

5.模型结果的可视化

模型结果的可视化有两种方式:

  • 在 "图形 "选项卡中(选择 "阵列绘图 "类型的图形)
  • 在脚本中使用模拟结果获得的数据

使用第一种方法,我们将可视化有波束形成和无波束形成输出的模型结果:

newplot_1.png newplot_2.png

图中显示了单个元件(无波束成形)的输出和参考脉冲,以及波束成形器的输出和参考脉冲。当接收到的信号未进行波束成形时,由于噪声的影响,无法检测到脉冲。

如果使用波束成形算法,情况就会发生变化:下图显示,波束成形信号明显大于噪声。这是因为输出信噪比的增加与天线元件数量的增加成正比(约为 10 倍),而不是采用波束成形算法之前的信号。

同样,使用第二种方法也可以将模拟结果可视化。为了在脚本中绘制图表,我们将使用辅助函数plot_result

In [ ]:
num_puls = length(collect(out["Эталонный_импульс"]).time) # извлечение номера последнего импульса
plot_result(out_not_beamformer, "Без формирования", num_puls, t_step) |> display
plot_result(out_beamformer, "После формирования", num_puls, t_step)
Out[0]:

比较得到的图,我们可以发现得到的图像完全相同

结论

在本示例中,我们考虑到了天线元件之间的相移("相移波束成形器 "),研究了波束成形算法。在接收路径中使用该算法,可以在接收器自身噪声的背景下成功检测到有用信号。