AnyMath 文档
Notebook

一种用于小物体的多通道宽带测向系统

该示例考虑了多通道雷达系统的建模,用于解决测向多个目标的问题。 目标小物体是无人驾驶飞行器(Uav)-"四轴飞行器"。

在执行脚本之前,建议使用命令清除工作区 engee.clear(). 如果这不是必需的,您可以删除或评论此命令。 您还可以选择图形可视化的类型:交互式或静态。 该控件是使用变量实现的 is_dinamic_plot.

In [ ]:
engee.clear() # 清除工作区
is_dinamic_plot = true # 选择图形类型:true(plotlyjs())-interactive,false(gr())-static
is_dinamic_plot ? plotlyjs() : gr()
Out[0]:
Plots.PlotlyJSBackend()

连接辅助文件和库

要实现有问题的系统,需要连接第三方库和辅助功能。:

In [ ]:
let
    installed_packages = collect(x.name for (_, x) in Pkg.dependencies() if x.is_direct_dep)
    list_packages = ["JLD2","Hungarian"]
    for pack in list_packages
        pack in installed_packages || Pkg.add(pack)
    end
end

using LinearAlgebra,Hungarian,DataFrames
import JLD2

include("$(@__DIR__)/utils/plot_sig_and_spec.jl") # 建立示波器和频谱图的功能
include("$(@__DIR__)/utils/viz_scene.jl") # 构建雷达运行场景的功能
include("$(@__DIR__)/utils/calc_plot_rcs.jl") # 反向散射图构造函数
include("$(@__DIR__)/utils/sort_ang_mse.jl") # 排序轴承估计值的功能
include("$(@__DIR__)/utils/plot_spec_azel.jl") # 构造空间谱的功能
include("$(@__DIR__)/utils/calc_table_ang_analysis.jl") # 用于精度分析的表计算功能
Out[0]:
calc_table_ang_analysis (generic function with 1 method)

1. 雷达运行场景系统模型的开发

让我们考虑具有多个目标的多通道宽带测向系统的场景。

假设雷达位于原点,沿x轴定向。 为了解决确定支座的问题,使用矩形相控阵天线(FAR)和数字处理算法(MUSIC,MVDR,BeamScan)
四个"四轴飞行器"类型的小型无人机物体正靠着
x**轴向雷达站移动。 每个对象都有自己的轨迹。 到目标的射程为1000-1500米,速度为130-150米/秒。到目标的方位角方向在[-20,20]度内,角方向为[0,30]度。

场景的大致外观如下图所示。

image.png

1.1雷达结构说明

让我们更详细地描述雷达系统模型的结构方案。:

*ZS发生器:具有线性频率调制(LFM)的脉冲信号用作探测信号;

*发射器:信号在发射器中放大,考虑到传输路径中的损耗;

*传输大灯:使用矩形大灯形成方向图案(DN;

*传播介质:考虑到传播衰减、频率色散和天气影响;

*目标:描述DOR,考虑到信号的宽带频谱和目标的轨迹;

*发射大灯:底部采用接收宽带矩形大灯形成,;

*接收器:通过添加自身的热噪声(LNA模型)来实现接收信号的放大。

*轴承算法:是确定目标在方位角和角平面中的方向的数字算法(MUSIC,BeamScan,MVDR)之一;

该模型的运行方案如下图所示。

image.png

1.2雷达参数

关键雷达参数是载波频率值。 在选择频率范围时,有必要考虑到雷达的任务,因为载波频率的值越高,传播过程中的衰减和衰减越高,同时增加对小物体的灵敏度。

在解决小物体的测向问题时,建议使用与目标大小(20-30cm)相称的ranges++:L-或S-ranges。 让我们选择雷达系统的L波段(1-2GHz),并取载波频率值为1GHz(λ≈0.3m)。

In [ ]:
# 基本雷达参数
fc = 1e9 # [Hz],载波频率
c = physconst("LightSpeed") # [m/s],信号的传播速度
lambda = c / fc; # 波长,m

println("Несущая частота: $(fc*1e-9) ГГц")
println("Скорость света: $c м/с")
println("Длина волны: $lambda м")
Несущая частота: 1.0 ГГц
Скорость света: 299792458 м/с
Длина волны: 0.299792458 м

1.3探测信号的参数

作为探测脉冲,我们将选择具有脉冲内调制的信号-[脉冲LFM信号](https://engee.com/helpcenter/stable/cn/phased-waveforms/linear-fm-waveform.html ),带有条纹 bw -100兆赫,持续时间 T -10微秒和一个钻孔 Q - 2. 这样的信号是宽带的,因为信号频带与载波频率的比率大于5%(在示例中为10%)。 信号生成是使用系统对象实现的 EngeePhased.LinearFMWaveform . 使用参数 n_pulses , n_groups_imps 您可以相应地设置每包的累积脉冲数和包数。

重要的是,宽带系统需要设置频率子带的数量。 NBand,其中信号将被认为是窄带。 总带宽由采样率决定 子范围的宽度计算为(1)

然后利用公式(2)计算子带的中心频率

In [ ]:
# ---信号参数 ---
bw = 100e6; # LFM频段,Hz
T = 10e-6; # 脉冲持续时间,s
Q = 2 # 脉冲连续性
prf = round(1 / (Q * T);sigdigits = 15); # 脉冲重复率(必要时舍入)
type_dir = "Up" # 频率变化方向["向上","向下"]
type_sweep = "Positive"  # 频率变化类型["正","对称"]
n_pulses = 2 # 累积脉冲数
n_groups_imps = 2 # 脉冲突发数

fs = 2*bw; # 采样率,Hz
NBand = 64; # 频率子带数

T_coh = n_pulses/prf # coregent积累的时间
ΔR = c/(2*bw) # 范围分辨率,m
ΔV = lambda/(2*T_coh) # 速度分辨率,m/s
Rmin = c*T/2 # 最小一位数范围,m
Rmax = c/(2*prf) # 最大一位数范围,m
Vmax = lambda*prf/4 # 最大个位数速度,m/s

# lfm信号发生器的系统对象的形成
waveform = EngeePhased.LinearFMWaveform( 
    SampleRate = fs, # 采样率,Hz
    PulseWidth = T, # 脉冲持续时间
    PRF = prf, # 脉冲重复率
    SweepBandwidth = bw,  # LCHM乐队
    SweepDirection = "Up", # 频率变化方向
    SweepInterval = "Positive", # 锯型,非对称或对称
    OutputFormat = "Pulses", # 输出格式类型[]
    NumPulses = n_pulses # 脉冲数
);

我们将给定脉冲数的信号波形和频谱图可视化为1包。

In [ ]:
# LFM信号的计算
sig_lfm = waveform();

# 示波器和频谱图的构建
plot_sig_and_spec(sig_lfm;fs=fs,name_sig = "ЛЧМ")
Out[0]:

下文给出了成形车辆的战术和技术特征:

In [ ]:
println("Частота дискретизации: $(round(fs*1e-6;sigdigits=5)) МГц")
println("Длительность импульса: $(round(T*1e6;sigdigits=5)) мкс")
println("Период следования: $(round(1e6/prf;sigdigits=5)) мкс")
println("Частота следования: $(round(prf*1e-3;sigdigits=5)) кГц")
println("Скважность: $(round(Q;sigdigits=5))")
println("Время когерентного накопления: $(round(T_coh*1e3;sigdigits=5)) мс")
println("Количество импульсов в пачке: $n_pulses")
println("Количество пачек: $n_groups_imps")
println("Разрешение по дальности : $(round(ΔR;sigdigits=3)) м") 
println("Разрешение по скорости : $(round(ΔV;sigdigits=3)) м/с") 
println("Максимальная одназначная дальность : $(round(Rmax;sigdigits=3)) м") 
println("Минимальная одназначная дальность : $(round(Rmin;sigdigits=3)) м") 
println("Максимальная одназначная скорость: $(round(Vmax;sigdigits=3)) м/с") 
Частота дискретизации: 200.0 МГц
Длительность импульса: 10.0 мкс
Период следования: 20.0 мкс
Частота следования: 50.0 кГц
Скважность: 2.0
Время когерентного накопления: 0.04 мс
Количество импульсов в пачке: 2
Количество пачек: 2
Разрешение по дальности : 1.5 м
Разрешение по скорости : 3750.0 м/с
Максимальная одназначная дальность : 3000.0 м
Минимальная одназначная дальность : 1500.0 м
Максимальная одназначная скорость: 3750.0 м/с

1.4天线形成

需要二维天线阵列用于两个方向的测向-方位角和仰角。 该示例使用最常见的类型,矩形等距头灯,它使用 EngeePhased.URA. 各向同性散热器作为前照灯的元件。 - EngeePhased.IsotropicAntennaElement.

In [ ]:
# 天线参数
d = lambda /2 # 元素之间的距离
freq_range = [fc-bw fc+bw] # 辐射的频率范围
Nx = 24 # X轴上的元素数(方位角分辨率)
Ny = 24 # Y轴上的元素数(按位置角度的分辨率)
Δaz = rad2deg(lambda/(d*(Nx-1))) # 方位分辨率,deg
Δel = rad2deg(lambda/(d*(Ny-1))) # 座椅角度分辨率,deg
# 元素总数N=Nx*Ny

# 具有各向同性天线元件
ant_elem = EngeePhased.IsotropicAntennaElement( 
    FrequencyRange = freq_range, # 频率范围
    BackBaffled = true # 去除天线底部的反向散射
) 

# 创建矩形大灯
array = EngeePhased.URA(
    Element = ant_elem, # 天线元件
    Size = [Nx Ny], # 网格大小
    ElementSpacing = [d d], # 元素之间的距离
);

使用该功能可视化前大灯的方向图案 pattern.

In [ ]:
pattern(array,fc)
Out[0]:

矩形前照灯的参数和特性如下:

In [ ]:
println("Расстояние между элементами : $(round(d;sigdigits=3)) м") 
println("Размеры прямоугольной ФАР: $(Nx)x$Ny [Nx, Ny]") 
println("Частотный диапазон излучения: $(freq_range*1e-9) ГГц")
println("Разрешение по азимуту: $(round(Δaz;sigdigits=3)) °") 
println("Разрешение по углу места: $(round(Δel;sigdigits=3)) °") 
Расстояние между элементами : 0.15 м
Размеры прямоугольной ФАР: 24x24 [Nx, Ny]
Частотный диапазон излучения: [0.9 1.1] ГГц
Разрешение по азимуту: 4.98 °
Разрешение по углу места: 4.98 °

1.5发送和接收路径

雷达的下一个组件是接收和发送路径。 它执行2主要任务:

  1. 探测信号以电磁波(EMW)的形式辐射到太空;
  2. 接收来自目标的反射信号。

传输路径包括2个部件:发射器,实现预放大和头灯。 接收路径类似地形成,包括接收头灯和前置放大器。

In [ ]:
# 接收和发送路径的参数
Pt = 1e3 # W、峰值功率
Gtx = 20 # dB,发射天线的增益
LFtx = 1.5 # dB,传输路径中的损耗

Grx = 20 # dB,接收天线的增益
NF = 2 # dB,接收路径的噪声系数
LFrx = 1.5 # dB,接收路径中的损耗
TN = 290 # 噪音温度
NP = physconst("boltzmann") * bw * TN; # W、噪声功率

# 带有发射器的生物
transmitter = EngeePhased.Transmitter( 
    Gain = Gtx, # 发射机增益
    PeakPower = Pt, # 峰值功率
    LossFactor=LFtx # 传输路径中的损耗
)

# 具有宽带传输灯的设备
radiator = EngeePhased.WidebandRadiator(
    Sensor = array, # 天线元件的底部
    SampleRate = fs, # 采样率
    CarrierFrequency = fc, # 载波频率
    NumSubbands = NBand # 频率子带数
)

# 具有宽带接收头灯的设备
collector = EngeePhased.WidebandCollector(
    Sensor = array, # 天线元件的底部
    SampleRate = fs, # 采样率
    CarrierFrequency = fc, # 中央频率
    NumSubbands = NBand # 频率子带数
)

# 创建接收前置放大器(LNA)
receiver = EngeePhased.ReceiverPreamp(
    NoiseMethod="Noise power", # 噪音设定方法["噪音功率"、"噪音温度"]
    Gain = Grx, # 接收器增益,dB
    NoisePower = NP, # 噪音功率
    LossFactor=LFrx, # 接收道中的损失
    NoiseFigure = NF, # 路径中的噪声因子
    SampleRate = fs # 采样率
);

下面给出收发器路径的参数和特性:

In [ ]:
println("-----------------发射器-----------------------------")
println("Мощность передатчика: $(round(Pt*1e-3;sigdigits=5)) кВт")
println("Усиление передатчика: $(round(Gtx;sigdigits=5)) дБ")
println("Потери в передающем тракте: $(round(LFtx;sigdigits=5)) дБ")
println("--------------------------------------------------------")
println("-----------------接收器-----------------------------")
println("Усиление приемника: $(round(Gtx;sigdigits=5)) дБ")
println("Потери в приемном тракте: $(round(LFtx;sigdigits=5)) дБ")
println("Шумовая температура: $(round(LFrx;sigdigits=5)) дБ")
println("Коэффициент шума: $(round(NF;sigdigits=5)) дБ")
println("Шумовая температура: $(round(TN;sigdigits=5)) °К")
println("Мощность шума: $(round(NP;sigdigits=5)) Вт")
-----------------Передатчик-----------------------------
Мощность передатчика: 1.0 кВт
Усиление передатчика: 20.0 дБ
Потери в передающем тракте: 1.5 дБ
--------------------------------------------------------
-----------------Приемник-----------------------------
Усиление приемника: 20.0 дБ
Потери в приемном тракте: 1.5 дБ
Шумовая температура: 1.5 дБ
Коэффициент шума: 2.0 дБ
Шумовая температура: 290.0 °К
Мощность шума: 4.0039e-13 Вт

1.6数字处理单元(测向仪)

雷达的最后一块是测向算法。 这样的块解决了确定信号到达方向的问题,结果,目标物体相对于雷达的方向。 考虑最常用的:"BeamScan","MVDR","MUSIC"

In [ ]:
az_scan = -20:0.5:20 # 方位扫描范围
el_scan = 0:0.5:30 # 按位置角度扫描范围
n_sig = 4 # 评分数(进球数)
Out[0]:
4
In [ ]:
algorithm = "MUSIC" # @param ["Beamscan","MVDR","MUSIC"]

 beamscan = EngeePhased.BeamscanEstimator2D( 
    SensorArray = array, # 天线
    OperatingFrequency = fc, # 载波频率
    AzimuthScanAngles = az_scan,  # 方位扫描范围
    ElevationScanAngles = el_scan,  # 按位置角度扫描范围
    DOAOutputPort = true, # 启用轴承估计值的输出
    NumSignals = n_sig # 评级数目
);

 mvdr = EngeePhased.MVDREstimator2D( 
    SensorArray = array, # 天线
    OperatingFrequency = fc, # 载波频率
    AzimuthScanAngles = az_scan,  # 方位扫描范围
    ElevationScanAngles = el_scan,  # 按位置角度扫描范围
    DOAOutputPort = true, # 启用轴承估计值的输出
    NumSignals = n_sig # 评级数目
);

music =  EngeePhased.MUSICEstimator2D(
    SensorArray = array, # 天线
    OperatingFrequency = fc, # 载波频率
    AzimuthScanAngles = az_scan,  # 方位扫描范围
    ElevationScanAngles = el_scan,  # 按位置角度扫描范围
    DOAOutputPort = true, # 启用轴承估计值的输出
    NumSignalsSource="Property",
    NumSignals = n_sig, # 评级数目
    ForwardBackwardAveraging=false # 计算正向和反向平均
);

doa_alg =  if algorithm == "Beamscan"
    println("算法:Beamscan")
    deepcopy(beamscan)
elseif algorithm == "MVDR"
    println("算法:MVDR");
    deepcopy(mvdr)
elseif algorithm == "MUSIC"
    println("算法:音乐");  
    deepcopy(music)
end;
Алгоритм: MUSIC

1.7Phono目标环境

Phono-target环境块包括2个组件:分布环境和目标对象。 为了模拟环境,考虑到信号的宽带, EngeePhased.WidebandLOSChannel 它允许您考虑物体传播过程中的频率分散以及天气条件(水文气象,冰雹,压力变化等)的影响。).

In [ ]:
# 分布环境参数
is_atmosphere = true # 大气对电磁波传播的影响的考虑
T_ch = 15 # 大气温度,°C
press_air = 101325.0 # 大气压力,PA
vap_density = 7.5 # 湿蒸汽密度
liq_density = 0.0 # 冷凝水密度
rain_rate = 0.0 # 降水强度

channel_fwd = EngeePhased.WidebandLOSChannel( 
    PropagationSpeed = c,
    SampleRate = fs,
    OperatingFrequency = fc,
    NumSubbands = NBand,
    TwoWayPropagation = false, # 考虑双向信号传播
    SpecifyAtmosphere = is_atmosphere,
    Temperature = T_ch,
    DryAirPressure = press_air,
    WaterVapourDensity = vap_density,
    LiquidWaterDensity = liq_density,
    RainRate = rain_rate
);

channel_bwd = deepcopy(channel_fwd); # 从目标到雷达的分配通道(相同)

为了形成一个目标,它与 EngeePhased.WidebandBackscatterRadarTarget. 它允许您以给定精度的空间分辨率网格(方位角和仰角)来描述目标的用户门。 在示例中,dor矩阵被加载(filequad_rcs_pattern.jld2)为解析计算的四轴飞行器型无人机模型。 DOR计算的更详细描述在[2,3]中讨论。

In [ ]:
data = JLD2.load("/user/start/examples/radars/wb_doa_estimate/quad_rcs_pattern.jld2")

num_tgts = n_sig # 目标数量(设置相等数量的测向器评级)
rcs_az = data["az"] # 方位角EPR记帐范围(-180:180),度
rcs_el = data["el"] # EPR会计范围按座椅角度(-90:90),deg
rcs_pattern = data["rcs"] # 目标门矩阵[181x361],m^2

type_tgt = "Nonfluctuating" # 目标类型["非波动","Swerling1","Swerling2","Swerling3","Swerling4"]

# 宽带SDR目标的形成
rcs_targets = EngeePhased.WidebandBackscatterRadarTarget( 
    AzimuthAngles = rcs_az, # 基于方位的EPR记帐范围
    ElevationAngles = rcs_el, # 按座位角度计算的EPR会计范围
    RCSPattern = rcs_pattern, # DOR目标
    PropagationSpeed = c, # 传播速度,m/s
    OperatingFrequency = fc, # 载波频率,Hz
    NumSubbands = NBand, # 频率子带数
    Model = type_tgt # 目标EPR的波动类型
);

要可视化UAV对象及其DOR,请使用函数 calc_plot_rcs:

In [ ]:
text_title = "Визуализация и ДОР цели"
k_norm  = 0.6 # 门尺寸缩放系数
calc_plot_rcs(rcs_pattern,rcs_az,rcs_el;title = text_title,k = k_norm)
Out[0]:

由于目标的几何特征-存在螺钉形式的不规则性,UAV心轴的一般外观具有坚固,裂开的特征。 可以注意到,当UAV从上方和下方照射时达到最大EPR值,这是由于最大照射面积,并且EPR在水平面内减小。

1.8交通场景

模型形成的最后阶段是设置目标和雷达的轨迹。 在该场景中,假设雷达位于坐标系的原点并且是静止的。 目标的初始位置和速度在变量中设置 targets_pos 和 targets_vel,选择匀速运动模型

In [ ]:
# 目标移动模型
targets_pos = [
            [1000; 100; 200];; # 1目标
            [1200; -10; 200];; # 2目标
            [1100; -150; 150];; # 3目标
            [950; 50; 320];; # 4目标
] # 目标的初始位置,m
targets_vel = [
            [-130; 0; 0];; # 第1目标的速度(在平行于x轴的雷达上)
            [-150; 0; 0];; # 第二目标的速度(在平行于x轴的雷达上)
            [-200; 0; 0];; # 第3目标的速度(在平行于x轴的雷达上)
            [-230; 0; 0];; # 第4个目标的速度(在平行于x轴的雷达上)
] # 目标速度,m/s
type_traj = "Velocity" # 运动模型是均匀的["速度","加速度","自定义"]

targets_platform = EngeePhased.Platform(
    MotionModel = type_traj,
    InitialPosition = targets_pos, # 起始位置
    Velocity = targets_vel # 目标速度
)

# 雷达运动模型
radar_pos = [0; 0; 0] # 雷达位置
radar_vel = [0; 0; 0] # 雷达速度

radar_platform = EngeePhased.Platform(
    InitialPosition = radar_pos, # 雷达位置
    Velocity = radar_vel # 雷达速度
);

abs_dist,ang_true = rangeangle(targets_pos,radar_pos)

for i in 1:num_tgts
    println("----------------Цель № $(i)----------------------------")
    println("азимут: $(round(ang_true[1,i];sigdigits=3))°, угол места: $(round(ang_true[2,i];sigdigits=3))°")
    println("Дальность от РЛС до цели №$(i): $(round(abs_dist[i]*1e-3;sigdigits=5)) км")
end
----------------Цель № 1----------------------------
азимут: 5.71°, угол места: 11.3°
Дальность от РЛС до цели №1: 1.0247 км
----------------Цель № 2----------------------------
азимут: -0.477°, угол места: 9.46°
Дальность от РЛС до цели №2: 1.2166 км
----------------Цель № 3----------------------------
азимут: -7.77°, угол места: 7.69°
Дальность от РЛС до цели №3: 1.1203 км
----------------Цель № 4----------------------------
азимут: 3.01°, угол места: 18.6°
Дальность от РЛС до цели №4: 1.0037 км

使用函数 viz_scene 我们将显示场景的初始状态,考虑到目标的目击方向。:

In [ ]:
viz_scene(targets_pos, radar_pos)
Out[0]:

结果,形成了雷达的以下战术和技术特征:

In [ ]:
println("-----------------雷达站-----------------------------")
println("Несущая частота: $(round(fc*1e-9;sigdigits=3)) ГГц")
println("Скорость света: $c м/с")
println("Длина волны: $(round(lambda;sigdigits=3)) м") 
println("Количество частотных поддиапазонов: $NBand м")
println("Положение РЛС: $radar_pos [Px,Py,Pz], м")
println("скорость РЛС: $radar_vel [Vx,Vyc,Vz],м/с")
println("--------------------------------------------------------")
println("-----------------发电机-----------------------------")
println("Частота дискретизации: $(round(fs*1e-6;sigdigits=5)) МГц")
println("Длительность импульса: $(round(T*1e6;sigdigits=5)) мкс")
println("Период следования: $(round(1e6/prf;sigdigits=5)) мкс")
println("Частота следования: $(round(prf*1e-3;sigdigits=5)) кГц")
println("Скважность: $(round(Q;sigdigits=5))")
println("Время когерентного накопления: $(round(T_coh*1e3;sigdigits=5)) мс")
println("Количество импульсов в пачке: $n_pulses")
println("Количество пачек: $n_groups_imps")
println("Разрешение по дальности : $(round(ΔR;sigdigits=3)) м") 
println("Разрешение по скорости : $(round(ΔV;sigdigits=3)) м/с") 
println("Максимальная одназначная дальность : $(round(Rmax;sigdigits=3)) м") 
println("Минимальная одназначная дальность : $(round(Rmin;sigdigits=3)) м") 
println("Максимальная одназначная скорость: $(round(Vmax;sigdigits=3)) м/с") 
println("--------------------------------------------------------")
println("-----------------发射器-----------------------------")
println("Мощность передатчика: $(round(Pt*1e-3;sigdigits=5)) кВт")
println("Усиление передатчика: $(round(Gtx;sigdigits=5)) дБ")
println("Потери в передающем тракте: $(round(LFtx;sigdigits=5)) дБ")
println("--------------------------------------------------------")
println("-----------------接收器-----------------------------")
println("Усиление приемника: $(round(Gtx;sigdigits=5)) дБ")
println("Потери в приемном тракте: $(round(LFtx;sigdigits=5)) дБ")
println("Шумовая температура: $(round(LFrx;sigdigits=5)) дБ")
println("Коэффициент шума: $(round(NF;sigdigits=5)) дБ")
println("Шумовая температура: $(round(TN;sigdigits=5)) °К")
println("Мощность шума: $(round(NP;sigdigits=5)) Вт")
println("--------------------------------------------------------")
println("-----------------天线-------------------------------")
println("Расстояние между элементами : $(round(d;sigdigits=3)) м") 
println("Размеры прямоугольной ФАР: $(Nx)x$Ny [Nx, Ny]") 
println("Частотный диапазон излучения: $(freq_range*1e-9) ГГц")
println("Разрешение по азимуту: $(round(Δaz;sigdigits=3)) °") 
println("Разрешение по углу места: $(round(Δel;sigdigits=3)) °") 
println("--------------------------------------------------------")
println("-----------------测向仪-----------------------------")
println("Диапазон сканирования по азимуту: $(az_scan) град.")
println("Диапазон сканирования по углу места: $(el_scan) град.")
println("Количество оценок: $n_sig")
println("--------------------------------------------------------")
-----------------РЛС-----------------------------
Несущая частота: 1.0 ГГц
Скорость света: 299792458 м/с
Длина волны: 0.3 м
Количество частотных поддиапазонов: 64 м
Положение РЛС: [0, 0, 0] [Px,Py,Pz], м
скорость РЛС: [0, 0, 0] [Vx,Vyc,Vz],м/с
--------------------------------------------------------
-----------------Генератор-----------------------------
Частота дискретизации: 200.0 МГц
Длительность импульса: 10.0 мкс
Период следования: 20.0 мкс
Частота следования: 50.0 кГц
Скважность: 2.0
Время когерентного накопления: 0.04 мс
Количество импульсов в пачке: 2
Количество пачек: 2
Разрешение по дальности : 1.5 м
Разрешение по скорости : 3750.0 м/с
Максимальная одназначная дальность : 3000.0 м
Минимальная одназначная дальность : 1500.0 м
Максимальная одназначная скорость: 3750.0 м/с
--------------------------------------------------------
-----------------Передатчик-----------------------------
Мощность передатчика: 1.0 кВт
Усиление передатчика: 20.0 дБ
Потери в передающем тракте: 1.5 дБ
--------------------------------------------------------
-----------------Приемник-----------------------------
Усиление приемника: 20.0 дБ
Потери в приемном тракте: 1.5 дБ
Шумовая температура: 1.5 дБ
Коэффициент шума: 2.0 дБ
Шумовая температура: 290.0 °К
Мощность шума: 4.0039e-13 Вт
--------------------------------------------------------
-----------------Антенна-------------------------------
Расстояние между элементами : 0.15 м
Размеры прямоугольной ФАР: 24x24 [Nx, Ny]
Частотный диапазон излучения: [0.9 1.1] ГГц
Разрешение по азимуту: 4.98 °
Разрешение по углу места: 4.98 °
--------------------------------------------------------
-----------------Пеленгатор-----------------------------
Диапазон сканирования по азимуту: -20.0:0.5:20.0 град.
Диапазон сканирования по углу места: 0.0:0.5:30.0 град.
Количество оценок: 4
--------------------------------------------------------

2. 雷达运行场景的计算

2.1模型运行

使用先前初始化的CO,我们将为雷达的操作创建一个场景。 执行计算后,以下变量将可用:

  • data_y -接收装置输出端的反射信号

  • data_ang_true -N周期(脉冲突发)的真实轴承值

  • data_ang_est -轴承估计N周期(脉冲突发)

  • data_spec -在所选算法的测向算法的输出处的功率谱的估计

重要的是要注意,目标的位置从脉冲更新到脉冲。 因此,在系统操作周期期间,必须将LFM信号的1个脉冲施加到发射机的输入端。 辅助变量用于此目的。 sig_lfm_one_imps 和 sig_buffer_one_groups.

In [ ]:
# 输出信号和轴承估计的内存分配
data_y = zeros(ComplexF64,length(sig_lfm),Nx*Ny,n_groups_imps)
data_ang_true = zeros(2, num_tgts, n_groups_imps); # 目标的真正方向
data_ang_est = zeros(2, num_tgts, n_groups_imps); # 目标的真正方向
data_spec = zeros(length(el_scan),length(az_scan), n_groups_imps); # 测向器输出处视角的光谱数据

len_one_imps = round(Int,length(sig_lfm)/n_pulses) # 1脉冲的计数数
sig_lfm_one_imps = sig_lfm[1:len_one_imps] # 分配1个脉冲
sig_buffer_one_groups = similar(data_y[:,:,1]) # 用于累积脉冲串的缓冲器

println("场景的计算正在运行。..")
@inbounds for i in 1:n_groups_imps
    println("Расчет пачки №$(i)...")

    @inbounds for k in 1:n_pulses
        println("Расчет импульса №$(k)...")
        # 以脉冲周期1/prf的增量更新雷达和目标的位置
        radar_pos, radar_vel = radar_platform(1/prf)
        tgts_pos, tgts_vel = targets_platform(1/prf)

        # 计算和维护目标轴承
        _,ang_doa = rangeangle(tgts_pos,radar_pos)
        data_ang_true[:,:,i] .= deepcopy(ang_doa)

        # 周三宽带信号发射
        sig_tx = transmitter(sig_lfm_one_imps) # 传送路径的通过
        sig_rad = radiator(sig_tx,ang_doa) # 向太空辐射信号

        # 从雷达到目标的传播
        sig_fwd = channel_fwd(sig_rad,radar_pos,tgts_pos,radar_vel,tgts_vel)
        # 目标的反思
        sig_refl = rcs_targets(sig_fwd,ang_doa)

        # 从目标到雷达的传播
        sig_ret = channel_bwd(sig_refl,tgts_pos,radar_pos,tgts_vel,radar_vel)

        # 接收道
        y = collector(sig_ret,ang_doa) # 接收灯
        sig_buffer_one_groups[(1:len_one_imps).+(k-1)*len_one_imps,:] .= receiver(y) # 基于接收器热噪声(LNA)的预放大
    end

    # 轴承计算
    data_spec[:,:,i],data_ang_est[:,:,i] = doa_alg(sig_buffer_one_groups); # 评估目标到达的范围和方向
    data_y[:,:,i] .= sig_buffer_one_groups; # 保存接收到的信号
end

println("场景计算完成!")
Расчет сценария запущен...
Расчет пачки №1...
Расчет импульса №1...
Расчет импульса №2...
Расчет пачки №2...
Расчет импульса №1...
Расчет импульса №2...
Расчет сценария завершен!

2.2系统精度分析

让我们从方位角和仰角绘制测向算法输出端的信号功率谱。 角度网格继承自第1.6段,其中设置了测向算法和网格精度。

In [ ]:
n_imp = 1 # 分析脉冲的数量
plot_size = (600,600) # 许可
plot_spec_azel(az_scan,el_scan,data_spec[:,:,n_imp];
    title = "Cпектр мощности на выходе пеленгатора (алгоритм $(algorithm))",
    size = plot_size
)
Out[0]:

该图显示了4个特征峰,表明在这些方向上存在目标。 下面是方向和轴承估计的真实值的比较,为各自的目的。

在测向器输出处,估计值按检测顺序给出,因此我们将首先使用函数按最小欧几里德距离(L2-范数)估计值的标准进行排序 sort_ang_mse:

In [ ]:
sort_ang_est =  sort_ang_mse(data_ang_true,data_ang_est) # 排序的角度估计数据

for k in 1:n_groups_imps
    println("--------------- Пачка импульсов №$(k) -----------------------------")
    for i in 1:num_tgts
        println("   ---------------- Цель №$(i) ----------------------------")
        println("       Цель:   азимут = $(round(data_ang_true[1,i,k];sigdigits=4)) °, угол места = $(round(data_ang_true[2,i,k];sigdigits=4))°");
        println("       Оценка: азимут = $(round(sort_ang_est[1,i,k];sigdigits=4))°, угол места = $(round(sort_ang_est[2,i,k];sigdigits=4))°");
        println("       Ошибка: азимут = $(round(abs(sort_ang_est[1,i,k] - data_ang_true[1,i,k]);sigdigits=4))°, угол места =  $(round(abs(sort_ang_est[2,i,k] - data_ang_true[2,i,k]);sigdigits=4))°");
    end
    println("Максимальная погрешность: $( round(maximum(abs.(data_ang_true[:,:,k].-sort_ang_est[:,:,k])); sigdigits=4) )°")
    println("-------------------------------------------------------------")
end
--------------- Пачка импульсов №1 -----------------------------
   ---------------- Цель №1 ----------------------------
       Цель:   азимут = 5.711 °, угол места = 11.26°
       Оценка: азимут = 6.0°, угол места = 11.5°
       Ошибка: азимут = 0.2894°, угол места =  0.2447°
   ---------------- Цель №2 ----------------------------
       Цель:   азимут = -0.4775 °, угол места = 9.462°
       Оценка: азимут = -0.5°, угол места = 10.0°
       Ошибка: азимут = 0.02255°, угол места =  0.538°
   ---------------- Цель №3 ----------------------------
       Цель:   азимут = -7.765 °, угол места = 7.695°
       Оценка: азимут = -8.0°, угол места = 8.0°
       Ошибка: азимут = 0.2348°, угол места =  0.3052°
   ---------------- Цель №4 ----------------------------
       Цель:   азимут = 3.013 °, угол места = 18.59°
       Оценка: азимут = 3.0°, угол места = 19.0°
       Ошибка: азимут = 0.0128°, угол места =  0.4082°
Максимальная погрешность: 0.538°
-------------------------------------------------------------
--------------- Пачка импульсов №2 -----------------------------
   ---------------- Цель №1 ----------------------------
       Цель:   азимут = 5.711 °, угол места = 11.26°
       Оценка: азимут = 6.0°, угол места = 11.5°
       Ошибка: азимут = 0.2894°, угол места =  0.2447°
   ---------------- Цель №2 ----------------------------
       Цель:   азимут = -0.4775 °, угол места = 9.462°
       Оценка: азимут = -0.5°, угол места = 10.0°
       Ошибка: азимут = 0.02254°, угол места =  0.5379°
   ---------------- Цель №3 ----------------------------
       Цель:   азимут = -7.765 °, угол места = 7.695°
       Оценка: азимут = -8.0°, угол места = 8.0°
       Ошибка: азимут = 0.2348°, угол места =  0.3051°
   ---------------- Цель №4 ----------------------------
       Цель:   азимут = 3.013 °, угол места = 18.59°
       Оценка: азимут = 3.0°, угол места = 19.0°
       Ошибка: азимут = 0.01283°, угол места =  0.408°
Максимальная погрешность: 0.5379°
-------------------------------------------------------------

最大轴承误差为 0.538°,这与划分网格的价格相当(0.5°). 结果,所使用的算法适用于正在解决的问题。 为了提高精度,您可以增加前灯元件的数量并减少角落的分析网格。

3. 测向算法的分析与比较

在最后一节中,我们研究了测向算法(Beamscan,MVDR,Music)在不同信噪比下的准确性。

为此,让我们使用基本雷达方程估计当前SNR radareqsnr. 您可以使用应用程序"雷达方程的计算"自动计算SNR并生成jl计算文件。 以下是使用该应用程序计算范围为1.5km、长度为0.3m、脉冲持续时间为10微秒和峰值功率为1kW的SNR的示例。

image.png

结果,当前配置的SNR值为34.1db。 生成后,计算文件**RadarEquationScript_2026-05-29_21:46:25.749。jl出现在文件浏览器中。**生成的参数化代码如下所示:

In [ ]:
tgtrng = maximum(abs_dist) # 目标范围
# SNR的计算,精度为3位
snr = round(radareqsnr(
	lambda, # 波长
	tgtrng, # 目标范围
	Pt, # 脉冲功率
	T, # 脉冲持续时间
	RCS = 0.01, # 目标的EPR(选择平均值)
	Gain = Grx, # 天线增益
	Loss = LFtx+LFrx,  # 路径中的损失
	Ts = TN # 噪音温度
)[1];sigdigits = 3)

println("Текущее ОСШ: $snr дб")
Текущее ОСШ: 34.1 дб

为了分析算法的有效性,我们将选择接收器输出端的信号的最后一个脉冲,并形成一个用于增加噪声功率的向量。 noise_vec 和SNR值 snr_vec:

In [ ]:
y = deepcopy(data_y[:,:,end]) # 复制最后一个脉冲的信号数据
ang_trues_end =  data_ang_true[:,:,end]; # 复制目标的真实方向

noise_vec = collect(20:10:70) # 噪声功率的矢量相对于NP从20dB增加到70dB
snr_vec = snr .- noise_vec # SNR值的向量

println("Вектор ОСШ: $(round.(snr_vec;sigdigits=3)) дБ")
Вектор ОСШ: [14.1, 4.1, -5.9, -15.9, -25.9, -35.9] дБ

3.1音乐算法

考虑算法的效率 MUSIC. 让我们用音乐打6个电话,从一个电话到另一个电话,信噪比下降了10倍.:

In [ ]:
# 为音乐不可比拟的频谱和角度估计分配内存
spec_music = zeros(length(el_scan),length(az_scan), length(noise_vec)) 
ang_music = zeros(2, num_tgts, length(noise_vec)) # 目标的真正方向

@inbounds for i in 1:length(noise_vec)
    println("Расчет оценки для ОСШ $(round(snr_vec[i];sigdigits=3)) дБ")
    release!(music) # 将系统对象重置为初始状态
    noise_sig =  sqrt(NP*10^(noise_vec[i]/10))*randn(size(y)) # 噪声信号的新数据
    spec_music[:,:,i],ang_music[:,:,i] = music(y.+noise_sig); # 评估目标到达的范围和方向
end
Расчет оценки для ОСШ 14.1 дБ
Расчет оценки для ОСШ 4.1 дБ
Расчет оценки для ОСШ -5.9 дБ
Расчет оценки для ОСШ -15.9 дБ
Расчет оценки для ОСШ -25.9 дБ
Расчет оценки для ОСШ -35.9 дБ

让我们比较指定SNR的测向结果:

In [ ]:
fig_spec_music_vec = [] # 
@inbounds for i in 1:length(noise_vec)
    push!(fig_spec_music_vec,
        plot_spec_azel(az_scan,el_scan,spec_music[:,:,i];
            title = "MUSIC (ОСШ = $(round(snr_vec[i];sigdigits=3)) дб)"
        )
    )
end
plot(fig_spec_music_vec...)
Out[0]:

在24dB时,所有4目标都有自信的接收。 随着SNR的降低,可检测目标的数量减少:对于-15.9dB,2个目标可见,对于-25.9dB,目标检测丢失。

接下来,考虑所有目的的最大定位误差。:

In [ ]:
sort_ang_music = similar(ang_music) # 排序的角度估计数据
[sort_ang_music[:,:,i] .= sort_ang_mse(ang_trues_end,ang_music[:,:,i]) for i in 1:length(snr_vec)]

# 建立一个表
calc_table_ang_analysis(ang_trues_end,sort_ang_music,snr_vec)
Out[0]:
34×11 DataFrame
9 rows omitted
RowОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,° уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
StringStringStringStringStringStringStringStringStringStringString
114.1№ 10.3795.7116.00.28911.25511.50.245
2№ 20.538-0.477-0.50.0239.46210.00.538
3№ 30.385-7.765-8.00.2357.6958.00.305
4№ 40.4083.0133.00.01318.59219.00.408
5
6ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
74.1№ 10.3795.7116.00.28911.25511.50.245
8№ 20.538-0.477-0.50.0239.46210.00.538
9№ 30.385-7.765-8.00.2357.6958.00.305
10№ 40.4083.0133.00.01318.59219.00.408
11
12ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
13-5.9№ 10.3795.7116.00.28911.25511.50.245
⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮
23
24ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
25-25.9№ 16.6245.7113.52.21111.25517.56.245
26№ 21.538-0.4770.00.4779.4628.01.462
27№ 38.115-7.765-14.06.2357.6952.55.195
28№ 410.2843.013-6.59.51318.59222.53.908
29
30ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
31-35.9№ 112.7245.71116.510.78911.25518.06.745
32№ 25.546-0.4772.02.4779.4624.54.962
33№ 38.601-7.765-10.02.2357.69516.08.305
34№ 410.3563.0130.03.01318.59228.59.908

当SNR降低到-16dB时,对于弱目标,定位精度降低,并且随着信号的不断减弱,误差变得随机。

3.2MVDR算法

接下来,我们来看看算法的效率。 MVDR.

In [ ]:
# 为MVDR分配不可比拟的频谱和角度估计的内存
spec_mvdr = zeros(length(el_scan),length(az_scan), length(noise_vec)) 
ang_mvdr = zeros(2, num_tgts, length(noise_vec)) # 目标的真正方向

@inbounds for i in 1:length(noise_vec)
    println("Расчет оценки для ОСШ $(round(snr_vec[i];sigdigits=3)) дБ")
    release!(mvdr) # 将系统对象重置为初始状态
    noise_sig =  sqrt(NP*10^(noise_vec[i]/10))*randn(size(y)) # 噪声信号的新数据
    spec_mvdr[:,:,i],ang_mvdr[:,:,i] = mvdr(y.+noise_sig); # 评估目标到达的范围和方向
end
Расчет оценки для ОСШ 14.1 дБ
Расчет оценки для ОСШ 4.1 дБ
Расчет оценки для ОСШ -5.9 дБ
Расчет оценки для ОСШ -15.9 дБ
Расчет оценки для ОСШ -25.9 дБ
Расчет оценки для ОСШ -35.9 дБ

让我们比较指定SNR的测向结果:

In [ ]:
fig_spec_mvdr_vec = [] # 
@inbounds for i in 1:length(noise_vec)
    push!(fig_spec_mvdr_vec,
        plot_spec_azel(az_scan,el_scan,spec_mvdr[:,:,i];
            title = "MVDR (ОСШ = $(round(snr_vec[i];sigdigits=3)) дб)"
        )
    )
end
plot(fig_spec_mvdr_vec...)
Out[0]:

在14dB时,所有4目标都有自信的接收。 随着SNR的降低,检测到的目标数量减少:对于-16dB,2个目标可见,对于-20dB,没有一个可见。

接下来,考虑所有目的的最大定位误差。:

In [ ]:
sort_ang_mvdr = similar(ang_mvdr) # 排序的角度估计数据
[sort_ang_mvdr[:,:,i] .= sort_ang_mse(ang_trues_end,ang_mvdr[:,:,i]) for i in 1:length(snr_vec)]

# 建立一个表
calc_table_ang_analysis(ang_trues_end,sort_ang_mvdr,snr_vec)
Out[0]:
34×11 DataFrame
9 rows omitted
RowОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,° уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
StringStringStringStringStringStringStringStringStringStringString
114.1№ 10.3795.7116.00.28911.25511.50.245
2№ 20.538-0.477-0.50.0239.46210.00.538
3№ 30.385-7.765-8.00.2357.6958.00.305
4№ 40.4083.0133.00.01318.59219.00.408
5
6ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
74.1№ 10.3795.7116.00.28911.25511.50.245
8№ 20.538-0.477-0.50.0239.46210.00.538
9№ 30.385-7.765-8.00.2357.6958.00.305
10№ 40.4083.0133.00.01318.59219.00.408
11
12ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
13-5.9№ 10.3795.7116.00.28911.25511.50.245
⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮
23
24ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
25-25.9№ 14.2315.7112.53.21111.2558.52.755
26№ 214.006-0.477-12.011.5239.4621.57.962
27№ 31.417-7.765-9.01.2357.6957.00.695
28№ 417.9673.013-11.514.51318.5928.010.592
29
30ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
31-35.9№ 16.3485.7111.04.71111.2557.04.255
32№ 219.278-0.477-18.017.5239.46217.58.038
33№ 34.259-7.765-8.50.7357.6953.54.195
34№ 47.6443.013-4.57.51318.59220.01.408

当SNR降低到0dB时,对于弱目标,定位精度降低,并且随着信号进一步减弱,误差变得随机。

3.3Beamscan算法

接下来,我们来看看算法的效率。 BeamScan.

In [ ]:
# 为波束扫描分配不可比拟的频谱和角度估计的内存
spec_beamscan = zeros(length(el_scan),length(az_scan), length(noise_vec)) 
ang_beamscan = zeros(2, num_tgts, length(noise_vec)) # 目标的真正方向

@inbounds for i in 1:length(noise_vec)
    println("Расчет оценки для ОСШ $(round(snr_vec[i];sigdigits=3)) дБ")
    release!(beamscan) # 将系统对象重置为初始状态
    noise_sig =  sqrt(NP*10^(noise_vec[i]/10))*randn(size(y)) # 噪声信号的新数据
    spec_beamscan[:,:,i],ang_beamscan[:,:,i] = beamscan(y.+noise_sig); # 评估目标到达的范围和方向
end
Расчет оценки для ОСШ 14.1 дБ
Расчет оценки для ОСШ 4.1 дБ
Расчет оценки для ОСШ -5.9 дБ
Расчет оценки для ОСШ -15.9 дБ
Расчет оценки для ОСШ -25.9 дБ
Расчет оценки для ОСШ -35.9 дБ

让我们比较指定SNR的测向结果:

In [ ]:
fig_spec_beamscan_vec = [] # 
@inbounds for i in 1:length(noise_vec)
    push!(fig_spec_beamscan_vec,
        plot_spec_azel(az_scan,el_scan,spec_beamscan[:,:,i];
            title = "beamscan (ОСШ = $(round(snr_vec[i];sigdigits=3)) дб)"
        )
    )
end
plot(fig_spec_beamscan_vec...)
Out[0]:

对于任何SNR值(-20至30dB),观察到稳定的目标检测。 与此同时,主瓣的宽度明显大于以前的算法,这表明分辨率差,无法检测到2个接近的目标。

接下来,考虑所有目的的最大定位误差。:

In [ ]:
sort_ang_beamscan = similar(ang_beamscan) # 排序的角度估计数据
[sort_ang_beamscan[:,:,i] .= sort_ang_mse(ang_trues_end,ang_beamscan[:,:,i]) for i in 1:length(snr_vec)]

# 建立一个表
calc_table_ang_analysis(ang_trues_end,sort_ang_beamscan,snr_vec)
Out[0]:
34×11 DataFrame
9 rows omitted
RowОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,° уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
StringStringStringStringStringStringStringStringStringStringString
114.1№ 10.3795.7116.00.28911.25511.50.245
2№ 20.538-0.477-0.50.0239.46210.00.538
3№ 30.385-7.765-8.00.2357.6958.00.305
4№ 40.4083.0133.00.01318.59219.00.408
5
6ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
74.1№ 10.3795.7116.00.28911.25511.50.245
8№ 20.538-0.477-0.50.0239.46210.00.538
9№ 30.385-7.765-8.00.2357.6958.00.305
10№ 40.4083.0133.00.01318.59219.00.408
11
12ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
13-5.9№ 10.3795.7116.00.28911.25511.50.245
⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮
23
24ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
25-25.9№ 11.0295.7115.00.71111.25512.00.745
26№ 217.4-0.477-12.011.5239.46222.513.038
27№ 31.332-7.765-7.50.2657.6959.01.305
28№ 49.8713.0136.02.98718.59228.09.408
29
30ОСШ, дБЦельСКО,°аз. эт.,°аз. оц.,°аз. погр.,°уг. мес эт.,°уг. мес оц.,°уг. мес. погр.,°
31-35.9№ 12.1695.7117.01.28911.25513.01.745
32№ 27.622-0.477-7.57.0239.4626.52.962
33№ 36.238-7.765-14.06.2357.6957.50.195
34№ 47.7483.013-2.05.01318.59224.55.908

正如我们所看到的,即使在低SNR下,目标也能被正确检测到,这表明该算法具有很高的抗噪性。

3.4算法对比

让我们比较所选SNR值的结果。 snr_i :

In [ ]:
plot_spec_2d = [];
for snr_i in eachindex(snr_vec)
    spec_beamscan_snr_0db_norm = maximum(spec_beamscan[:,:,snr_i];dims=1)[:]./maximum(spec_beamscan[:,:,snr_i])
    spec_mvdr_snr_0db_norm = maximum(spec_mvdr[:,:,snr_i];dims=1)[:]./maximum(spec_mvdr[:,:,snr_i])
    spec_music_snr_0db_norm = maximum(spec_music[:,:,snr_i];dims=1)[:]./maximum(spec_music[:,:,snr_i])

    fig = plot(az_scan,spec_beamscan_snr_0db_norm,lab="BeamScan",xlab="Азимут, град",
        ylab="Нормированная мощность",lw=2,
        title="Сравнение алгоритмов пеленгации для ОСШ = $(round(snr_vec[snr_i];sigdigits = 3)) дБ"
    )
    plot!(az_scan,spec_mvdr_snr_0db_norm,lab="MVDR",lw=2,ls = :dash)
    plot!(az_scan,spec_music_snr_0db_norm,lab="MUSIC",lw=2,ls = :dashdot)
    push!(plot_spec_2d,fig)
end
plot(plot_spec_2d...;layout = (length(plot_spec_2d),1),size = (600,300*length(plot_spec_2d)))
Out[0]:

如前所述,BeamScan算法具有最差的分辨率,但具有最佳的抗噪性:在-26dB时,该算法能够在6.5度方向上检测目标。 MVDR算法具有出色的分辨率,具有足够的SNR(从10dB),但极易受噪声影响。 MUSIC算法具有最佳的分辨率和抗噪特性:即使在SNR=-6dB下,也在空间频谱上观察到4个目标的自信检测。

结论

因此,在示例中,考虑了在[AnyMath]建模环境中对具有多个目标的多通道宽带测向系统进行建模的方法(https://start.engee.com /)。

此外,在信噪比的不同值(范围从-36到14dB)下,对测向算法(MUSIC,BeamScan,MVDR)进行了比较分析:

*****MVDR算法:在SNR值大于零的情况下显示高效率-高分辨率,但最容易受到噪声的影响;
**算法
*Beamscan:***具有足够的SNR,它具有最大的主瓣宽度,结果是空间频谱的最差分辨率。 与此同时,它具有最佳的抗噪能力,即使在信噪比<-20分贝的情况下也能检测到目标;
*****音乐算法:***在宽动态范围(-20至14分贝)内显示高效率,并在所有算法中具有最佳的分辨率。

资料来源

  1. Van Treece,H.最佳信号处理。 纽约:Wiley-Interscience,2002。
  2. Semichastnov,A.E.和D.A.Balakin。 "基于AnyMath环境中的Microdopler签名对无人驾驶飞行器和鸟类进行分类的雷达系统的建模场景。"电子图书馆,卷。 28,issue4,November2025,pp.943-52,doi:10.26907/1562-5419-2025-28-4-943-952。
  3. A.R.Gorbunov,M.R.Akmalov,A.E.Semichastnov和D.A.Balakin,"基于雷达数据的神经网络方法的鸟类无人机识别算法",2025第七届无线电电子,电气和电力工程国际青年会议(REEPE),莫斯科,俄罗斯联邦,2025,第1-8页,doi:10.1109/REEPE63962.2025。10971050。