快时间域 (Range FFT) 与 慢时间域 (Doppler FFT) 深度详解
目录
前言
在现代雷达系统(无论是脉冲体制还是FMCW体制)中,普遍会进行两次关键的快速傅里叶变换 (FFT) 处理:
- 快时间域 (Fast Time) 的 Range FFT:用于提取目标的距离信息;
- 慢时间域 (Slow Time) 的 Doppler FFT:用于提取目标的速度(多普勒频移)信息。
这两个步骤是雷达信号处理中十分重要的环节。我们将用尽量通俗的方式讲解它们各自的含义、数学原理、处理细节以及如何结合得到雷达的距离-速度分布(Range-Doppler Map)。
雷达信号模型与基本概念
-
脉冲/Chirp:
- 在脉冲多普勒雷达中,每次发射一个脉冲,脉冲之间的间隔称为脉冲重复周期 T PRI T_{\text{PRI}} TPRI;
- 在FMCW雷达中,每次发射一个线性调频的 Chirp 波形,chirp 之间的间隔称为帧或脉冲重复周期 (取决于具体系统设置)。
-
快时间 (Fast Time):
指的是一次脉冲或一次Chirp发射-接收周期内,对回波信号的采样序列。采样间隔通常较短,对应高采样率,体现了与距离相关的信息。 -
慢时间 (Slow Time):
指的是多个脉冲/Chirp 之间的采样序列。通常其采样率远小于快时间采样率(因为脉冲重复频率 PRF 或 Chirp 重复频率 CRF 通常低于快时间采样率),体现了与目标运动(多普勒频移)相关的信息。 -
多普勒频移:
当目标相对雷达有径向速度 v v v 时,返回的回波信号频率会产生偏移 Δ f \Delta f Δf。对于脉冲多普勒雷达,偏移量与PRF、脉冲序列的相位累积有关;对于FMCW雷达,除了快时间域的差频外,还会在慢时间域体现多普勒调制。
快时间域 (Range FFT)
快时间域概述
- 采样对象:一个脉冲(或一个Chirp)内的中频信号。
- 主要目的:获取目标的距离信息。
- 处理方式:对一次脉冲/Chirp接收段进行FFT,即 Range FFT。
对于FMCW雷达,通常一次Chirp采样下来的信号长度为
N
N
N,我们对这段长度为
N
N
N 的快时间信号做 FFT,即得到距离向的分布(因为 FMCW 会将目标距离映射为差频或距离频率)。
对于脉冲多普勒雷达,如果发送脉冲带宽较宽,则也可以通过在脉冲内部对中频信号进行高速采样,做FFT得到距离像。
数学推导
假设对一次脉冲/Chirp采样得到的离散信号为
x
[
n
]
x[n]
x[n],其中
n
=
0
,
1
,
…
,
N
−
1
n = 0, 1, \dots, N-1
n=0,1,…,N−1。对于FMCW,可理解为混频并低通滤波后的基带信号。则
X
[
k
]
=
∑
n
=
0
N
−
1
x
[
n
]
e
−
j
2
π
N
k
n
,
k
=
0
,
1
,
…
,
N
−
1.
X[k] = \sum_{n=0}^{N-1} x[n] \, e^{-j \frac{2\pi}{N} k n}, \quad k = 0, 1, \dots, N-1.
X[k]=n=0∑N−1x[n]e−jN2πkn,k=0,1,…,N−1.
- k k k 对应频域的索引,映射到某个距离单元 (Range Bin)。
- 若雷达采样率为
f
s
f_s
fs,Chirp斜率为
k
chirp
(
H
z
/
s
)
k_{\text{chirp}} \ (\mathrm{Hz/s})
kchirp (Hz/s),则每个频率点对应的距离可近似表示为
R k ≈ c 2 k chirp ( k ⋅ f s N ) , R_k \approx \frac{c}{2k_{\text{chirp}}} \left(\frac{k \cdot f_s}{N}\right), Rk≈2kchirpc(Nk⋅fs),
其中 c c c 为光速。或用更直接的公式 R = c f IF 2 k chirp R = \frac{c \, f_{\text{IF}}}{2 k_{\text{chirp}}} R=2kchirpcfIF 来表示。
对于脉冲多普勒雷达(非线性调频),在快时间上的FFT则与脉冲带宽相关:
Δ
R
≈
c
2
B
,
\Delta R \approx \frac{c}{2 B},
ΔR≈2Bc,
其中
B
B
B 为脉冲带宽。FFT 后各点映射到不同的距离单元。
常见处理细节
- 窗函数 (Windowing):在做FFT前,为减小旁瓣,对快时间信号可乘以窗函数(如Hanning/Hamming)。
- 零填充 (Zero Padding):可将信号长度扩大到更高阶的2次幂尺寸,使得FFT计算更高效并在显示上更光滑。
- 频谱搬移 (FFT Shift):有时为了方便观察,将结果做fftshift,把零频点移到中间。
慢时间域 (Doppler FFT)
慢时间域概述
- 采样对象:多个脉冲或多个Chirp 之间的回波序列。
- 主要目的:获取目标速度信息(多普勒频移)。
- 处理方式:对慢时间序列做FFT,即 Doppler FFT。
对于脉冲多普勒雷达:
- 在每个脉冲回波中先做Range FFT,得到一组距离单元;
- 对同一距离单元,随时间(脉冲号)累积形成一个长度为 P P P 的序列;
- 然后对这 P P P 个脉冲做FFT,就得到该距离单元上的多普勒频谱。
对于FMCW雷达:
- 通常一帧包含多个Chirp (每帧有 P P P个Chirp),对每个Chirp先做Range FFT;
- 然后在慢时间 (Chirp 号) 上对同一个Range Bin 的幅度或复数信号做FFT,得到Doppler信息。
数学推导
设慢时间域的采样序列为
x
p
x_p
xp,
p
=
0
,
1
,
…
,
P
−
1
p = 0, 1, \dots, P-1
p=0,1,…,P−1,其中
P
P
P 为脉冲或Chirp数量。做 FFT:
X
[
m
]
=
∑
p
=
0
P
−
1
x
[
p
]
e
−
j
2
π
P
m
p
,
m
=
0
,
1
,
…
,
P
−
1.
X[m] = \sum_{p=0}^{P-1} x[p] \, e^{-j \frac{2\pi}{P} m p}, \quad m = 0, 1, \dots, P-1.
X[m]=p=0∑P−1x[p]e−jP2πmp,m=0,1,…,P−1.
- 若脉冲重复频率 (PRF) 为
F
PRF
F_{\text{PRF}}
FPRF,则索引
m
m
m 对应的多普勒频率为
f m = m F PRF P . f_m = \frac{m \, F_{\text{PRF}}}{P}. fm=PmFPRF. - 在脉冲多普勒雷达中,若多普勒频率为
f
D
f_D
fD,则目标径向速度
v
v
v 与
f
D
f_D
fD 的关系为
v = λ f D 2 = c f D 2 f c , v = \frac{\lambda \, f_D}{2} = \frac{c \, f_D}{2 f_c}, v=2λfD=2fccfD,
其中 f c f_c fc 为载频, λ = c / f c \lambda = c / f_c λ=c/fc。
速度模糊与分辨率
- 最大不模糊速度 (Unambiguous Velocity):
v max = λ F PRF 4 = c F PRF 4 f c . v_{\max} = \frac{\lambda \, F_{\text{PRF}}}{4} = \frac{c\, F_{\text{PRF}}}{4f_c}. vmax=4λFPRF=4fccFPRF.
若目标速度超过此值,会出现速度模糊(混叠)。 - 速度分辨率:
Δ v ≈ λ 2 T obs = c 2 f c T obs , \Delta v \approx \frac{\lambda}{2 T_{\text{obs}}} = \frac{c}{2 f_c T_{\text{obs}}}, Δv≈2Tobsλ=2fcTobsc,
其中 T obs = P F PRF T_{\text{obs}} = \frac{P}{F_{\text{PRF}}} Tobs=FPRFP 为观察时间。观察时间越长,多普勒分辨率越高。
常见处理细节
- 脉冲对消 (Pulse Pair Processing):在脉冲多普勒雷达中,为简化计算,也会根据相邻脉冲的相位差来估计多普勒频率。
- 窗函数 (Windowing):同样在慢时间维度可以乘以窗函数,减少频谱泄露。
- 相位补偿:在某些系统里,还需要考虑平台运动、相位校准等。
Range-Doppler 成像 (2D FFT)
很多雷达系统会在同一帧内对快时间域和慢时间域分别做 FFT,形成一个二维矩阵称作Range-Doppler Map。
- 第一维 (行):快时间FFT (Range FFT),对应距离;
- 第二维 (列):慢时间FFT (Doppler FFT),对应速度。
从而我们可以在距离-速度平面 (Range-Doppler Plane) 上对目标进行检测(比如使用 CFAR)并识别运动信息。
总结
- 快时间域 (Range FFT) 用来获取目标的距离信息,对应一次脉冲/Chirp内的高采样率信号;
- 慢时间域 (Doppler FFT) 用来获取目标的速度信息,对应多次脉冲/Chirp之间的序列;
- 两次 FFT 结合即可得到 Range-Doppler 二维分布图,为后续目标检测、跟踪、识别提供依据;
- 雷达系统中还会涉及到更多信号处理细节,如脉冲压缩、MTI滤波、STAP等,但核心思想依然是先在时间上(距离方向)分辨,再在频率上(速度方向)分辨。
代码
import numpy as np
import matplotlib.pyplot as plt
def range_fft(fast_time_signal):
"""
对单个脉冲/Chirp的快时间信号执行Range FFT
fast_time_signal: 1D numpy array
return: 1D numpy array (Range Spectrum)
"""
N = len(fast_time_signal)
# 可加入窗函数,如:
# window = np.hanning(N)
# fast_time_signal = fast_time_signal * window
fft_result = np.fft.fft(fast_time_signal, N)
range_spectrum = np.fft.fftshift(fft_result)
return range_spectrum
def doppler_fft(range_bin_signals):
"""
对同一距离Bin在慢时间维度的采样做Doppler FFT
range_bin_signals: 1D numpy array, 长度P (脉冲或Chirp数)
return: 1D numpy array (Doppler Spectrum)
"""
P = len(range_bin_signals)
# 可加入窗函数,如:
# window = np.hanning(P)
# range_bin_signals = range_bin_signals * window
fft_result = np.fft.fft(range_bin_signals, P)
doppler_spectrum = np.fft.fftshift(fft_result)
return doppler_spectrum
# 演示:
# 1) 快时间信号 (Range FFT)
N = 1024
t_fast = np.arange(N)
# 假设目标对应一个模拟频率f0=20
fast_signal = np.cos(2*np.pi*20*(t_fast/N))
range_spectrum = range_fft(fast_signal)
# 2) 慢时间信号 (Doppler FFT)
P = 64
t_slow = np.arange(P)
# 假设多普勒频率 fd=5
slow_signal = np.exp(1j*2*np.pi*5*(t_slow/P))
doppler_spectrum = doppler_fft(slow_signal)
# 画图:
plt.figure(figsize=(12,5))
plt.subplot(1,2,1)
plt.title('Range FFT (Magnitude)')
plt.plot(np.abs(range_spectrum))
plt.xlabel('Range Bin')
plt.ylabel('Amplitude')
plt.subplot(1,2,2)
plt.title('Doppler FFT (Magnitude)')
plt.plot(np.abs(doppler_spectrum))
plt.xlabel('Doppler Bin')
plt.ylabel('Amplitude')
plt.tight_layout()
plt.show()