2026a

# backscatterBicyclist


自行车手的反向散射雷达信号

函数库: TyRadar

# 说明

backscatterBicyclist 对象模拟从移动的自行车手身上反射的反向散射雷达信号。自行车手包括自行车和骑手。该对象对自行车手的运动进行建模,并计算来自自行车手身上多个离散散射体的所有反射信号的总和。该模型忽略了自行车内部的遮挡物。反射信号基于 77 GHz 雷达系统开发的多散射体模型。

散射体位于自行车的五个主要部件上:

  • 自行车车架和车手;

  • 自行车踏板;

  • 骑手的上下肢;

  • 前轮;

  • 后轮。

除车轮外,自行车上共有 114 个散射体。车轮的轮辋和辐条上有散射体。车轮上的散射体数量取决于每个车轮的辐条数量。辐条数量通过 NumWheelSpokes 属性指定。

# 构造

# 语法

bicyclist = backscatterBicyclist()
bicyclist = backscatterBicyclist(;Name=Value)

# 说明

bicyclist = backscatterBicyclist() 创建一个具有默认属性值的 backscatterBicyclist 对象,即 bicyclist。


bicyclist = backscatterBicyclist(;Name=Value) 创建一个 backscatterBicyclist 对象(bicyclist),并将每个指定的属性 Name 设置为指定的 Value。您还可以按任意顺序指定其他名称-值对参数(Name1=Value1,...,NameN=ValueN)。任何未指定的属性都使用默认值。例如:

bicyclist = backscatterBicyclist(;NumWheelSpokes=18,Speed=10.0,InitialPosition=[0;0;0],InitialHeading=90,GearTransmissionRatio=5.5)

模拟一辆每个车轮上有 18 根辐条的自行车,以每秒 10 米的速度沿 y 轴正向移动。齿轮传动比为 5.5,表示踏板每转动一圈,车轮就转动 5.5 圈。自行车沿着 y 轴前进。

# 属性

NumWheelSpokes - 每个车轮的辐条数
20(默认值) | 正整数

自行车每个车轮的辐条数,指定为 3 到 50(含)之间的正整数。

数据类型: Float64

GearTransmissionRatio - 车轮转动与踏板转动之比
1.5(默认值) | 正标量

车轮转动与踏板转动的比率,以正标量指定。齿轮比必须在 0.5 到 6 的范围内。单位为无量纲。

数据类型: Float64

OperatingFrequency - 窄带信号的载波频率
77e9(默认值) | 正标量

窄带入射信号的载波频率,以正标量形式指定。单位为 Hz。

示例: 900e6

数据类型: Float64

InitialPosition - 自行车手的初始位置
[0;0;0](默认) | 3 × 1 实值向量

自行车手的初始位置,以全局坐标 [x; y; z] 的形式指定为 3 × 1 实值向量。单位为 m。初始位置与自行车坐标原点的位置相对应。原点位于默认自行车配置的散射体投射到地面的质量中心。

数据类型: Float64

InitialHeading - 自行车手的初始方向
0(默认) | 标量

自行车手的初始方向,以标量形式指定。航向是在 平面上从 轴向 轴测量的。航向相对于全局坐标。单位为 °。

数据类型: Float64

Speed - 自行车手的速度
4(默认值) | 非负标量

自行车手的速度,指定为非负标量。运动模型将速度限制为最大 60 米/秒(216 千米/小时)。速度是根据全局坐标定义的。单位为 m/s。

数据类型: Float64

Coast - 设置自行车滑行状态
false(默认) | true

设置自行车滑行状态,指定为 false 或 true。如果设置为 true,骑手不踩踏板,但车轮仍在旋转(空转)。如果设置为 false,则骑手正在踩踏板,由齿轮传动比决定车轮旋转与踏板旋转的比例。

数据类型: Float64

PropagationSpeed - 信号传播速度
正标量

信号传播速度,指定为正标量。单位为 m/s。

示例: 3e8

数据类型: Float64

AzimuthAngles - 雷达横截面方位角
[-180:180](默认) | 1 × P 实值向量 | P × 1 实值向量

雷达截面方位角,指定为 1 × P 或 P × 1 实值向量。该属性定义了 RCSPattern 属性指定的雷达截面矩阵每列的方位角坐标。P 必须大于 2。角度单位为 °。

示例: [-45:0.1:45]

数据类型: Float64

ElevationAngles - 雷达截面仰角
0(默认) | 标量 | 1 × Q 实值向量 | Q × 1 实值向量

雷达截面仰角,指定为 1 × Q 或 Q × 1 实值向量。该属性定义了 RCSPattern 属性指定的雷达截面矩阵每一行的仰角坐标。Q 必须大于 2。角度单位为 °。

示例: [-45:0.1:45]

数据类型: Float64

RCSPattern - RCS模式
1 × 361 实值矩阵(默认) | Q × P 实值向量 | 1 × P 实值向量

雷达散射截面积(RCS)模式,指定为 Q × P 实值矩阵或 1 × P 实值向量。矩阵行代表恒定仰角,列代表恒定方位角。Q 是由 ElevationAngles 属性定义的向量长度。P 是 AzimuthAngles 属性定义的向量长度。单位为 ㎡。

您也可以将图案指定为单个仰角的 1 × P 实值方位角向量。

该属性的默认值是一个 1 × 361 矩阵,包含从 77 GHz 雷达对一名自行车手的测量结果中得出的值。方位角(AzimuthAngles)和仰角(ElevationAngles)的默认值与默认 RCS 矩阵相对应。

示例: [1,.5;.5,1]

数据类型: Float64

# 对象函数

函数 说明
step 运行系统对象算法
reset 重置系统对象的内部状态
release 释放资源并允许更改系统对象属性值和输入特征

# 示例

自行车手反向散射的雷达信号

计算一名自行车手以 5 米/秒的速度沿 -轴远离雷达时产生的反向散射雷达信号。假设雷达位于原点。雷达发射频率为 24 GHz、带宽为 300 MHz 的 LFM 信号。在自行车手开始移动的一瞬间和一秒钟后,信号被反射。

初始化自行车手、波形和传播通道对象

初始化 backscatterBicyclist、phased.LinearFMWaveform 和 phased.FreeSpace 对象。假设采样频率为 300 MHz。自行车手的初始位置位于 轴上,距离雷达 30 米。

using TyRadar
using TyPhasedArray
using TyPlot
using TyCommunication
using TyControlSystems
using TyStatistics
using TyBase
bw = 300e6
fs = bw
fc = 24e9
radarpos = [0; 0; 0]
bpos = [30; 0; 0]
bicyclist = backscatterBicyclist(;
    OperatingFrequency=fc,
    NumWheelSpokes=15,
    InitialPosition=bpos,
    Speed=5.0,
    InitialHeading=0.0,
)
lfmwav = phased_LinearFMWaveform(; SampleRate=fs, SweepBandwidth=bw)
sig, = step(lfmwav)
chan = phased_FreeSpace(; OperatingFrequency=fc, SampleRate=fs, TwoWayPropagation=true)

绘制自行车手初始位置图

使用移动物体函数,获取散射体的初始位置、速度和自行车手的方向。绘制自行车的初始位置图。移动对象函数的 dt 参数决定了下一次调用移动时,自行车的运动状态将在 dt 秒后返回。

dt = 1.0
bpos, bvel, bax = move(bicyclist, dt, 0)
plot(bicyclist)

获取第一个反射信号

将信号传播到所有散射体,获得累积反射回波信号。

N = getNumScatterers(bicyclist);
sigtrns1 = step(chan, repeat(sig, 1, N), radarpos, bpos, [0; 0; 0], bvel)
rngs, ang = rangeangle(radarpos, bpos, bax)
y0 = reflect(bicyclist, sigtrns1, ang)

位置更新后绘制自行车手位置图

自行车移动后,获取散射体的位置和速度,然后将自行车沿其轨迹再移动一秒钟。

bpos, bvel, bax = move(bicyclist, dt, 0)
plot(bicyclist)

获取第二个反射信号

将信号传播到所有散射体的新位置,获得累积反射回波信号。

sigtrns2 = step(chan, repeat(sig, 1, N), radarpos, bpos, [0; 0; 0], bvel)
_, ang = rangeangle(radarpos, bpos, bax)
y1 = reflect(bicyclist, sigtrns2, ang)

匹配滤波后的反射信号

对反射信号进行匹配滤波,并将它们绘制在一起。

mfsig = getMatchedFilter(lfmwav)
nsamp = length(mfsig)
mf = phased_MatchedFilter(; Coefficients=mfsig)
ymf, = step(mf, [y0 y1])
fdelay = (nsamp - 1) / fs;
t = (0:(size(ymf, 1) - 1)) / fs .- fdelay
c = physconst("LightSpeed")
plot(c * t / 2, mag2db.(abs.(ymf)))
ylim([-200 -50])
xlabel("Range (m)")
ylabel("Magnitude (dB)")
ax = axis();
axis([0, 100, ax[3], ax[4]])
grid("on")
legend("First pulse", "Second pulse")

计算两个脉冲最大值之间的范围差。

_, idx = ty_maximum(abs.(ymf))
dpeaks = t[idx[2]] - t[idx[1]]
drng = c * dpeaks / 2
drng = 4.9965409666664495

考虑到骑手的速度,预计距离相差 5 米。

具有自定义 RCS 模式的反向散射自行车手

创建自定义 RCS 模式,与 backscatterBicyclist 对象一起使用。

RCS 图样由余弦值上升到四次幂计算得出。绘制图案。

using TyRadar
using TyPlot
az = (-180:180)'
el = (-90:90)'
caz = cosd.(az') .^ 4
cel = cosd.(el) .^ 4
rcs = (caz * cel)'
imagesc(rcs; xvalue=az, yvalue=el)
xlabel("Azimuth (deg)")
ylabel("Elevation (deg)")
bicyclist = backscatterBicyclist(;
    NumWheelSpokes=18,
    Speed=10.0,
    InitialPosition=[0; 0; 0],
    InitialHeading=90,
    GearTransmissionRatio=5.5,
    AzimuthAngles=az,
    ElevationAngles=el,
    RCSPattern=rcs,
);
显示来自移动骑自行车者的微多普勒频移

显示一个显示微多普勒效应的声谱图,该效应来源于反射自移动骑自行车目标上散射体的雷达信号。一个静止的雷达发射 1000 个 FMCW 雷达波脉冲,带宽为 250 MHz,持续时间为 1 微秒。雷达工作在 24 GHz 频率。骑自行车者从离雷达 5 米处开始,以 4 米/秒的速度远离雷达。

设置波形、信道、发射器、接收器和平台系统对象。

using TyRadar
using TyPhasedArray
using TyCommunication
using TySignalProcessing
using TyPlot

bw = 250e6
fs = 2 * bw
fc = 24e9
c = physconst("Lightspeed")
tm = 1e-6
wav = phased_FMCWWaveform(; SampleRate=fs, SweepTime=tm, SweepBandwidth=bw)
chan = phased_FreeSpace(;
    PropagationSpeed=c, OperatingFrequency=fc, TwoWayPropagation=true, SampleRate=fs
)
radarplt = phased_Platform(; InitialPosition=[0; 0; 0], OrientationAxesOutputPort=true);
trx = phased_Transmitter(; PeakPower=1, Gain=25)
rcvx = phased_ReceiverPreamp(; Gain=25, NoiseFigure=10)

创建一个以 4 米/秒速度移动的骑自行车者对象。

bicyclistSpeed = 4
bicyclist = backscatterBicyclist(;
    InitialPosition=[5; 0; 0],
    Speed=bicyclistSpeed,
    PropagationSpeed=c,
    OperatingFrequency=fc,
    InitialHeading=0.0,
)
lambda = c / fc
fmax = 2 * bicyclist.GearTransmissionRatio * bicyclistSpeed / lambda
tsamp = 1 / (2 * fmax)

循环处理 1000 个脉冲。计算雷达的入射角。将波传播到每个散射体,然后将波从散射体反射回雷达。

npulse = 1000
xr = complex.(zeros(Int(fs * tm), npulse))
for m in 1:npulse
    posr, velr, axr = step(radarplt, tsamp)
    post, velt, axt = move(bicyclist, tsamp, 0)
    _, angrt = rangeangle(posr, post, axt)
    x, = step(trx, step(wav))
    xt = step(chan, repeat(x, 1, size(post, 2)), posr, post, velr, velt)
    xr[:, m] = step(rcvx, reflect(bicyclist, xt, angrt))
    global x
end

处理到达的信号。首先,进行去调制,然后将信号输入到采用凯泽窗的短时傅里叶变换中。

xd = conj(dechirp(xr, vec(x)))
M = 128
beta = 6
w = kaiser(M, beta)
R = floor(1.7 * (M - 1) / (beta + 1))
noverlap = Int(M - R)
S, F, T = stft(
    sum(xd; dims=1), 1 / tsamp; Window=w, FFTLength=M * 2, OverlapLength=noverlap
)
maxval = maximum(10 * log10.(abs.(S)); dims=1)
h = pcolor(T, -F * lambda / 2, 10 * log10.(abs.(S)) .- maxval)
shading(h, "flat")
colorbar(h)
xlabel("Time (sec)")
ylabel("Speed (m/s)")

# 算法

自行车模型

自行车手由五个主要部分组成:自行车车架和骑手、脚踏板、骑手的腿、前轮和后轮。每个组件都包含许多散射体。所有组件的移动速度由指定速度和方向属性决定。此外,腿部、踏板和车轮也会发生由速度决定的周期性运动。

车架和车手上的散射体运动

车架和车手上的散射体相对于自行车固定,并以自我速度运动

其中,v 是自行车手的速度,由 Speed 属性指定;H 是航向,由 InitialHeading 属性指定。

该图显示了散射体在自行车车架和骑手上的位置。

踏板上的散射体运动

踏板上的散射体会随着骑手移动,但也可以以 Rped 为半径围绕曲柄主轴旋转。根据自行车是滑行(自由转动)还是不滑行,踏板有两种可能的运动方式:

  • 当自行车滑行时,踏板不绕曲柄主轴旋转,踏板散射体的速度等于骑手的速度。它们相对于骑手的位置是固定的。通过将 Coast 属性设置为 true 或将 move 对象函数的 coast 参数设置为 true,即可开启滑行。踏板的速度为:
  • 当自行车不滑行时,骑行者在踩踏板。踏板的角速度与车轮角速度的关系是:

    其中 G 是齿轮传动比属性定义的齿轮传动比。踏板散射体的速度等于踏板转速乘以踏板到曲柄主轴的距离。这一关系的矢量形式为

    踏板相对于骑手的速度为

    通过将 Coast 属性设置为 false 或将移动对象函数的 coast 参数设置为 false,可以关闭平移。

该图显示了踏板散射体的位置。

骑手腿上散射器的运动

骑手上下肢上的散射器随自行车运动,并增加了周期性运动。根据自行车滑行与否,腿部有两种可能的运动:

  • 当自行车滑行时,腿部不随自行车运动,散射体随骑手的速度运动。通过将 Coast 属性设置为 true 或将 move 对象函数的 coast 参数设置为 true,即可开启滑行;

  • d当自行车不滑行时,上肢和下肢做往复运动。上肢部分围绕骑手的臀部旋转。脚与踏板相连,并随踏板旋转。膝盖连接小腿和上肢。骑手的脚和臀部位置决定了膝盖的位置和腿上散射器的运动。

    通过将 Coast 属性设置为 false 或将移动对象函数的 Coast 参数设置为 false,可以关闭滑行。

本图显示了骑手上肢和小腿上散射体的位置。

散射体在自行车轮上的运动

散射体位于车轮的辐条和轮辋上,围绕轮轴旋转,与轮轴的距离 rspk 各不相同。散射体在自行车参考系中的速度为

轮辐或轮缘散射体的绝对速度为

该图显示了散射体在轮辋和轮辐上的位置。

RCS - 累积雷达截面
0(默认) | 标量

散射体的雷达截面 (RCS) 值通常取决于反射辐射的入射角度。backscatterBicyclist 对象使用简化的 RCS 模型:单个散射体的 RCS 图样等于总散射体图样除以散射体数量。RCS 值是根据方位角和仰角入射角的所有散射体的平均 RCS 模式评估值计算得出的。因此,所有散射体的 RCS 值都是相同的。您可以使用 backscatterBicyclist 对象的 RCSPattern 属性指定 RCS 模式,也可以使用默认值。