线性调频连续波雷达的信号处理
一、FMCW雷达基本原理
核心思想:发射一个频率随时间线性变化的连续波信号,通过比较接收回波信号与当前发射信号的瞬时频率差,来提取目标的距离和速度信息。
关键参数:
B:扫频带宽 (Hz)Tc:一个调频周期 (Chirp周期) (s)fc:载波中心频率 (Hz)c:光速 (3e8 m/s)
二、信号模型与处理流程
1. 发射信号 (Tx)
发射信号是一个线性调频脉冲,其频率随时间线性增加。
S_t(t) = A_t * cos(2*pi * (f_c * t + (B/(2*T_c)) * t^2))
2. 接收信号 (Rx)
接收信号是发射信号的延时版本,延时 τ = 2R/c,其中 R 是目标距离。
S_r(t) = A_r * cos(2*pi * (f_c * (t-τ) + (B/(2*T_c)) * (t-τ)^2))
3. 中频信号 (IF Signal) / 差频信号 (Beat Signal)
将接收信号与发射信号进行混频(相乘)并通过低通滤波器,即可得到差频信号。
S_b(t) = S_t(t) * S_r(t) ≈ A_b * cos(2*pi * (f_b * t + ϕ))
其中,差频频率 f_b 是核心参数:
f_b = (B / T_c) * τ = (B / T_c) * (2R / c)
重要结论:差频频率 f_b 与目标距离 R 成正比。
4. 多目标与速度(多普勒效应)
如果目标有径向速度 v,会产生多普勒频移 f_d。
f_d = 2*v / λ,其中 λ = c / f_c 是波长。
此时的延时 τ 不再是常数。对于匀速目标,R(t) = R0 + v*t。
混频后得到的中频信号频率包含两项:
f_b = (2*B / (T_c * c)) * R0 (距离项)
+ (2 * f_c / c) * v (速度项,即多普勒频移)
对于单个Chirp,多普勒频移 f_d 相对于 f_b 非常小,很难直接区分。因此,需要通过多个Chirp(一个帧)来测量速度。
5. 信号处理流程(2D-FFT)
FMCW雷达最核心的信号处理方法是二维FFT。
-
距离维FFT (快时间维)
- 对单个Chirp内采样到的中频信号做FFT。
- 峰值的位置对应的频率
f_b,通过公式R = (c * T_c * f_b) / (2 * B)计算出目标的距离。 - 这形成了一个“距离门”。
-
速度维FFT (慢时间维)
- 在多个连续的Chirp中,同一个距离门上的信号相位会发生变化。这个变化是由于目标运动导致的小范围距离变化引起的。
- 对同一个距离门 across N个Chirp 的信号序列做第二次FFT(多普勒FFT)。
- 峰值的位置对应的频率
f_d,通过公式v = (λ * f_d) / 2计算出目标的速度。
最终输出:一个距离-速度谱(Range-Doppler Map, RDM),可以同时看到多个目标的距离和速度。
三、Matlab
%% 1. 设置雷达参数
c = 3e8; % 光速 (m/s)
fc = 77e9; % 中心频率 (Hz),例如汽车雷达77GHz
B = 200e6; % 带宽 (Hz)
Tc = 50e-6; % Chirp周期 (s)
lambda = c / fc; % 波长 (m)
%% 2. 设置目标参数
R0 = 100; % 初始距离 (m)
v = 30; % 径向速度 (m/s),朝向雷达为正
%% 3. 生成发射信号
t = linspace(0, Tc, 1024); % 一个Chirp内的快时间采样序列,假设采样1024点
f_t = fc + (B / Tc) * t; % 发射信号的瞬时频率
S_t = cos(2 * pi * (fc * t + (B / (2 * Tc)) * t.^2)); % 发射信号
%% 4. 计算延时并生成接收信号
tau = 2 * R0 / c; % 延时 (s),为简化模型,暂不考虑速度对延时的影响
S_r = cos(2 * pi * (fc * (t - tau) + (B / (2 * Tc)) * (t - tau).^2)); % 接收信号
%% 5. 生成中频信号 (混频 + 低通滤波)
S_mix = S_t .* S_r; % 混频
% 设计一个低通滤波器来滤除高频分量(2*fc)
% 这里简化处理,直接使用FFT/IFFT进行理想滤波
N = length(S_mix);
f = (-N/2:N/2-1) * (1/Tc) / N; % 频率轴
S_mix_f = fftshift(fft(S_mix));
% 创建一个低通滤波器掩膜(只保留 -B/2 到 B/2 的频率)
mask = (abs(f) < B/2);
S_if_f_filtered = S_mix_f .* mask';
S_if = ifft(ifftshift(S_if_f_filtered)); % 得到滤波后的中频时域信号
%% 6. 距离维FFT (计算目标距离)
% 对中频信号做FFT
N_fft = 2048; % FFT点数
S_if_fft = fft(S_if, N_fft);
S_if_fft_abs = abs(S_if_fft);
% 构造频率轴和距离轴
freq_axis = (0:N_fft-1) * (1/Tc) / N_fft; % 频率轴 (Hz)
range_axis = (c * Tc * freq_axis) / (2 * B); % 距离轴 (m)
% 找到峰值位置并计算距离
[~, idx] = max(S_if_fft_abs(1:N_fft/2)); % 只在正频率部分找
range_estimate = range_axis(idx);
fprintf('估计距离: %.2f m\n', range_estimate);
%% 7. 绘制结果
figure('Position', [100, 100, 1200, 800])
subplot(3, 2, 1)
plot(t*1e6, f_t/1e9);
xlabel('时间 (us)');
ylabel('频率 (GHz)');
title('发射Chirp的瞬时频率');
grid on;
subplot(3, 2, 2)
plot(t*1e6, S_t);
xlabel('时间 (us)');
ylabel('幅度');
title('发射信号 (时域)');
xlim([0, max(t)*1e6]);
grid on;
subplot(3, 2, 3)
plot(t*1e6, real(S_if)); % 显示中频信号的实部
xlabel('时间 (us)');
ylabel('幅度');
title('中频信号 (滤除高频后)');
grid on;
subplot(3, 2, 4)
plot(freq_axis/1e6, S_if_fft_abs);
xlabel('频率 (MHz)');
ylabel('幅度');
title('中频信号频谱 (距离FFT)');
xlim([0, max(freq_axis)/1e6]);
grid on;
subplot(3, 2, [5, 6])
plot(range_axis, S_if_fft_abs(1:N_fft));
xlabel('距离 (m)');
ylabel('幅度');
title('距离谱');
xlim([0, 200]); % 显示0-200米范围
grid on;
参考代码 仿真线性调频连续波雷达的信号处理 www.3dddown.com/cna/53516.html
总结
FMCW雷达的信号处理核心是:
- 混频:产生与目标距离成正比的中频差频信号。
- 距离维FFT:从单个Chirp中解析出目标的距离。
- 速度维FFT:从多个Chirp的相位变化中解析出目标的速度。
- 2D-FFT:最终生成距离-速度谱,实现对多目标的同时测距和测速。
浙公网安备 33010602011771号