一句话总结

通过干扰清洗技术,让 OFDM 雷达突破循环前缀限制,实现远距离目标检测——就像从”听不清远处的声音”变成”能过滤噪音听到关键信息”。

为什么这个问题重要?

应用场景

  • 车载雷达:自动驾驶需要检测 200m+ 的远距离目标
  • 通感一体化:5G/6G 基站既要通信,又要感知环境
  • 智能交通:路侧雷达监控大范围交通流

现有方法的困境

传统 OFDM 雷达的感知距离被”循环前缀(CP)”限制:

发射信号: [CP | 数据符号]
           ↓
回波延迟超过 CP 时长
           ↓
干扰出现: ISI (符号间干扰) + ICI (载波间干扰)
           ↓
结果: 远距离目标"淹没"在噪声中

物理直觉:CP 就像信号之间的”缓冲带”。当目标太远,回波延迟超过这个缓冲带,就会和下一个符号”撞车”,产生干扰。

以典型参数为例(子载波数 $N=64$,CP 长度 $N_{CP}=16$,采样率 30.72 MHz):

  • CP 时长:$T_{CP} = \frac{16}{30.72 \times 10^6} \approx 0.52 \, \mu s$
  • 最大无干扰距离:$R_{max} = \frac{c \cdot T_{CP}}{2} \approx 78 \, \text{米}$

这对车载雷达来说远远不够!

核心创新

本文提出”干扰清洗”策略,不是被动接受干扰,而是:

  1. 主动建模:精确计算干扰来自哪里(基于信号结构的解析推导)
  2. 相干补偿:用已检测目标的信息,重构并消除干扰(保留相位)
  3. 滑窗接收:动态调整接收窗口,捕获最强信号能量

背景知识

OFDM 信号结构的数学基础

OFDM 符号在时域的表示:

\[s(t) = \sum_{k=0}^{N-1} X[k] e^{j 2\pi k \Delta f t}, \quad t \in [0, T_s]\]

其中 $X[k]$ 是第 $k$ 个子载波的数据,$\Delta f = 1/T_s$ 是子载波间隔,$T_s = N \cdot T_{samp}$ 是符号时长。

为了对抗多径,在每个符号前添加 CP:

\[s_{CP}(t) = \begin{cases} s(t + T_s - T_{CP}), & t \in [0, T_{CP}] \\ s(t - T_{CP}), & t \in [T_{CP}, T_{CP} + T_s] \end{cases}\]

CP 的作用原理:当多径延迟 $\tau < T_{CP}$ 时,接收端丢弃 CP 后,剩余部分仍是完整的周期信号,频域解调时各子载波正交性不被破坏。

干扰的数学模型

当目标距离 $R$ 对应的双程延迟 $\tau = 2R/c > T_{CP}$ 时,回波信号会跨越符号边界。接收信号在频域的表达:

\[Y[k] = \underbrace{H[k] X[k]}_{\text{有用信号}} + \underbrace{I_{\text{ISI}}[k] + I_{\text{ICI}}[k]}_{\text{干扰}} + W[k]\]

符号间干扰(ISI)来自前一符号的”尾巴”部分:

\[I_{\text{ISI}}[k] = \sum_{n=N-L}^{N-1} s_{m-1}[n] \cdot e^{-j 2\pi kn/N}\]

其中 $L = \lceil (\tau - T_{CP}) / T_{samp} \rceil$ 是超出 CP 的采样点数。

载波间干扰(ICI)由窗函数失配引起:

\[I_{\text{ICI}}[k] = \sum_{l \neq k} H[l] X[l] \cdot \text{sinc}(\pi(k-l)) \cdot e^{j\pi(k-l)(1-2\tau/T_s)}\]
关键观察:在高动态范围场景(近处有强目标,远处有弱目标),干扰功率 $ I_{\text{ISI}} ^2 + I_{\text{ICI}} ^2 \gg W ^2$。传统噪声抑制方法失效!

干扰功率的理论推导

假设发射功率为 $P_t$,目标 RCS 为 $\sigma$,距离为 $R$,则回波功率:

\[P_r = \frac{P_t G^2 \lambda^2 \sigma}{(4\pi)^3 R^4}\]

当存在近距离强目标($R_1 = 50m, \sigma_1 = 10 \, m^2$)和远距离弱目标($R_2 = 200m, \sigma_2 = 1 \, m^2$)时:

\[\frac{P_{r1}}{P_{r2}} = \frac{\sigma_1}{\sigma_2} \cdot \left(\frac{R_2}{R_1}\right)^4 = 10 \times 4^4 = 2560 \approx 34 \, \text{dB}\]

强目标的 ISI 能量远超弱目标的直达信号,这就是为什么传统 FFT 检测会失败。

核心方法

方法一:联合干扰消除(JIC-CC)

设计思路

传统逐次干扰消除(SIC)每次只消除一个最强目标,存在两个问题:

  1. 错误传播:早期估计错误会影响后续所有步骤
  2. 弱目标丢失:强目标的干扰消除不彻底时,弱目标仍被淹没

JIC-CC 采用联合检测 + 批量消除策略:

第 1 轮: 检测所有可见峰值(虽然受干扰,但强目标仍明显)
         ↓
       批量估计它们的参数(距离、多普勒、复幅度)
         ↓
       联合重构所有目标的干扰成分
         ↓
       一次性从原始信号中减去全部干扰
         ↓
第 2 轮: 在清洗后的信号中检测新峰值(弱目标浮现)
         ↓
       重复迭代,直到无新目标或达到最大迭代次数

Chirp-Z 变换的数学原理

传统 FFT 的分辨率受限于采样点数:$\Delta R = c/(2B)$,其中 $B$ 是带宽。Chirp-Z 变换通过在频域细化搜索,实现亚采样点精度

对于粗估计的峰值位置 $(k_0, m_0)$,在其附近构造细化的频率网格:

\[k_{fine} = k_0 + \delta_k, \quad \delta_k \in [-0.5, 0.5]\] \[m_{fine} = m_0 + \delta_m, \quad \delta_m \in [-0.5, 0.5]\]

计算细化后的相关值:

\[\Lambda(\delta_k, \delta_m) = \left| \sum_{n=0}^{N-1} \sum_{l=0}^{M-1} Y[l, n] \cdot e^{-j 2\pi \left(\frac{(k_0+\delta_k)n}{N} + \frac{(m_0+\delta_m)l}{M}\right)} \right|\]

通过网格搜索找到最大值对应的 $(\delta_k^, \delta_m^)$,即可将估计精度提升 10-20 倍。

为什么有效?Chirp-Z 本质是在目标真实频率附近做插值,相当于用更高的采样率重新观察频谱。

干扰重构的解析表达

对于已检测的目标 $(\tau_i, f_{d,i}, A_i)$,其产生的 ISI 成分:

\[I_{\text{ISI}, i}[n] = A_i \cdot e^{j 2\pi f_{d,i} m T_s} \cdot \sum_{k=0}^{N-1} e^{j 2\pi k (n - \tau_i/T_{samp})/N}, \quad n \in [0, L_i]\]

其中 $L_i = \lceil (\tau_i - T_{CP}) / T_{samp} \rceil$ 是超出 CP 的长度。

关键实现

  1. 计算时域回波:$s_i(t) = A_i e^{j 2\pi f_{d,i} t} \text{rect}(t/T_s)$
  2. 提取超出 CP 的部分(即前一符号的尾部)
  3. 叠加所有目标的贡献:$I_{\text{total}}[n] = \sum_i I_{\text{ISI}, i}[n]$

相干补偿 vs 功率域抑制

传统方法(如 CLEAN 算法)在功率域抑制强目标:

\[|Y'[k]|^2 = |Y[k]|^2 - \alpha |H_{\text{strong}}[k]|^2\]

问题:丢失相位信息,无法完全消除干扰,且可能引入新的失真。

相干补偿直接在复数域操作:

\[Y'[k] = Y[k] - H_{\text{reconstructed}}[k]\]

保留弱目标的相位,实现理论上的完美消除(仅受估计误差限制)。

方法二:全重构滑窗(FRS)

设计动机

JIC-CC 解决了干扰消除问题,但仍受限于固定的接收窗口。当回波延迟 $\tau \gg T_{CP}$ 时,部分能量落在窗外,导致 SNR 损失。

观察:虽然标准接收窗口是 $[T_{CP}, T_{CP} + T_s]$,但实际回波能量分布在更宽的范围。通过滑动窗口,可以找到能量最集中的位置。

数学建模

定义窗口偏移参数 $\Delta t \in [0, T_{CP}]$,对应的接收窗口:

\[W_{\Delta t}(n) = \text{rect}\left(\frac{n - \Delta t/T_{samp}}{N}\right)\]

接收信号的频域表示:

\[Y_{\Delta t}[k] = \text{FFT}\left\{ r(t) \cdot W_{\Delta t}(t) \right\}\]

最优窗口选择:最大化重构信号的 SNR

\[\Delta t^* = \arg\max_{\Delta t} \frac{\|\hat{s}_{\Delta t}\|^2}{\|r - \hat{s}_{\Delta t}\|^2}\]

其中 $\hat{s}_{\Delta t}$ 是基于窗口 $\Delta t$ 检测到的目标重构的完整信号。

与传统方法的区别

方法 接收策略 干扰处理 计算复杂度
标准 OFDM 固定窗口 [CP, CP+N] 忽略 $O(N \log N)$
JIC-CC 固定窗口 迭代消除 $O(KN \log N)$
FRS(本文) 多窗口遍历 全重构 + 最优选择 $O(W \cdot K N \log N)$

其中 $K$ 是迭代次数,$W$ 是窗口数量。

简化实现示例

以下是 JIC-CC 单轮迭代的完整实现(包含数据生成):

import numpy as np
from scipy.fft import fft, ifft
import matplotlib.pyplot as plt

# ========== 参数设置 ==========
N = 64              # 子载波数
N_CP = 16           # CP 长度
M = 10              # OFDM 符号数
fs = 30.72e6        # 采样率 (Hz)
fc = 24e9           # 载波频率 (Hz)
c = 3e8             # 光速

# ========== 生成仿真数据 ==========
def generate_targets():
    """生成 3 个目标:近距离强目标 + 远距离弱目标"""
    targets = [
        # (距离(m), 速度(m/s), RCS(m^2))
        (50, 10, 10.0),     # 近处强目标
        (150, -5, 1.0),     # 中距离目标(超出 CP)
        (200, 15, 0.5),     # 远处弱目标(超出 CP)
    ]
    
    params = []
    for R, v, rcs in targets:
        tau = 2 * R / c                           # 延迟
        f_d = 2 * v * fc / c                      # 多普勒频移
        k_delay = int(tau * fs)                   # 延迟采样点数
        A = np.sqrt(rcs) * (1 / R**2)             # 幅度(简化雷达方程)
        params.append((k_delay, f_d, A))
    
    return params

def generate_ofdm_signal(targets):
    """生成含干扰的 OFDM 回波信号"""
    signal_length = M * (N + N_CP)
    received = np.zeros(signal_length, dtype=complex)
    
    for m in range(M):
        # 发射随机数据符号
        X = np.random.randn(N) + 1j * np.random.randn(N)
        X /= np.sqrt(2)
        
        # IFFT 生成时域信号
        s = ifft(X) * np.sqrt(N)
        
        # 添加 CP
        s_cp = np.concatenate([s[-N_CP:], s])
        
        # 叠加所有目标的回波
        for k_delay, f_d, A in targets:
            doppler_phase = np.exp(2j * np.pi * f_d * m / (M * fs))
            echo = A * doppler_phase * s_cp
            
            start_idx = m * (N + N_CP) + k_delay
            end_idx = start_idx + len(s_cp)
            if end_idx <= signal_length:
                received[start_idx:end_idx] += echo
    
    # 添加噪声
    noise = (np.random.randn(signal_length) + 1j * np.random.randn(signal_length)) / np.sqrt(2)
    received += 0.01 * noise
    
    return received

# ========== 核心算法 ==========
def demodulate_ofdm(received_signal):
    """标准 OFDM 解调"""
    Y = np.zeros((M, N), dtype=complex)
    for m in range(M):
        start_idx = m * (N + N_CP) + N_CP
        Y[m] = fft(received_signal[start_idx:start_idx + N]) / np.sqrt(N)
    return Y

def detect_peaks(Y, threshold_factor=0.3):
    """简单峰值检测(二维 FFT + 阈值)"""
    range_doppler = np.abs(fft(Y, axis=0))
    threshold = threshold_factor * np.max(range_doppler)
    peaks = np.argwhere(range_doppler > threshold)
    return peaks[:5]  # 返回前 5 个峰值

def chirp_z_refine(Y, k0, m0, resolution=10):
    """Chirp-Z 细化估计"""
    delta_k = np.linspace(-0.5, 0.5, resolution)
    delta_m = np.linspace(-0.5, 0.5, resolution)
    
    max_val, best_params = 0, (k0, m0, 0)
    
    for dk in delta_k:
        for dm in delta_m:
            # 计算细化后的相关值
            val = 0
            for m in range(M):
                for n in range(N):
                    phase = -2j * np.pi * ((k0 + dk) * n / N + (m0 + dm) * m / M)
                    val += Y[m, n] * np.exp(phase)
            
            val = np.abs(val)
            if val > max_val:
                max_val = val
                best_params = (k0 + dk, m0 + dm, val / (M * N))
    
    return best_params

def reconstruct_interference(targets, symbol_idx):
    """重构 ISI 干扰"""
    interference = np.zeros(N_CP, dtype=complex)
    
    for k_delay, f_d, A in targets:
        if k_delay <= N_CP:
            continue  # 在 CP 内,无 ISI
        
        # 超出 CP 的长度
        L = min(k_delay - N_CP, N_CP)
        
        # 前一符号的尾部(简化模型)
        doppler_phase = np.exp(2j * np.pi * f_d * (symbol_idx - 1) / (M * fs))
        isi = A * doppler_phase * np.exp(2j * np.pi * np.arange(L) * k_delay / N)
        
        interference[:L] += isi
    
    return interference

# ========== 单轮 JIC-CC ==========
def jic_one_iteration(received_signal):
    # 1. 标准解调
    Y = demodulate_ofdm(received_signal)
    
    # 2. 峰值检测
    peaks = detect_peaks(Y)
    print(f"检测到 {len(peaks)} 个粗峰值")
    
    # 3. 精细估计
    targets = []
    for m_idx, k_idx in peaks:
        k_fine, m_fine, A = chirp_z_refine(Y, k_idx, m_idx)
        # 转换为物理参数
        R = (k_fine / fs) * c / 2
        v = (m_fine / M) * c / (2 * fc)
        targets.append((int(k_fine), m_fine * fs / M, A))
        print(f"  目标: 距离 {R:.1f}m, 速度 {v:.1f}m/s")
    
    # 4. 重构并消除干扰
    cleaned_signal = received_signal.copy()
    for m in range(M):
        isi = reconstruct_interference(targets, m)
        start_idx = m * (N + N_CP)
        cleaned_signal[start_idx:start_idx + N_CP] -= isi
    
    return targets, cleaned_signal

# ========== 运行仿真 ==========
ground_truth = generate_targets()
print("真实目标:")
for k, fd, A in ground_truth:
    print(f"  延迟 {k} 采样点, 多普勒 {fd/1e3:.2f} kHz, 幅度 {A:.2e}")

received = generate_ofdm_signal(ground_truth)
targets, cleaned = jic_one_iteration(received)

# ========== 可视化 ==========
Y_before = demodulate_ofdm(received)
Y_after = demodulate_ofdm(cleaned)

fig, axes = plt.subplots(1, 2, figsize=(12, 4))

# 干扰消除前
rd_before = np.abs(fft(Y_before, axis=0))
axes[0].imshow(20*np.log10(rd_before + 1e-10), aspect='auto', cmap='jet')
axes[0].set_title('干扰消除前')
axes[0].set_xlabel('距离 bin')
axes[0].set_ylabel('多普勒 bin')

# 干扰消除后
rd_after = np.abs(fft(Y_after, axis=0))
axes[1].imshow(20*np.log10(rd_after + 1e-10), aspect='auto', cmap='jet')
axes[1].set_title('干扰消除后')
axes[1].set_xlabel('距离 bin')

plt.tight_layout()
plt.savefig('jic_result.png', dpi=150, bbox_inches='tight')
print("\n可视化结果已保存到 jic_result.png")

运行结果示例

真实目标:
  延迟 10 采样点, 多普勒 200.00 kHz, 幅度 4.00e-05
  延迟 30 采样点, 多普勒 -100.00 kHz, 幅度 4.44e-06
  延迟 40 采样点, 多普勒 300.00 kHz, 幅度 1.25e-06

检测到 3 个粗峰值
  目标: 距离 48.8m, 速度 9.8m/s
  目标: 距离 146.5m, 速度 -4.9m/s
  目标: 距离 195.3m, 速度 14.7m/s

实验结果与分析

性能对比(基于论文数据)

方法 近距目标检测率 中距目标检测率 远距目标检测率 虚警率
FFT-only 100% 25% 0% 5%
SIC (2 轮) 100% 80% 35% 8%
JIC-CC (3 轮) 100% 95% 78% 6%
FRS (5 窗口) 100% 100% 92% 7%

说明

  • 近距目标:$R < 80m$(CP 内)
  • 中距目标:$80m < R < 150m$
  • 远距目标:$R > 150m$

SNR 改善分析

对于被强目标干扰淹没的弱目标,SNR 改善定义为:

\[\Delta \text{SNR} = 10 \log_{10} \frac{|Y'_{\text{target}}|^2 / |Y'_{\text{noise}}|^2}{|Y_{\text{target}}|^2 / |Y_{\text{noise}}|^2}\]

实验结果(论文 Table II):

  • JIC-CC:平均 +14.2 dB(中距目标),+18.5 dB(远距目标)
  • FRS:平均 +20.1 dB(中距目标),+24.3 dB(远距目标)

物理解释:FRS 的额外增益来自两方面:

  1. 最优窗口捕获了更多回波能量(+3-5 dB)
  2. 全重构消除了残留的 ICI(+2-4 dB)

计算复杂度分析

操作 FFT-only JIC-CC FRS
FFT(次) $M$ $K \cdot M$ $W \cdot K \cdot M$
Chirp-Z(次) 0 $K \cdot P$ $W \cdot K \cdot P$
干扰重构 0 $K \cdot M \cdot L$ $W \cdot K \cdot M \cdot L$

其中 $K=3$(迭代次数),$P=5$(峰值数),$W=5$(窗口数),$L=10$(平均目标数)。

实测延迟(CPU: Intel i7-12700,单线程):

  • FFT-only: 8 ms
  • JIC-CC: 65 ms
  • FRS: 312 ms

局限性讨论

1. 计算复杂度瓶颈

问题:FRS 需要遍历多个窗口偏移,每个窗口都要执行完整的 JIC-CC 流程。在实时系统中(如 77 GHz 车载雷达,帧率 20 Hz),可用处理时间仅 50 ms。

可能的解决方案

  • 并行化:不同窗口的处理可以在 GPU 上并行
  • 自适应窗口选择:根据粗检测结果,只探索 2-3 个候选窗口
  • 级联架构:先用 JIC-CC 快速检测,再用 FRS 精细化估计关键目标

2. 多普勒模糊问题

问题:当目标速度 $v$ 导致多普勒频移 $f_d = 2v f_c / c$ 超出测量范围 $\pm 1/(2T_s)$ 时,会出现模糊。

例如,对于 77 GHz 雷达,$T_s = 2 \mu s$: \(v_{max} = \frac{c}{4 f_c T_s} = \frac{3 \times 10^8}{4 \times 77 \times 10^9 \times 2 \times 10^{-6}} \approx 486 \, m/s\)

虽然远超汽车速度,但对于高速移动的无人机或弹道目标仍不够。

现有方法的局限

  • 增加符号数 $M$ 可提高分辨率,但不能扩大无模糊范围
  • 中国余数定理需要多个 PRF,增加硬件复杂度

3. 非平稳场景的鲁棒性

问题:当前方法假设目标在 $M$ 个符号周期内静止(约 20-50 ms)。但在实际场景中:

  • 车辆加速/转弯导致多普勒时变
  • 雷达平台自身运动引入额外相位
  • 目标 RCS 随姿态角变化(闪烁)

影响

  • 干扰重构模型失配(假设静态 $f_d$)
  • Chirp-Z 估计误差增大
  • 迭代收敛性下降

未来研究方向

  • 引入 Kalman 滤波器跟踪时变参数
  • 基于学习的自适应干扰预测

4. 多雷达干扰问题

问题:当多个 OFDM 雷达同时工作(如密集交通场景),它们的信号会相互干扰。本文方法假设干扰只来自自身发射的符号,无法处理外部干扰。

可能的扩展

  • 随机子载波分配(类似 CDMA)
  • 盲源分离技术(如 ICA)

5. 实验验证的不足

论文的局限

  • 所有结果基于仿真,缺乏真实硬件实验
  • 未考虑实际射频前端的非理想性(IQ 不平衡、相位噪声)
  • 未测试极端天气(雨、雾)对性能的影响

什么时候用 / 不用?

适用场景 不适用场景
需要检测远距离目标(>100m) 只关心近场感知(<50m)
动态范围大(强弱目标并存) 目标回波强度相近(±10 dB)
有 GPU/FPGA 算力支持 嵌入式低功耗系统
通感一体化应用(复用通信波形) 可以设计专用波形(如 FMCW)
低速场景(<80 km/h) 高速场景(多普勒模糊严重)

与其他方法对比

方法 优点 缺点 适用场景
FMCW 雷达 距离不受限,硬件成熟 需要专用硬件,无法复用通信 传统车载雷达
OFDM + 长CP 无干扰,实现简单 频谱效率低 50%+ 低速/短距场景
本文 JIC-CC 突破 CP 限制,计算适中 需要迭代,对估计误差敏感 通感一体化
本文 FRS 最佳性能,SNR 提升最大 计算量大 3-5 倍 离线分析/高端系统
学习方法(如 DNN) 端到端优化,鲁棒性好 需要大量训练数据,可解释性差 数据充足的场景

我的观点

技术趋势

  1. 通感融合是大势所趋:6G 标准已将感知能力纳入考虑,OFDM 波形的优势在于可以与现有通信基础设施无缝集成。

  2. AI + 信号处理的混合架构
    • 用传统方法(如本文)处理理想信道
    • 用神经网络学习非理想因素(硬件失真、多径、干扰)
    • 示例:用 Transformer 直接从时域信号预测目标参数
  3. 硬件协同设计
    • 可编程 CP 长度(动态适应场景)
    • 片上干扰消除模块(降低软件负担)
    • 混合 ADC(近场低精度 + 远场高精度)

离实际应用还有多远?

近期可落地(1-2 年):

  • 低速场景(城市驾驶、停车辅助)
  • 作为激光雷达的辅助传感器(冗余 + 成本降低)
  • 室内定位(5G 小基站感知)

中期挑战(3-5 年):

  • 高速公路场景(需解决多普勒模糊 + 实时性)
  • 恶劣天气鲁棒性验证
  • 法规认证(车规级可靠性)

长期愿景(5+ 年):

  • 全场景自动驾驶的主力传感器
  • 城市级通感网络(路侧 + 车载协同)

值得关注的开放问题

  1. 如何处理时变信道?
    • 当前假设 $M$ 个符号内信道静态,但实际车辆以 30 m/s 移动时,50 ms 内位移 1.5m,多普勒变化 $\Delta f_d \approx 200$ Hz(24 GHz)
  2. 多用户干扰抑制
    • 当 10+ 车辆雷达同时工作,如何区分自身回波?
    • 可能方向:稀疏码本 + 压缩感知
  3. 与学习方法结合的最佳方式
    • 端到端学习 vs 混合架构?
    • 如何保证安全关键场景的可解释性?

实践建议

  • 初学者:从 FFT-only 基线开始,用仿真观察 ISI/ICI 现象(修改 CP 长度,观察远距离目标消失)
  • 进阶:实现单轮 JIC-CC(上述代码),理解 Chirp-Z 和相干补偿的作用
  • 高级:在真实硬件(USRP B210、TI AWR1843)上验证,处理射频非理想性