Engee 文档
Notebook

受到干扰时的频率适应

此示例演示了如何在受到干扰时对具有频率适应能力的雷达系统进行建模。

连接库和辅助功能

In [ ]:
let
    intalled_packages = collect(x.name for (_, x) in Pkg.dependencies() if x.is_direct_dep)
    list_packages = ["DSP"]
    for pack in list_packages
        pack in intalled_packages || Pkg.add(pack)
    end
end
In [ ]:
using DSP
In [ ]:
function TaylorSpectrumWindow(N, nbar = 4, sll = 30)
    function calcFm(m, sp2, A, NBAR)
        n = Array(1:NBAR-1)
        p = [Array(1:m-1); Array((m+1):(NBAR-1))]
        Num = prod((1 .- (m^2/sp2)./(A^2 .+(n .-0.5).^2)));
        Den = prod((1 .- m.^2 ./p.^2));
    
        return ((-1)^(m+1).*Num)./(2 .*Den)
    end

    A = acosh((10^(sll/20)))/π
    sp2 = nbar^2 / (A^2 + (nbar - 0.5)^2)
    Fm = zeros(nbar - 1)
    sum = zeros(N)
    k = Array(0:N-1)
    xi = @. (k-0.5*N+0.5)/N
    for m = 1:(nbar-1)
        Fm[m] = calcFm(m,sp2,A,nbar);
        @. sum = Fm[m]*cos(2*pi*m*xi)+sum;
    end
    @. sum = 2sum + 1
    return sum
end

function calc_spectrogramm(x,t_step;down_lim = -40)
    plotlyjs()
    out,f,t = EngeePhased.Functions.spectrogram(x;
        window = DSP.kaiser(128,10),
        noverlap=120,nfft=256,fs=1/t_step,
        centered=true,freqloc = "yaxis",out = :data
    )
    out_sig = map(x -> x < down_lim ? down_lim : x,DSP.pow2db.(abs.(out)))
    fig = Plots.heatmap(
        t[:].*1e6,f*1e-6,out_sig,color= :jet,
        gridalpha=0.5,colorbar_title = "功率,dBW",
        xticks=0:50:250,yticks=(-1:0.2:1),
    )
    Plots.xlabel!("时间,iss")
    Plots.ylabel!("多普勒频率,兆赫")
    Plots.title!("信号频谱图")

    return fig
end;

导言

电子扫描有源相控阵天线可以帮助解决使用相同天线阵列设备的各种任务。 它们可用于雷达,电子战和通信系统。 然而,这些类型的系统在其中操作的环境是复杂的并且可能引入不需要的干扰。 例如,中继器上的干扰器可能会重复接收到的雷达信号并重新传输它以混淆雷达。 频率适应可以是对抗由干扰源产生的信号并有助于这些系统的高效操作的有效方法。

在此示例中,对具有静止单稳态雷达和移动飞机目标的场景进行建模(在示例Center frequency tuning under impact помех)。然后,飞机将产生混淆雷达的替换信号。 一旦雷达检测到干扰源,就可以使用中心频率调谐技术来允许雷达绕过干扰。

1. 系统在无干扰环境下的仿真

假设x波段单稳态雷达位于原点。

In [ ]:
fc = 10e9; # X波段雷达载波频率,Hz
fs = 2e6; # 模型的采样率,Hz
c = 3e8; # 信号传播速度,m/s
lambda = c/fc; # 波长,m

radar_pos = [0;0;0]; # 雷达位置
radar_vel = [0;0;0]; # 雷达速度

接收天线由等距矩形天线阵列的64个元件(8x8)组成,元件之间有半波长步长:

In [ ]:
antenna = EngeePhased.URA(
    Element=EngeePhased.CosineAntennaElement(), # AR的余弦元素
    Size=[8 8], # 天线阵列尺寸
    ElementSpacing=[lambda/2 lambda/2],  # 元素之间的距离
)
Out[0]:
URA:
    Element=CosineAntennaElement: FrequencyRange=[0.0 1.0e20] CosinePower=[1.5 1.5]
    Size=[8 8]
    ElementSpacing=[0.015 0.015]
    Lattice=Rectangular
    ArrayNormal=x
    Taper=1

为了更好地表征AR的方向性,我们将形成一个2维泰勒窗函数。:

In [ ]:
taper = TaylorSpectrumWindow(8); # 加权fuction泰勒窗口
taperURA = taper.*taper' # формирование 2д взвешанной функции
antenna.Taper = taperURA # 称重AP

# 窗口函数的可视化
surface(taperURA,title="二维泰勒窗功能")
Out[0]:

天线阵列的辐射方向图可以使用函数构造 pattern:

In [ ]:
pattern(antenna,fc,Type="powerdb")
plot!(title="矩形AR的底部",colorbar_title="功率,dBW")
Out[0]:

在所考虑的雷达中,信号源将是线性频率调制(LFM)信号:

In [ ]:
release!(antenna) 
# 雷达元件的系统对象的形成

bw = 1e5 # 信号的频域频带
pw = 1e-4 # 持久脉搏

wav = EngeePhased.LinearFMWaveform( # LCHM发生器
    SampleRate=fs,  # 模型的采样率
    PulseWidth= pw, # 脉冲持续时间
    SweepBandwidth= bw, # 信号的频域频带
    PRF=4e3, # 脉冲重复率
    FrequencyOffsetSource="Input port" # 打开输入以调整中心频率
)
tx = EngeePhased.Transmitter( # 发射器
    Gain=20, # 增益,dB
    PeakPower=500 # 峰值功率,W
)
txArray = EngeePhased.WidebandRadiator( # 宽带传输系统
    SampleRate=fs,  # 模型的采样率
    Sensor=antenna, # 定义AR几何
    CarrierFrequency=fc # 载波频率
)
rxArray = EngeePhased.WidebandCollector(
    SampleRate=fs,  # 模型的采样率
    Sensor=antenna, # 定义AR几何
    CarrierFrequency=fc # 载波频率
)
rxPreamp = EngeePhased.ReceiverPreamp( # 前置放大器
    Gain=10, # 增益,dB
    NoiseFigure=5, # 噪音系数,dB
    SampleRate=fs,  # 模型的采样率
);

接下来,我们将创建目标和分发环境对象。:

In [ ]:
target = EngeePhased.RadarTarget(
    MeanRCS=100, # 目标的平均EPR值
    OperatingFrequency=fc # 载波频率
)

target_pos = [8000;1000;1000] # 目标的初始位置
target_vel = [100;0;0] # 目标的速度矢量

envout = EngeePhased.WidebandFreeSpace(
    TwoWayPropagation=false, # 考虑双向传播
    SampleRate = fs, # 采样率
    OperatingFrequency=fc, # 载波频率
    PropagationSpeed=c # 传播的速度
)
envin = deepcopy(envout); # 反向分配通道的重复

使用系统的先前定义的系统对象,我们将在没有干扰的情况下计算来自目标的反射信号:

In [ ]:
tgtRng, tgtAng = rangeangle(target_pos, radar_pos)           
x = deepcopy(wav(0)) # 发电机
xt = tx(x) # 发射器
xtarray = txArray(xt,tgtAng) # 发射天线阵列
yp = envout(xtarray,radar_pos,target_pos,radar_vel,target_vel) # 直接分销渠道
yr = target(yp) # 目的
ye = envin(yr,target_pos,radar_pos,target_vel,radar_vel) # 分布环境
yt = rxArray(ye,tgtAng) # 接收天线阵列
yt = rxPreamp(yt);  # 接收器

让我们计算方向并使用 BeamscanEstimator2DSubbandPhaseShiftBeamformer

In [ ]:
estimator = EngeePhased.BeamscanEstimator2D(
    SensorArray=antenna, # AR几何
    DOAOutputPort=true, # 打开角落的输出
    OperatingFrequency=fc, # 载波频率
    NumSignals=1, # 信号数量
    AzimuthScanAngles=-40:40,  # 方位扫描范围
    ElevationScanAngles=-60:60 # 按位置角度扫描范围
)

doa = estimator(yt)[2] # 使用CO BeamscanEstimator2D计算轴承估计值

beamformer = EngeePhased.SubbandPhaseShiftBeamformer(
    SensorArray=antenna, # AR几何
    OperatingFrequency=fc, # 载波频率
    DirectionSource="Input port", # 设置视角的方法
    SampleRate=fs, # 采样率
    WeightsOutputPort=true # 重量因素
)

ybf = beamformer(yt,doa)[1]; # 协同生成算法SubbandPhaseShiftBeamformer的应用

让我们执行一致的过滤。 为此,我们通过函数计算滤波器系数 getMatchedFilter

In [ ]:
mfcoeff1 = getMatchedFilter(wav) # 匹配滤波器的系数
mf1 = EngeePhased.MatchedFilter(Coefficients=mfcoeff1);

让我们对生成的波束应用一致滤波,并可视化雷达操作的结果。:

In [ ]:
y1 = mf1(ybf) # 应用一致的过滤器

nSamples = wav.SampleRate/wav.PRF # 每个脉冲周期的计数数
t = ((0:nSamples-1).-(length(mfcoeff1)-1))./fs # 时间延迟网格
r = t*c/2 # 从延迟到范围的转换

# 雷达操作的结果
plot(r/1000,abs.(y1),xlabel="范围,公里",ylabel="的振幅",lab="",xticks=-1e6:5:1e6,title="SF输出")
Out[0]:

2. 添加干扰组件

现在让我们通过模拟有用信号和时间延迟来模拟干扰信号。:

In [ ]:
 # 通过复制信号发生器模拟干扰信号
jwav = deepcopy(wav)

xj = jwav(0) # 干扰成分的形成
Npad = ceil(Int64,3500/(c/fs)) # 延迟元件数量(1计数-150米)
xj = circshift(xj,Npad) # 信号转移到传播
txjam = EngeePhased.Transmitter(
    Gain=10, # 干扰的放大
    PeakPower=5 # 干扰功率
)

# 反射信号+干扰的计算
xj = txjam(xj) # 干扰辐射
ye = envin(yr.+xj,target_pos,radar_pos,target_vel,radar_vel) # 直接分销渠道
yt = rxArray(ye,tgtAng) # AR接收
yt = rxPreamp(yt) # 前置放大器
ybfj = beamformer(yt,doa)[1] # 光束整形器
y1j = mf1(ybfj); # 过滤总信号

让我们看看模型的输出图是如何变换的。:

In [ ]:
plot(r/1000,abs.(y1j),xlabel="范围,公里",ylabel="的振幅",
    lab="",xticks=-1e6:5:1e6,title="受到干扰时的SF输出")
Out[0]:

我们可以看到,添加干扰后,在匹配滤波器的输出端形成2个相关峰,其中1个峰来自干扰,模糊了目标的真实位置。

3. 中心频率调整

为了减少干扰分量的影响,可以使用频率调谐方法,该方法包括将信号的中心频率改变为几个信号频带的值。:

In [ ]:
deltaf = 2.5 * bw # 中心频率偏移250kHz
xh = deepcopy(wav(deltaf)); # 具有偏移中心频率的信号

让我们构建一个2个信号之和的频谱图-一个无偏和一个偏移FM信号。:

In [ ]:
calc_spectrogramm(x.+xh,1/fs;down_lim = -40)
Out[0]:

频谱图显示信号频谱相对于彼此偏移约250kHz。

让我们重复一个偏移信号的雷达操作场景的模拟:

In [ ]:
xth = tx(xh) # 发射器
xtharray = txArray(xth, tgtAng) # 发射前灯
yph = envout(xtharray,radar_pos,target_pos,radar_vel,target_vel) # 直接分销渠道
yrh = target(yph) # 目的

yeh = envin(yrh.+xj,target_pos,radar_pos,target_vel,radar_vel) # 反向分销渠道
yth = rxArray(yeh,tgtAng) # 接收灯
yth = rxPreamp(yth) # 前置放大器
ybfh = beamformer(yth,doa)[1]; # 光束形成

为了隔离有用分量并去除干扰分量,需要一个带通滤波器,调谐到具有ZS频带的偏移频率。

让我们设置9阶低通巴特沃斯滤波器的系数,并将中心带移位250kHz:

In [ ]:
include("$(@__DIR__)/data_filter_coeff.jl") # 从jl文件读取系数
# 中心频率偏移250kHz
bf2 = buttercoef.*exp.(1im*2*pi*deltaf*Vector(0:length(buttercoef)-1)/fs); 

我们在SW波段实现滤波:

In [ ]:
mfcoeff2 = getMatchedFilter(wav,deltaf)
mf2 = EngeePhased.MatchedFilter(Coefficients=mfcoeff2)

# 带通滤波和匹配滤波
yb2 = mf2(DSP.filt(bf2,1,ybfh))

plot(r./1000,abs.(yb2),lab="")
xlabel!("范围,公里")
ylabel!("的振幅")
title!("重组后的SF产量")
Out[0]:

从SF输出端的信号的曲线图可以看出,干扰分量的相关峰值已经被成功地抑制。
因此,允许使用中心频率调谐

结论

在示例中,我们考虑了使用EngeePhased库的系统对象对频率可调谐雷达的仿真。 这种方法使得能够减小干扰分量的影响并成功地隔离有用信号。