基于有源雷达的目标定位
此示例演示如何模拟有源雷达系统(radars)的场景并确定信号传播延迟时间(**TOA)的估计值。**解决在一个小规模的目标存在本地化的问题。
本示例是一系列本地化解决方案的第一部分。. 第二部分致力于使用TDOA(到达时间差)算法进行定位的无源雷达方法самолета.
导言
在雷达领域,基于从具有已知坐标的一组空间间隔的传感器获得的数据来定位目标的任务具有相当大的相关性。 为了解决这个问题,传统上使用基于信号的到达时间(TOA—到达时间)和到达时间差(TDOA—到达时间差)的测量的方法。
使用雷达的目标的局部定位可以以各种配置实现。 其中最常见的是单稳态主动雷达系统,它通过主动发射雷达信号,然后使用组合且同步的发射器和接收器接收反射信号来确定目标的位置(见下图)。
在这样的雷达系统中,TOA基于目标和雷达收发器之间的信号传播延迟来确定。
启用辅助功能
我们将对计算定位估计和定位方法可视化所需的函数进行初始化TOA
isdefined(Main,:init_func) || include("init.jl")
考虑基于单稳态主动雷达系统的定位(**TOA)**目标。 每个雷达都有一个同步的接收器和发射器。
1. 雷达运行情景的形成
让我们创建一个具有已知坐标的5X波段雷达的场景,以定位具有小有效散射区域(ESR)的无人驾驶飞行器(UAV)。
# 雷达参数
fc = 9e9 # [Hz],载波频率
c = physconst("LightSpeed") # [m/s],信号的传播速度
bw = 200e6 # Hz,信号带
fs = bw # Hz,采样率
# 接收和发送路径的参数
Pt = 1 # W、峰值功率
Gtx = 40 # dB,发射天线的增益
Grx = 40 # dB,接收天线的增益
NF = 2.9 # dB,接收路径的噪声系数
# 功能雷达节点的系统对象(CO)的形成
antenna = EngeePhased.IsotropicAntennaElement( # 具有各向同性天线元件
BackBaffled=false # 考虑到天线底部的反向散射
)
transmitter = EngeePhased.Transmitter( # 协变送器
Gain=Gtx, # 发射机增益
PeakPower=Pt # 峰值功率
)
radiator = EngeePhased.Radiator( # 共发射天线
Sensor=antenna, # 天线元件的底部
OperatingFrequency=fc # 天线载波频率
)
collector = EngeePhased.Collector( # 共接收天线
Sensor=antenna, # 天线元件的底部
OperatingFrequency=fc # 天线载波频率
)
receiver = EngeePhased.ReceiverPreamp(
Gain=Grx, # 接收器增益
NoiseFigure=NF, # 路径中的噪声因子
SampleRate=fs # 采样率
)
# 建立共同目标
tgtrcs = 1e-2 # M^2,EPR目标
target = EngeePhased.RadarTarget(
MeanRCS=tgtrcs, # 平均EPR值
PropagationSpeed=c, # 信号传播速度
OperatingFrequency=fc # 信号的载波频率
)
# 目标移动场景的模型
tgtpos = [30; 10; 15]; # [pos_x,pos_y,pos_z],m为目标位置的初始向量
tgtvel = [5; 10; 0]; # [v_x,v_y,v_z],m/s目标速度矢量
tgtplatform = EngeePhased.Platform( # 目标运动的共同模型
InitialPosition=tgtpos, # 目标位置的初始向量
Velocity=tgtvel # 目标的速度矢量
)
# 雷达运动场景模型
radarpos = [ # m、雷达的初始位置
0 -30. 100 80 -40;
0 50 -40 30 -20;
0 -5 7 5 2
]
numRadar = size(radarpos,2) # 雷达数目
radarvel = zeros(3,numRadar) # [v_x,v_y,v_z][m/s],雷达速度
radarplatform = EngeePhased.Platform( # 雷达运动的协同模型
InitialPosition=radarpos, # 初始位置向量
Velocity=radarvel # 雷达速度矢量
);
2. 探测信号(SS)的形成
雷达系统最流行的信号之一是连续频率调制信号或[FMCW信号](https://engee.com/helpcenter/stable/ru/phased-waveforms/fmcw-waveform.html )。 FMCW信号广泛应用于雷达系统,因为这种方法是发达的,不需要高成本。
# 从LCHM形成连续信号
N = 1024 # 每上升时间的计数数(快速时间计数)
M = 8 # 累积脉冲数(慢时间计数)
freqSpacing = bw/N # Hz,频率分辨率
tWave = N/fs; # c、saw的上升时间(脉冲持续时间)
fmcwWaveform = EngeePhased.FMCWWaveform( # FMCWWaveform系统对象
SweepTime=tWave, # 脉冲持续时间
SweepBandwidth=bw, # 信号频段(频谱宽度)
SampleRate=fs, # 采样率
SweepDirection="Up" # 频率变化方向
)
# M通道连续调频信号仿真
sig_lfm = ComplexF64.(fmcwWaveform()*ones(1,M))
println("CC的尺寸:$(尺寸(sig_lfm))")
应用函数 plot_sig_and_spec 用于用FM绘制连续信号的示波器和频谱图:
plot_sig_and_spec(sig_lfm[:,1];fs=fs,name_sig = "连续LCHM")
在频谱图上,可以在5微秒内观察到从0到200MHz的频率变化,这符合规定的频率偏差要求。 `bw` 和脉冲持续时间 `tWave` 发电机
3. 分销渠道
在所考虑的场景中,信号传播信道的模型是在没有相互的、被动的和主动的雷达干扰的情况下,每个雷达和目标之间的自由空间。 要实现模型,我们将使用system对象 EngeePhased.FreeSpace,其允许在载波频率下的传播期间的衰减,在存在目标的相对运动的情况下的多普勒频移,以及双向传播(到目标和返回)。
# 考虑到双向传播的信号传播通道的形成
channel = EngeePhased.FreeSpace( # 通道协同模型(自由空间)
PropagationSpeed=c, # 传播的速度
OperatingFrequency=fc, # 载波频率
SampleRate=fs, # 采样率
TwoWayPropagation=true # 考虑双向传播
)
4. 有源雷达系统场景的计算
在初始化计算系统运行场景所需的系统对象后,我们将为每个雷达计算来自无人机的反射信号。 全反射信号将被存储在一个变量
X带尺寸**[N,M,R]:**
N是快速时间内的计数数,
M是慢时间内的脉冲数。
R是活动系统中的雷达数。
# 创建参考信号
refsig = deepcopy(sig_lfm[:,1])
# 为所有雷达的反射信号分配内存
X = zeros(ComplexF64,size(sig_lfm)...,numRadar)
# 发射器后的信号
txsig = transmitter.(sig_lfm)
for rad_i in 1:numRadar
# 初始化输入信号
x = zeros(ComplexF64,size(sig_lfm))
# 接收和发送路径
for m in 1:M
# 更新目标和雷达的位置
radar_pos,radar_vel = radarplatform(tWave)
tgt_pos,tgt_vel = tgtplatform(tWave)
# 传输装置的轴承角度的计算
_,txang = rangeangle(tgt_pos,radar_pos[:,rad_i])
# ZS辐射到太空
radtxsig = radiator(txsig[:,m],txang)
# 信号在空间中的传播
chansig = channel(
radtxsig,radar_pos[:,rad_i],
tgt_pos,radar_vel[:,rad_i],tgt_vel
)
# 来自目标的信号的反射
tgtsig = target(chansig)
# 接收装置的轴承角度的计算
_,rxang = rangeangle(radar_pos[:,rad_i],tgt_pos)
# 天线接收反射信号
rxsig = collector(tgtsig,rxang)
# 接收机预增益
x[:,m] .= receiver(rxsig)
end
dechirpsig = dechirp(x,refsig)
X[:,:,rad_i] = conj.(dechirpsig)
# 重置雷达和目标的位置,以计算下一个雷达的反射值
reset_plt!(radarplatform,radarpos)
reset_plt!(tgtplatform,tgtpos)
end
5. 信号延迟估计和目标定位的计算
在计算每个雷达的反射信号之后,下一步是获得信号到达时间的测量值。 让我们使用对象 TOAEstimator 通过配置来估计信号到达的时间 Measurement="TOA". 频谱分析方法可以配置FFT和MUSIC。
spectrumMethod = "FFT"; # @param ["FFT", "MUSIC"]
# TOAEstimator对象的形成
toaEstimator = TOAEstimator(
PropagationSpeed=c, # 传播的速度
Measurement="TOA", # 的局部定位方法
SpectrumMethod=spectrumMethod, # 光谱法
VarianceOutputPort=true, # 使能输出的延迟误差
SpatialSmoothing=ceil(Int64,N/2) # 对于音乐算法
);
让我们调用"***toaEstimator"***对象来计算延迟向量 Y1 和方差向量 var1
# 延迟和方差估计的计算
Y1,toa_var1 = toaEstimator(X,freqSpacing)
println("每个雷达的延迟估计:△(round.(Y1.*1e9;sigdigits=6))ns")
# 转换为传播延迟的反射信号频谱的构建
plotTDOASpectrum(
toaEstimator, # 延迟计算对象
anchorIdx=1:5, # 要显示的雷达号码
MaxDelay=700e-9, # 对延迟轴的限制
DinRange=30, # SPM的动态范围
OneSidedSpectrum=true # 建立单向频谱
)
获得了一个方向上信号通过时间的估计值,信号通过时间估计值的方差和雷达的已知坐标,我们使用函数[toaposest](https://www.mathworks.com/help/phased/ref/toaposest.html )来确定目标的位置。
由于所获得的信号行进时间估计值表示两个方向上的信号传播延迟的估计值,我们将信号传播延迟的估计值除以2,将信号行进时间方差的估计值除以:
# 双向传播调整
Y_single = Y1 ./ 2 # 延迟,与
var_single = toa_var1 ./ 4 # 方差,c^2
# 计算目标位置的估计值
tgtposest = toaposest(Y_single,var_single,radarpos)
println("评估$(轮)的位置。(tgtposest;sigdigits=6))m")
println("△(Tgtpos)m的真实位置")
下面是使用TOA方法的本地化过程的可视化。:
helperPlotTOAPositions(c,Y_single,tgtposest,radarpos,tgtpos)
我们还可以使用RMS误差(RMSE)检查位置的准确性。
# COE定位的计算
RMSE = rmse(tgtposest,tgtpos)
println("定位时间:$(round(RMSE;sigdigits=6))m")
结论
该示例演示了在Engee仿真环境中使用有源多位置雷达定位小型目标问题的解决方案(https://start.engee.com /)。 .
该系统是使用具有线性频率调制(FMCW)的连续信号的单稳态有源雷达系统。 实现了估计信号传播延迟时间(TOA)的方法,然后根据函数对信号源进行定位 TOAEstimator 和 toaPosest.