# 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 米/秒的速度沿
初始化自行车手、波形和传播通道对象
初始化 backscatterBicyclist、phased.LinearFMWaveform 和 phased.FreeSpace 对象。假设采样频率为 300 MHz。自行车手的初始位置位于
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 模式,也可以使用默认值。