文章目录
无线电探测及测距(Radio Detection and Ranging), 发射电磁波并接收目标反射的回波信号,通过对比发射信号与回收信号,获取目标的位置、速度等信息。
雷达的分类
• 所发射电磁波的频段,决定了雷达的基本性能特点
• 超视距雷达、微波雷达、毫米波雷达、激光雷达、…

按照波长和用途分类
按照波形分类
◼ 调制:将调制信号(待传输信息)混合到载波信号(起到载运作
用的信号)的过程,可分为调频,调幅,调相。
◼ 解调:相反的过程,即从混合信号中恢复出待传输信息。
◼ 带宽:调制信号频谱的宽度,带宽高有利于传输更多数据。


| 频率 | 24GHz | 77GHz |
|---|---|---|
| 探测范围 | 探测距离短,探测角度(FOV)大 | 探测距离长,探测角度小 |
| 频段限制 | 24GHz频段因与其他无线电设备共享,必须限制发射功率 | 独占频段 |
| 带宽 | 小于1GHz | 可达4GHz |
| 优势 | 在中短距测距有明显优势;探测范围FOV更大 | 波长更短波束更窄;识别精度高且穿透力更强;带宽更大可兼顾远中近不同场景 |
| 代表产品 | 大陆 ARS208,Hella 24GHz角雷达 | 大陆 ARS408,BOSCH LRR4 |
在车载毫米波雷达中,目前主要有三种调制方案:调频连续波(Frequency
Modulated Continuous Wave, FMCW),频移键控(Frequency Shift Keying, FSK)以及相移键控(Phase Shift Keying, PSK)。
主流车载毫米波雷达所采用的的调制信号为调频连续波FMCW。
其基本原理是在发射端发射一个频率随时间变化的信号,经目标反射后被接收机接收,通过反射信号和接收信号之间的混频,得出两个信号的频率差,随后通过电磁波传播公式和多普勒效应公式求出目标距离和速度.
⚫ 测距测速是通过分析发射和接收的调频连续之间的区别来实现
⚫ 测量角度是通过计算不同天线单元之间的延时差来计算

这里首先分析
0
<
t
<
T
/
2
0<t<T/2
0<t<T/2 时收发信号的关系。在调频连续波雷达中,本振信号的频率在半个周期内是随时间成线性关系变化的,即
f
L
O
(
t
)
=
f
0
+
k
t
(
0
<
t
<
T
2
)
{f_{LO}}(t) = {f_0} + kt{\rm{ }}(0 < t < \frac{T}{2})
fLO(t)=f0+kt(0<t<2T) 其中
f
0
f_0
f0 是初始时刻的频率,
k
k
k 是频率随时间变化的斜率。因为频率是相位关于时间
t
t
t 的导数,因此相位可以表示为频率关于时间
t
t
t 的积分,即
ϕ
(
t
)
=
2
π
∫
f
(
t
)
d
t
=
π
k
t
2
+
2
π
f
0
t
+
ϕ
0
\phi (t) = 2\pi \int {f(t)dt = \pi k{t^2} + 2\pi {f_0}t + {\phi _0}}
ϕ(t)=2π∫f(t)dt=πkt2+2πf0t+ϕ0 其中
ϕ
0
\phi _0
ϕ0 是初始相位,因此本振信号关于时间的表达式可以写成
V
L
O
(
t
)
=
V
1
cos
(
π
k
t
2
+
2
π
f
0
t
+
ϕ
0
)
{V_{LO}}(t) = {V_1}\cos (\pi k{t^2} + 2\pi {f_0}t + {\phi _0})
VLO(t)=V1cos(πkt2+2πf0t+ϕ0) 其中
V
1
V_1
V1 是本振信号的幅度,由于该本振信号的频率是随时间呈连续周期性变化的,所以称之为调频连续波,本振信号经过功率放大器(Power Amplifier, PA)放大后,由天线发射到自由空间中,这里把 PA 和天线的总增益记为
G
1
G_1
G1,则发射信号为
V
T
X
(
t
)
=
G
1
V
1
cos
(
π
k
t
2
+
2
π
f
0
t
+
ϕ
0
)
{V_{TX}}(t) = {G_1}{V_1}\cos (\pi k{t^2} + 2\pi {f_0}t + {\phi _0})
VTX(t)=G1V1cos(πkt2+2πf0t+ϕ0) 该信号经过空气传播到目标表面,被目标反射,最后由接收机接收,信号往返的传播时间为
τ
τ
τ,若雷达和目标的距离为
r
(
t
)
r(t)
r(t),则
τ
=
2
r
(
t
)
c
=
2
(
r
0
+
v
t
)
c
\tau = \frac{{2r(t)}}{c} = \frac{{2({r_0} + vt)}}{c}
τ=c2r(t)=c2(r0+vt) 其中
c
c
c 为电磁波在空气中的传播速度,
r
0
r_0
r0 是初始距离,
v
v
v 为雷达和目标间的相对速度。
电磁波在空气中传播和被目标反射的过程也会带来一定损耗,损耗系数记作
α
1
α_1
α1,则接收信号可以表示为
V
R
X
(
t
)
=
α
1
G
1
V
1
cos
(
π
k
(
t
−
τ
)
2
+
2
π
f
0
(
t
−
τ
)
+
ϕ
0
)
{V_{RX}}(t) = {\alpha _1}{G_1}{V_1}\cos (\pi k{(t - \tau )^2} + 2\pi {f_0}(t - \tau ) + {\phi _0})
VRX(t)=α1G1V1cos(πk(t−τ)2+2πf0(t−τ)+ϕ0) 这里再介绍以下混频的概念:
混频:输出信号频率等于两输入信号频率之和、差或其他组合的电路。
常用方法:
cos
α
⋅
cos
β
=
[
cos
(
α
+
β
)
+
cos
(
α
−
β
)
]
/
2
\cos \alpha \cdot \cos \beta = [\cos (\alpha + \beta ) + \cos (\alpha - \beta )]/2
cosα⋅cosβ=[cos(α+β)+cos(α−β)]/2
接收信号经过低噪声放大器(Low Noise Amplifier, LNA)放大后,与本振信号进行混频。混频后的信号包含了高频分量和低频分量,将该信号通过一个低通滤波器可得(假设通带内的增益为单位增益):
V
I
F
(
t
)
=
α
1
G
1
G
2
V
1
2
cos
(
2
π
k
τ
t
+
2
π
f
0
τ
−
π
k
τ
2
)
{V_{IF}}(t) = {\alpha _1}{G_1}{G_2}{V_1}^2\cos (2\pi k\tau t + 2\pi {f_0}\tau - \pi k{\tau ^2})
VIF(t)=α1G1G2V12cos(2πkτt+2πf0τ−πkτ2) 求导,即可求出中频频率(混频后的信号经低通滤波后所得低频分量,又叫中频频率
f
𝐼
𝐹
f_{𝐼𝐹}
fIF(intermediate frequency)为,是RX与TX之差。)
f
I
F
(
t
)
≈
2
k
r
0
c
+
2
f
0
v
c
{f_{IF}}(t) \approx \frac{{2k{r_0}}}{c} + \frac{{2{f_0}v}}{c}
fIF(t)≈c2kr0+c2f0v
只知道上式是无法求出速度和距离的,所以需要用到三角波的原理进行求解,三角波有两个斜率,一正一负,可以得到两个表达式,进而可以求解出距离
r
r
r和速度
v
v
v。三角波的周期为
T
T
T,最低频率、最高频率和中心频率分别为
f
a
、
f
b
、
f
c
f_a、f_b、f_c
fa、fb、fc,其带宽
B
=
f
b
−
f
a
B=f_b-f_a
B=fb−fa,三角波的斜率为
k
=
2
B
T
=
2
(
f
b
−
f
a
)
T
k = \frac{{2B}}{T} = \frac{{2({f_b} - {f_a})}}{T}
k=T2B=T2(fb−fa) 上升、下降区间的中频频率分别为
𝑓
1
𝑓_1
f1,
𝑓
2
𝑓_2
f2,斜率为
k
k
k, 光速为
c
c
c,变频后的结果如下
f
1
=
2
k
r
c
+
2
f
c
v
c
{f_1} = \frac{{2kr}}{c} + \frac{{2{f_c}v}}{c}
f1=c2kr+c2fcv
f
2
=
−
2
k
r
c
+
2
f
c
v
c
{f_2} = \frac{{ - 2kr}}{c} + \frac{{2{f_c}v}}{c}
f2=c−2kr+c2fcv 因此可以解出速度和距离
v
=
(
f
1
+
f
2
)
c
4
f
c
v = \frac{{({f_1} + {f_2})c}}{{4{f_c}}}
v=4fc(f1+f2)c
r
=
(
f
1
−
f
2
)
c
4
k
r = \frac{{({f_1} - {f_2})c}}{{4k}}
r=4k(f1−f2)c
一对收发机所采集到的信号是不具备角度信息的, 因此需要采用多路发射多路接收的架构,或者采用相控阵架构。
短波长和小天线孔径就很有必要了,
•短波长意味着波束更窄,能量更加集中;
•更小的孔径尺寸意味着系统上能集成更多的天线单元
这些都有利于提高角分辨率。
⚫ 天线向外发射毫米波,接收目标反射信号
⚫ 信号处理器完成回波信号处理
⚫ 算法芯片完成原始点云目标的进一步处理
⚫ CAN接口完成毫米波处理数据的发送以及配置信息的输入

毫米波雷达的天线接发系统
• PCB板实现MMIC(单片微波集成电路)
• 包括接收电路单元,负责发射与接收连续调频波
毫米波雷达的信号处理芯片
• 包含信号处理器和算法芯片
• 完成回波信号处理与目标感知结果的计算
传输层协议:网口UDP/IP协议,或者CAN接口
数据格式:按照CAN编码机制,确定雷达的输入配置信息与输出数据格式

常见参数:
测量性能 测距范围
距离/水平角/速度 分辨率 (可对两个物体进行区分的最小单位)
距离/水平角/速度 精度 (测量不确定性)
操作条件 雷达发射功率、传输能力、电源、功耗、操作温度

毫米波雷达具有全天侯适应性,是高级别自动驾驶实现必备的环境感知传感器.
77GHz及79GHz雷达是未来车载毫米波雷达的发展方向,国内正处于快速追赶时期
PS:此部分主要是为了简单理解FMCW雷达的工作原理,是对第一章内容的补充。
总结一下,FMCW雷达的工作流程:

对于一个脉冲信号

作用:将TX和RX的信号合并生成一个新的信号IF
TX发射信号:
x
1
=
sin
(
2
π
f
1
t
+
ϕ
1
)
{x_1} = \sin (2\pi {f_1}t + {\phi _1})
x1=sin(2πf1t+ϕ1)
RX接收信号:
x
2
=
sin
(
2
π
f
2
t
+
ϕ
2
)
{x_2} = \sin (2\pi {f_2}t + {\phi _2})
x2=sin(2πf2t+ϕ2)
中频信号IF:
x
o
u
t
=
sin
(
2
π
(
f
1
−
f
2
)
t
+
ϕ
1
−
ϕ
2
)
=
sin
(
2
π
Δ
f
t
+
Δ
ϕ
)
\begin{array}{c}{x_{out}} = \sin (2\pi ({f_1} - {f_2})t + {\phi _1} - {\phi _2})\\ = \sin (2\pi \Delta ft + \Delta \phi )\end{array}
xout=sin(2π(f1−f2)t+ϕ1−ϕ2)=sin(2πΔft+Δϕ)
对于单个静止目标,RX和TX脉冲 之间的时间差是固定为 τ τ τ。因此,频率差也是固定的,也就是说IF是一个频率恒定的单音信号。IF的 Δ f \Delta f Δf Δ ϕ \Delta \phi Δϕ用以估计速度和距离。
PS:此处估计为了简要分析,雷达与目标的相对速度为0.

RX和TX之间的时间差为
τ
=
2
r
c
\tau = \frac{{2r}}{c}
τ=c2r,
r
r
r为距离,
c
c
c为光速。由此可以推出
τ
=
2
r
c
⇒
r
=
Δ
f
⋅
c
2
S
\tau = \frac{{2r}}{c} \Rightarrow r = \frac{{\Delta f \cdot c}}{{2S}}
τ=c2r⇒r=2SΔf⋅c
从上式可以看出,最大探测距离 r r r受限于 Δ f \Delta f Δf的最大值, Δ f \Delta f Δf受限于以下两个因素:
最大探测距离主要受限于 F s F_s Fs,并且与 B B B成反比
距离分辨率是指雷达能区分两个不同目标的最小距离。傅里叶变换理论指出:观测时间窗口T,可以分辨间隔超过 1 / T 1/T 1/T Hz的频率分量。因此,两个目标反射信号频率差的差值需要满足 ∣ Δ f 1 − Δ f 2 ∣ > 1 T c \left| {\Delta {f_1} - \Delta {f_2}} \right| > \frac{1}{{{T_c}}} ∣Δf1−Δf2∣>Tc1根据测距公式: ∣ Δ f 1 − Δ f 2 ∣ = 2 S Δ r c \left| {\Delta {f_1} - \Delta {f_2}} \right| = \frac{{2S\Delta r}}{c} ∣Δf1−Δf2∣=c2SΔr可以得到最小分辨距离 Δ r > c 2 S T c = c 2 B \Delta r > \frac{c}{{2S{T_c}}} = \frac{c}{{2B}} Δr>2STcc=2Bc因此,从式子中我们可以得到提高分辨率的方法:提高带宽 B B B,延长chirp信号。
FMCW雷达会发射两个间隔
T
c
T_c
Tc的线性调频脉冲(两个Chirp) ,相应的IF信号为:
在这里有两个近似条件:
相位计算公式:
Δ
ϕ
=
2
π
f
τ
=
2
π
c
τ
λ
=
4
π
r
λ
\Delta \phi = 2\pi f\tau = \frac{{2\pi c\tau }}{\lambda } = \frac{{4\pi r}}{\lambda }
Δϕ=2πfτ=λ2πcτ=λ4πr其中,
f
f
f是发射信号频率,
τ
τ
τ是时间延迟,
λ
λ
λ是发射信号波长,
r
r
r是目标距离。
相位变化为
Δ
ϕ
1
−
Δ
ϕ
2
=
4
π
(
r
1
−
r
2
)
λ
=
4
π
v
T
c
λ
\Delta {\phi _1} - \Delta {\phi _2} = \frac{{4\pi ({r_1} - {r_2})}}{\lambda } = \frac{{4\pi v{T_c}}}{\lambda }
Δϕ1−Δϕ2=λ4π(r1−r2)=λ4πvTc用
λ
=
4
×
1
0
−
3
,
v
=
10
m
/
s
\lambda = 4 \times {10^{ - 3}},v=10m/s
λ=4×10−3,v=10m/s估算,得到相位变化为
0.4
π
0.4\pi
0.4π,较大。
因此得到速度的估计公式:
v
=
(
Δ
ϕ
1
−
Δ
ϕ
2
)
λ
4
π
T
c
v = \frac{{(\Delta {\phi _1} - \Delta {\phi _2})\lambda }}{{4\pi {T_c}}}
v=4πTc(Δϕ1−Δϕ2)λ限制
∣
Δ
ϕ
1
−
Δ
ϕ
2
∣
<
π
{\left| {\Delta {\phi _1} - \Delta {\phi _2}} \right| < \pi }
∣Δϕ1−Δϕ2∣<π时有效,则得到
v
<
λ
4
T
c
v < \frac{\lambda }{{4{T_c}}}
v<4Tcλ

发射一组M个等间隔线性调频脉冲(M个Chirp),

对N这个维度进行FFT处理(距离FFT) ,得到M个频谱。
对M这个维度进行FFT处理(速度FFT) ,可以分离多个相位分量。

速度分辨率:雷达能区分两个不同目标的最小速度差。
傅里叶变换理论指出:两个离散频率
ω
1
\omega_1
ω1和
ω
2
\omega_2
ω2在满足
∇
ω
=
ω
1
−
ω
2
>
2
π
/
M
\nabla \omega = {\omega _1} - {\omega _2} > 2\pi /M
∇ω=ω1−ω2>2π/M时,是可以分辨的。
∇
ϕ
1
−
∇
ϕ
2
=
4
π
T
c
λ
(
v
1
−
v
2
)
>
2
π
/
M
\nabla {\phi _1} - \nabla {\phi _2} = \frac{{4\pi {T_c}}}{\lambda }({v_1} - {v_2}) > 2\pi /M
∇ϕ1−∇ϕ2=λ4πTc(v1−v2)>2π/M
(
v
1
−
v
2
)
>
λ
2
T
c
M
=
λ
2
T
f
({v_1} - {v_2}) > \frac{\lambda }{{2{T_c}M}} = \frac{\lambda }{{2{T_f}}}
(v1−v2)>2TcMλ=2Tfλ
T
f
T_f
Tf为一帧的时间
提高速度分辨率的方法:提高帧时间,Chirp时 间固定的话等价于增加Chirp个数。

本人所有文章仅作为自己的学习记录,若有侵权,联系立删。本系列文章主要参考了清华大学、北京理工大学、哈尔滨工业大学、深蓝学院、百度Apollo等相关课程。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?
文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3
我不确定如何为我的搜索功能添加自动完成表单。"get"do%>nil%>我有一个具有自定义操作的Controllerdefquery@users=Search.user(params[:query])@article=Search.article(params[:query])end模型如下:defself.user(search)ifsearchUser.find(:all,:conditions=>['first_nameLIKE?',"%#{search}%"])elseUser.find(:all)endenddefself.article(search)ifsearchArt
我对自动测试的工作方式的印象(基于cucumbergithubwiki和其他在线内容)是它应该重新运行红色示例,直到它们通过。我的问题是它会重新运行规范文件中找到失败示例的所有示例,包括通过的示例。我不想浪费时间在修复失败示例的同时重新运行通过的示例。是否可以配置自动测试以便仅运行失败的示例? 最佳答案 您需要rspec-retrygem。以下是文档中有关如何实现它的一些示例:将它应用到覆盖整个测试套件的configureblock中...RSpec.configuredo|config|config.verbose_retry=t
代码:threads=[]Thread.abort_on_exception=truebegin#throwexceptionsinthreadssowecanseethemthreadseputs"EXCEPTION:#{e.inspect}"puts"MESSAGE:#{e.message}"end崩溃:.rvm/gems/ruby-2.1.3@req/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:478:inload_missing_constant':自动加载常量MyClass时检测到循环依赖稍加研究后,
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion我希望能够将模板化的YARD文档样式注释插入到我现有的Rails遗留应用程序中。目前它的评论很少。我想要具有指定参数的类header和方法header(通过从我假定的方法签名中提取)和返回值的占位符。在PHP代码中,我有一些工具可以检查代码并在适当的位置创建插入到代码中的文档header注释。在带有Ducktyping等的Ruby中,我确信诸如@params等类型之类