线性调频连续波雷达的信号处理

一、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。

  1. 距离维FFT (快时间维)

    • 单个Chirp内采样到的中频信号做FFT。
    • 峰值的位置对应的频率 f_b,通过公式 R = (c * T_c * f_b) / (2 * B) 计算出目标的距离。
    • 这形成了一个“距离门”。
  2. 速度维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雷达的信号处理核心是:

  1. 混频:产生与目标距离成正比的中频差频信号。
  2. 距离维FFT:从单个Chirp中解析出目标的距离。
  3. 速度维FFT:从多个Chirp的相位变化中解析出目标的速度。
  4. 2D-FFT:最终生成距离-速度谱,实现对多目标的同时测距和测速。
posted @ 2025-12-15 16:07  w199899899  阅读(17)  评论(0)    收藏  举报