[从零入门] FMCW雷达测距教程

从零入门级FMCW雷达测距教程,整合技术深度与教学递进性:

  • 本文的内容全是用ds整理过后的,除了引用框内(比如这段), 是我自己非加不可,不加浑身难受的大白话.
  • ds确实方便,从此很大程度上解决了我表达能力欠缺的问题.
  • 但是, ds有时候会胡言乱语,前后矛盾, 大部分我都是保留我确定" 正确 "的内容,还有部分我不确定的内容,还有一些我完全不知道是否正确的内容,所以如果发现有错,请立刻评论回复我 (*/ω\*)
    本教程只涉及浅显的通用知识,有些地方我会故意讲错(并非故意), 因为简单理解方便入门使用.同时免责声明,涉及都是公开内容,ds的胡言乱语.

参考博客:

参考论文

  • 刁攀. 24G调频连续波雷达收发前端的设计[D]. 四川:电子科技大学,2020.
  • 杨博. 车载防撞雷达线性调频源的研究与设计[D]. 西安电子科技大学,2011.

FMCW雷达测距原理与实现全解

适合读者:电子工程/雷达技术入门者 所需基础:模拟电路、信号与系统

目录


第1章 雷达测距基本原理

1.1 物理量转换的测量学本质

雷达测距的最终其实就是测频率, 类比温度计,压力计, 最终其实就是测形变量.

测量系统的核心在于物理量转换链的设计:

  • 温度测量范例
    温度变化 → 汞体积变化 → 毛细管长度变化(线性关系式: Δ L = α ⋅ Δ T ΔL=α·ΔT ΔL=αΔT
  • 压力测量原理
    压力荷载 → 弹性体形变 → 应变片阻值变化( Δ R / R = K ⋅ ε ΔR/R=K·ε ΔR/R=Kε

1.2 雷达测距的双程时延原理

雷达测距就是通过 电磁波 反射, 计算运动时间得到距离. 也就是蝙蝠探路!!! 夜魔侠扫描坏人!!!

基础公式推导
当发射信号到达目标经反射返回时: Δ t = 2 R c Δt = \frac{2R}{c} Δt=c2R
其中R为目标距离,c为光速(3×10^8 m/s)

关键实现路径
发射信号 → 目标反射 → 接收信号 → 时延测量 → 距离解算


1.3 FMCW雷达的频率映射机制

注意FMCW的思路, 是发射一个变动频率的信号, 在时域就是一个忽窄忽疏的正弦波, 在频域就是一个斜率和截距固定的一元一次直线.

线性调频连续波(FMCW) 特性:

  • 发射频率随时间线性变化: f T X ( t ) = f 0 + B T t f_{TX}(t)=f_0+\frac{B}{T}t fTX(t)=f0+TBt
  • 接收频率取决于放射距离: f R X ( t ) = f T X ( t + Δ t ) f_{RX}(t) = f_{TX}(t+Δt ) fRX(t)=fTX(t+Δt)
  • 差拍频率生成原理: f b = ∣ f T X − f R X ∣ = 2 B R c T f_b=|f_{TX}-f_{RX}|=\frac{2BR}{cT} fb=fTXfRX=cT2BR

其中B为调频带宽,T为调频周期 ,f0 为起始频率,fb 为差频频率,
在FMCW雷达系统中,差频频率(fb)和中频频率(IF frequency)本质上是同一个概念的不同表述


1.4 理想条件下的约束分析

注意,本文只讨论静止不动的发射端和反射物,简化模型,方便理解.

  1. 静止目标假设

    • 忽略多普勒频移影响
    • 实际系统需引入速度补偿算法
  2. 自由空间传播模型

    • 路径损耗
    • 未考虑多径效应与大气衰减

1.5 FMCW雷达工作原理示意图

我弄的图还是欠缺直观性, 从博客笔记借张图用一下: FMCW雷达原理
中频信号
实物示意图

以下是上述公式的示意图,可以看到静止目标时,发射和接收的差频频率只有交叉处会变化.中间调频过程是不变的. 如果时间差越大的话,差频频率就越大.

FMCW雷达工作原理示意图

import numpy as np
from scipy.integrate import cumtrapz
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
from matplotlib.patches import Rectangle, Circle
import matplotlib as mpl

# 全局字体和符号设置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题
mpl.rcParams['text.usetex'] = False           # 避免与中文冲突

# 参数设置
f0 = 77e9       # 起始频率 77GHz
B = 4e9         # 带宽 4GHz (77-81GHz)
T = 50e-6       # 调频周期 50μs
c = 3e8         # 光速
R = 150         # 目标距离 150米
delta_t = 2*R/c # 往返时间延迟

# 时间轴(增加采样点数) 
num_points = int(10 * B * 2*T)  # 按带宽的10倍采样
t = np.linspace(0, 2*T, num_points)  # 两个周期

# 1. 三角波频率调制(矢量化计算提高精度)
ramp_up = (t % T) < T/2
ramp_down = ~ramp_up
f_tx = np.zeros_like(t)
f_tx[ramp_up] = f0 + (B/(T/2)) * (t[ramp_up] % (T/2))
f_tx[ramp_down] = f0 + B - (B/(T/2)) * (t[ramp_down] % (T/2))

# 接收信号频率 (延迟delta_t)
t_delayed = t - delta_t
valid_rx = t_delayed >= 0  # 只处理已收到回波的情况
f_rx = np.full_like(t, f0)  # 初始化为f0

ramp_up_rx = (t_delayed[valid_rx] % T) < T/2
ramp_down_rx = ~ramp_up_rx
f_rx[valid_rx] = np.where(
    ramp_up_rx,
    f0 + (B/(T/2)) * (t_delayed[valid_rx] % (T/2)),
    f0 + B - (B/(T/2)) * (t_delayed[valid_rx] % (T/2))
)

# 差频信号
f_beat = np.abs(f_tx - f_rx)

# 2. 时域信号 
A_tx = 1.0       # 发射信号幅度
A_rx = 0.3       # 接收信号幅度(衰减)
phase_tx = 2*np.pi * cumtrapz(f_tx, t, initial=0)# 替换原有相位计算部分(使用cumtrapz提高精度)
phase_rx = 2*np.pi * cumtrapz(f_rx, t, initial=0)
tx_wave = A_tx * np.sin(phase_tx)
rx_wave = A_rx * np.sin(phase_rx)

# 3. 创建图形(调整布局)
plt.figure(figsize=(12, 14))
gs = GridSpec(5, 1, height_ratios=[1, 1, 1, 1.5, 0.2])  # 增加间距

# 3.1 频率调制图
ax1 = plt.subplot(gs[0])
ax1.plot(t*1e6, f_tx/1e9, 'b', label='发射频率 $f_{TX}(t)$')
ax1.plot(t*1e6, f_rx/1e9, 'r', label='接收频率 $f_{RX}(t)$', alpha=0.7)
ax1.set_ylabel('频率 (GHz)', labelpad=10)
ax1.set_title('FMCW三角波频率调制 (77-81GHz)', pad=15)
ax1.legend(loc='upper right')
ax1.grid(True, linestyle='--', alpha=0.6)

# 3.2 差频信号
ax2 = plt.subplot(gs[1], sharex=ax1)
ax2.plot(t*1e6, f_beat/1e6, 'g')
ax2.set_ylabel('差频 (MHz)', labelpad=10)
ax2.set_title('差频信号 $f_b = |f_{TX} - f_{RX}|$', pad=15)
ax2.grid(True, linestyle='--', alpha=0.6)

# 3.3 时域信号(确保负号显示)
ax3 = plt.subplot(gs[2], sharex=ax1)
ax3.plot(t*1e6, tx_wave, 'b', label='发射信号')
ax3.plot(t*1e6, rx_wave, 'r', label='接收信号', alpha=0.7)
ax3.set_xlabel('时间 (μs)', labelpad=10)
ax3.set_ylabel('振幅', labelpad=10)
ax3.set_title('时域信号波形', pad=15)
ax3.legend(loc='upper right')
ax3.grid(True, linestyle='--', alpha=0.6)

# 3.4 简易雷达测距示意图
ax4 = plt.subplot(gs[3])
ax4.set_title('简易雷达测距示意图', y=0.9, pad=0) # 设置标题(自动调整位置防重叠) # y参数控制垂直位置
ax4.set_aspect('equal')
fixed_xlim = 30  # 固定显示范围为30米
ax4.set_xlim(0, fixed_xlim)
ax4.set_ylim(-5, 5)
ax4.axis('off')

# 调整目标位置显示比例
display_ratio = min(1, fixed_xlim/R) if R != 0 else 1
display_R = R * display_ratio

# 绘制雷达和目标
radar = Circle((0, 0), 1, color='blue', alpha=0.7)
target = Rectangle((display_R-0.5, -0.5), 1, 1, color='red', alpha=0.7)
ax4.add_patch(radar)
ax4.add_patch(target)

# 绘制波束(适配显示比例)
wave_x = np.linspace(0, display_R, 100)
wave_y = 0.3 * np.sin(10*wave_x/display_ratio) * np.exp(-0.1*wave_x/display_ratio)
ax4.plot(wave_x, wave_y, 'b--', alpha=0.5)
ax4.plot(wave_x, -wave_y, 'b--', alpha=0.5)

# 标注(自动调整位置)
ax4.text(0, -2, '雷达发射端', ha='center')
target_label_x = min(display_R, fixed_xlim-3)  # 防止文字超出右边界
ax4.text(target_label_x, -2, f'目标 (距离={R}m)', ha='center')
arrow_length = min(display_R, fixed_xlim-1)
ax4.arrow(0, 1.5, arrow_length, 0, head_width=0.3, head_length=0.5, fc='k')
ax4.text(arrow_length/2, 2, f'延迟时间 Δt={delta_t*1e6:.2f}μs', ha='center')

# 主标题(调整位置避免重叠)
plt.suptitle('FMCW雷达工作原理示意图 (三角波调制)', y=0.98, fontsize=16)
plt.tight_layout(rect=[0, 0, 1, 0.96])  # 为suptitle留出空间
plt.subplots_adjust(hspace=0.5)  # 增加子图间距

plt.show()

不够直观, 借一张别人的图, :
【FMCW毫米波雷达设计 】 — FMCW波形
FMCW波形

上图中的时域信号波形不直观,换下面这部分代码调整一下参数, 可以直观理解. 信号从疏松到密集再到疏松的变量.
注意!! 这只是个大概示意,实际雷达运作不一定如此. 我猜的.
小知识: 雷达配置时, 采样点数可以类比为步进数~ 方便理解

时域信号波形

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import cumtrapz

# 参数配置
start_freq = 77e9  # 77 GHz
peak_freq = 81e9   # 81 GHz
end_freq = 77e9    # 77 GHz
total_cycles = 100  # 总周期数
sample_rate = 1000  # 采样点/周期

# 参数配置 方便观察
if True:    
    start_freq = 10  # 10 Hz 
    peak_freq = 100  # 100 Hz
    end_freq = 10    # 10 Hz
    total_cycles = 20  # 总周期数
    sample_rate = 1000  # 采样点/周期

# 频率变化函数(三角波型)
def frequency_profile(t, total_time):
    """频率从77GHz线性上升到81GHz再下降回77GHz"""
    half_time = total_time / 2
    return np.where(t < half_time, 
                   start_freq + (peak_freq - start_freq) * t / half_time,
                   peak_freq - (peak_freq - end_freq) * (t - half_time) / half_time)

# 计算总时间(通过数值积分确定)
def calculate_total_time():
    # 使用迭代法确定满足总周期数的时间长度
    time_guess = total_cycles / start_freq  # 初始猜测值
    for _ in range(10):  # 10次迭代足够收敛
        t_temp = np.linspace(0, time_guess, 10000)
        freq_temp = frequency_profile(t_temp, time_guess)
        phase = cumtrapz(freq_temp, t_temp, initial=0)
        actual_cycles = phase[-1] / (2*np.pi)
        time_guess *= total_cycles / actual_cycles
    return time_guess

total_time = calculate_total_time()
print(f"Total signal duration: {total_time*1e12:.2f} ps")  # 显示皮秒级时长

# 生成时间序列
t = np.linspace(0, total_time, int(sample_rate * total_cycles))
freq = frequency_profile(t, total_time)

# 数值积分计算相位(比cumsum更精确)
phase = 2 * np.pi * cumtrapz(freq, t, initial=0)
signal = np.sin(phase)

# 绘图
plt.figure(figsize=(15, 6))
plt.plot(t*1e12, signal)  # 时间轴显示为皮秒
plt.xlabel('Time (ps)', fontsize=12)
plt.ylabel('Amplitude', fontsize=12)
plt.title(f'77GHz → 81GHz → 77GHz Chirp Signal\n'
          f'Total Duration: {total_time*1e12:.2f} ps | '
          f'Actual Cycles: {phase[-1]/(2*np.pi):.2f}', fontsize=14)

# 添加频率标记
ax2 = plt.gca().twinx()
ax2.plot(t*1e12, freq/1e9, 'r--', alpha=0.5)
ax2.set_ylabel('Frequency (GHz)', color='r', fontsize=12)
ax2.tick_params(axis='y', colors='r')

plt.grid(True)
plt.tight_layout()

# 显示关键参数
print(f"Start frequency: {freq[0]/1e9:.2f} GHz")
print(f"Peak frequency: {np.max(freq)/1e9:.2f} GHz")
print(f"End frequency: {freq[-1]/1e9:.2f} GHz")
print(f"Actual cycles completed: {phase[-1]/(2*np.pi):.4f}")

plt.show()

1.6 毫米波雷达参数体系分析

(1) 典型工作频段配置

下面是一些 行业典型 (个人经验) 参数, 实际开发使用时根据 硬件 和 指标 需求决定.
注意!!! 有些资料会把 锯齿波三角波调频周期(T) 定义为两倍关系,具体看上下文,不要搞混了.
本文一律按 1个锯齿波(上升沿) 为 1个调频周期 T.

雷达类型基础频率范围调频带宽 (B)调频周期 (T)
24 GHz雷达24-24 GHz1 GHz≥5 ms
77 GHz雷达76-81 GHz4 GHz≥5 ms
120 GHz雷达119-124 GHz5 GHz≥5 ms

(2) 关键参数约束关系

个人简易理解: (我也不太懂 )
周期太短, 变化率太大, 时钟树分频不了. 对硬件要求大. 周期太长, 信号能量变弱, 抗干扰能力降低. 也不利于测量运动目标.
带宽越大分辨率越高, 但硬件不支持, 一般会采用允许最大值.

① 调频周期(T)设计考量

  • 短周期限制:基带滤波器阶数需求增加
  • 长周期弊端:运动目标相位模糊风险增加

② 调频带宽(B)优化
距离分辨率理论极限: Δ R = c 2 B ( c = 3 × 1 0 8 m / s ) \Delta R = \frac{c}{2B} \quad (c=3\times10^8 m/s) ΔR=2Bc(c=3×108m/s)
理论最大分辨率 Δ R \Delta R ΔR

  • 24 GHz: B=1 GHz →15 cm
  • 77 GHz: B=4 GHz → 3.75 cm
  • 120 GHz: B=5 GHz → 3 cm

硬件限制因素:

  • 天线效率:限定宽频带工作
  • 基带采样率:防频谱混叠

(3) 设计折衷策略

  • 带宽优先:在硬件允许范围内最大化B值
  • 周期优化:根据目标动态范围选择典型值
  • 功率补偿:硬件或软件放大器

第2章 FMCW系统架构设计

我弄的图还是欠缺直观性, 从博客笔记借张图用一下: FMCW雷达原理
FMCW雷达框图

2.1 FMCW系统硬件流程图

一般流程如下, 目前市面有些模块是可以集成到一起, 也有些模块是只负责其中一部分, 需要几个模块组合使用.

调频参数
分频控制
射频输出
调谐电压
本振信号LO
放大信号
电磁波
回波信号
放大信号
本振馈送LO
中频信号IF
滤波信号
模拟信号
数字信号
FMCW波形生成器
FMCW Waveform Generator
分数分频PLL
Fractional-N PLL
VCO压控振荡器
Voltage-Controlled Oscillator
环路滤波器
Loop Filter
功率放大器PA
Power Amplifier
发射天线
Tx Antenna
接收天线
Rx Antenna
低噪声放大器LNA
Low-Noise Amplifier
微波混频器
Mixer
基带滤波器
Baseband Filter
可变增益放大器VGA
Variable Gain Amplifier
ADC转换器
Analog-to-Digital Converter
DSP处理
Digital Signal Processing

2.2 全流程信号流明细

流程如果不能理解可以先死记, 上手后调几遍参数, 就自然而然明白了.
下面ds生成的清单, 有些可能是瞎编的, 如果看不懂不用管它

模块输入参数输出信号物理量单位
FMCW波形生成器调频起始频率
带宽
调频时间
线性斜坡电压 或 数字控制字V / Digital Code
分数分频PLL参考频率
分频比
VCO调谐电压V
VCO压控振荡器调谐电压射频信号GHz
环路滤波器VCO相位噪声谱滤除高频噪声后的误差电压V
功率放大器(PA)射频输入功率放大输出功率dBm
发射天线射频电磁场能量定向辐射电磁波dBm EIRP
接收天线反射回波感应电压μV
低噪声放大器(LNA)天线输入信号放大信号mV
微波混频器接收信号 + LO信号中频差拍信号MHz
基带滤波器宽带中频信号带限滤波信号Vpp
可变增益放大器(VGA)滤波后信号动态调节信号V
ADC转换器模拟中频信号数字采样数据Digital Code
DSP处理单元数字信号目标距离值Meters

2.3 专业术语增强解释 & 重要指标

这里我挑选认为重要的节点介绍一下, 其他没提及的自行ds一下.
注意!!! 下列各个内容也是重要检查对象, 是需要检查的检查项, 确保指标正常.

2.3.1 VCO(Voltage-Controlled Oscillator)压控振荡器

简单理解就是用来生成三角波的东西, 上面章节中看到三角波/锯齿波都是由它生成.
生成的方式是通过电压控制频率.一般vco模块手册会有关系图, 电压(x) / 频率(y) 的指标.
所以会有输出一个对应的三角波电压. 可以对应上图中的# 1. 三角波频率调制.
一般还会有一个输出频率的分频输出用于检查调频线性度, 可以对应上图中的 # 2. 时域信号.
比如77~81GHz进行64分频(右移6位),然后再通过一个引脚输出,可以用仪器或主控检测.

定义:一种通过输入控制电压精确调节输出频率的主动电子振荡器

在FMCW雷达中的核心作用

  1. 线性调频生成
    • 接收波形生成器的斜坡电压信号,输出频率随时间线性变化的射频信号(Chirp信号)
    • 关键指标:调频线性度、相位噪声
  2. 本振信号提供
    • 同时馈送至发射链(通过PA)和接收链(混频器LO端口),实现相干检测
  3. 频率敏捷性
    • 支持自定义调频

2.3.2 环路滤波器(Loop Filter)

是VCO的一部分, 就是调频的输入电压前的滤波电路. 值得注意的是,
其实是输出电流, 通过环路滤波器后转换为电压. 我一开始时以为是: 电压→滤波→电压

定义:锁相环中的模拟/数字滤波电路,位于 相位检测器(PD)压控振荡器(VCO) 之间,核心功能是:将相位误差电流信号转换为纯净的控制电压

在FMCW雷达中的核心作用

  1. 噪声抑制
    • 滤除相位检测器的高频纹波(如参考时钟馈通)
    • 典型指标:在1MHz偏移处衰减>40dB
  2. 动态响应控制
    • 通过带宽( B W 3 d B BW_{3dB} BW3dB)设定锁定时间(如77GHz雷达要求<50μs)
    • 抑制VCO的固有频率抖动(如±100ppm温漂)
  3. 稳定性保障
    • 提供相位裕度(45°~60°为佳),避免PLL自激振荡

2.3.3 本振反馈机制 (LO Feedback)

在使用时,会需要将发射信号与接收信号进行混频, 简单点理解就是相减, 得到中频信号, 也就是目标频率.
如果关闭发射信号/关闭本振信号, 同时对着天空(无反射目标), 那接收输出的就是整个雷达硬件系统的底噪,
这是也算是一个简易的检测指标. 上面是我的个人理解,不知道对不对 .

在FMCW雷达中的核心作用

  1. 存在LO反馈时

    • 混频器将接收信号(S_Rx)与发射本振信号(S_LO)进行相干混频,输出为包含目标距离信息的中频信号(IF),其频率与目标距离成正比
  2. 无LO反馈时

    • 接收信号无法与发射信号相干解调,混频器输出呈现宽带噪声,有效目标信息被淹没,导致测距功能失效

2.3.4 基带滤波器(Baseband Filter)& 增益放大器 (GA)

简单点理解就是最后的滤波器, 将目标频率以外的频率都过滤掉
同时也有放大作用, 将无效信号的放大倍数控制在-3dB以下, -3dB是一个重要观念, 这里不扩展了, 自行ds一下.
还有就是将输出的差分信号合并抬升, 到adc基准压的一半, 方便采样.

定义:位于信号链最后端的低通滤波器,用于提取有用基带信号并抑制高频噪声和混叠分量,重要指标为截止频率和采样率。

核心作用解析

  1. 抗混叠(ADC前)
    • 抑制高频噪声折叠到基带(奈奎斯特准则)
      案例:在100MHz采样系统中(最大分辨频率50MHz),40MHz低通滤波器可避免60MHz噪声混叠至40MHz以下
  2. 信道选择
    • 在零中频接收机中提取目标信道
      实现:将输出的差分信号抬升到(Vcc/2)中间电压
  3. 噪声整形
    • 配合Σ-Δ调制器将量化噪声推向高频
      典型应用:Class-D功放的LC后级滤波器

第3章 频率测量技术实现

3.1 数字处理流程

本章节主要是纯软件方面的算法介绍, 我不会贴出具体代码和实现过程, 请学会后自行实现.

时域
频域
评估
滤波
ADC原始数据
预处理
FFT变换
后处理
信号质量
频率分析与矫正
输出结果

3.2 预处理

采集到原始数据后, 对时域信号的处理.
我不想太过冗余的介绍, 毕竟要讲清楚的话就要长篇大论了, 请自行搜索相关内容.
本文只是ds简单介绍部分可以使用的步骤, 并非必须必要的, 而且不一定是对的, 请自行判断.


3.2.1 数字滤波器
滤波器类型适用场景设计要点
FIR带通滤波器需严格相位响应- 通带范围
- 窗函数法设计
IIR切比雪夫滤波器高陡峭度需求- 纹波
- 级联二阶节实现稳定性

3.2.2 窗函数
窗函数主瓣宽度旁瓣衰减FMCW适用性
汉宁窗1.5×-31dB常规场景(平衡分辨率与泄漏)
平顶窗3.8×-70dB幅值精度优先(标定测试)
布莱克曼3.0×-58dB强干扰抑制(多目标环境)

注意事项

  • 窗长度应匹配FFT点数(N=2^14典型值)
  • 加窗后需幅度补偿系数(如汉宁窗补偿√8/3)

3.2.3 消除直流分量
  • 原理:直流分量通常表示信号的平均值,通过从信号中减去均值可消除直流偏移
  • 特点:简单高效,适合静态信号。
  • 缺点:若信号存在动态变化的基线漂移(如ECG信号),需结合其他方法。

3.2.4 抑制噪声分量
  • 原理:利用噪声的随机性特征(均值为零且与信号不相关),通过多次采集相同条件下的信号并累加平均,提高信号的信噪比(SNR)
  • 特点:简单直观,兼容性强(无需复杂滤波器设计)。
  • 缺点:实时性受限,同步性要求高,破坏瞬态成分。

3.3 后处理

对处理后信号进行快速傅里叶变换, 得到频谱, 然后开始对频域信号的处理.
我不想太过冗余的介绍, 毕竟要讲清楚的话就要长篇大论了, 请自行搜索相关内容.
本文只是ds简单介绍部分可以使用的步骤, 并非必须必要的, 而且不一定是对的, 请自行判断.


3.3.1 数字滤波器(频域选择性截取)
  • 原理:在频域直接截取目标信号对应的谱线,滤除带外噪声。截断范围可通过设置截止频率或频带阈值(如-3dB带宽)确定。

3.3.2 峰值补偿(频域幅值校正)
  • 目的:校正因频谱泄露或非整周期采样(或硬件放大电路)导致的峰值衰减。
  • 方法
    • 插值法:利用主瓣相邻谱线(如Hanning窗下的三点插值)估算真实幅值。
    • 模型拟合:通过多项式或高斯函数拟合主瓣形态,精确提取峰值频率与幅值。
    • 修正因子:基于窗函数能量损失计算补偿系数(如Hamming窗补偿因子为1.85)。

3.3.3 消除临界点(边界信号处理)
  • 步骤:定位首个和末个能量低谷。剔除首尾非稳态区间,保留中间稳定段。
  • 效果:抑制信号截断引入的虚假频率分量,提升频谱纯净度。

3.3.4 抑制噪声分量(对称频域差分)
  • 原理:输入为复信号(如IQ正交信号),目标信号能量集中于单侧频谱(如正半轴),而噪声在正负半轴对称分布。利用对称性差分运算,抑制共模噪声并保留目标信号。
  • 操作:分离频谱正负半轴分量,提取相同频点对的幅度差,执行差分运算。
  • 优势:适用于低信噪比场景,可显著提升目标谱线的可辨识度。

3.4 评估信号质量

对频谱后处理完后, 就开始找有效最大谱线, 然后对谱线进行评估,
如果认为有效可靠就下一步, 否者换一根谱线判断或认为本次采集信号是无效的.
我不想太过冗余的介绍, 毕竟要讲清楚的话就要长篇大论了, 请自行搜索相关内容.
本文只是ds简单介绍部分可以使用的步骤, 并非必须必要的, 而且不一定是对的, 请自行判断.


3.4.1 信噪比(Signal-to-Noise Ratio, SNR)
  • 原理:计算峰值处信号的功率与周围噪声的平均功率比值。
    • 计算步骤
      1. 标定最大峰值点,确定信号带宽(如3dB主瓣宽度)。
      2. 在信号主瓣外选择无显著分量的区域作为噪声基准,计算噪声均方根(RMS)。
      3. SNR = 10·log₁₀(峰值功率 / 噪声功率)。
    • 优点:直观、计算简单,适合快速评估信号显著性。
    • 缺点:噪声带选取需经验调整,可能因频谱泄露或非平坦噪声导致偏差。
  • 适用场景:初步信号筛选(如无线通信频点质量评估)。

3.4.2 主瓣旁瓣比(Main-Lobe to Side-Lobe Ratio, MLSR)
  • 原理:对比主瓣峰值与最大旁瓣的幅值差,评估频谱泄漏对峰值的影响。
    • 计算步骤
      1. 定位主瓣峰值点。
      2. 寻找主瓣外第一旁瓣的最大幅值。
      3. MLSR (dB) = 主瓣峰值幅值 - 最大旁瓣幅值。
    • 优点:量化频谱泄漏程度,对窗函数性能评价敏感。
    • 缺点:不适用于无明确旁瓣的场景(如加矩形窗后的泄漏干扰)。
  • 适用场景:频谱纯度分析(如雷达脉冲压缩后的旁瓣抑制效果评估)。

3.4.3 峰值锐度(3dB带宽法)
  • 原理:计算峰值衰减3dB时的频带宽度,越窄表示频率精度越高。
    • 计算步骤
      1. 确定峰值幅值的70.7%(即-3dB点)。
      2. 向左右两侧搜索首个小于该值的频点,计算二者频率差(Δf)。
      3. 带宽Δf越窄,峰值锐度越高。
    • 优点:直接反映频率分辨能力,适用于窄带信号分析。
    • 缺点:对多峰混叠或非对称主瓣可能失效。
  • 适用场景:机械振动频率特征提取(如轴承故障检测)。

3.4.4 谱线对称性检验
  • 原理:真实信号的频谱主瓣通常对称,噪声或干扰可能表现出非对称特性。
    • 计算步骤
      1. 以主瓣中心频点为对称轴,计算左右两侧等数量谱线的幅值差异。
      2. 对称性指标:均方误差(MSE)或相关系数。
    • 优点:区分稳定信号与瞬态干扰(如开关噪声)。
    • 缺点:对非对称窗函数(如指数窗)不适用。
  • 适用场景:电源谐波与瞬态噪声的区分。

3.4.5 统计显著性检验(如假设检验)
  • 原理:通过统计模型测试峰值是否显著高于噪声背景。
    • 计算步骤
      1. 假设噪声服从特定分布(如高斯分布)。
      2. 计算峰值幅值超过噪声均值±k·σ(σ为噪声标准差)的概率。
      3. 若p值小于阈值(如0.05),则认为峰值显著。
    • 优点:提供统计置信度,适合低信噪比场景。
    • 缺点:需噪声分布先验知识,否则假设可能不成立。
  • 适用场景:生物医学信号分析(如脑电波特征检测)。

3.4.6 谐波成分验证
  • 原理:真实信号可能伴随谐波分量,检查频谱是否出现整数倍频的谐波峰。
    • 计算步骤
      1. 查找基波峰值点(如最大峰)及其可能的谐波频点(2f₀、3f₀等)。
      2. 验证谐波幅值是否与基波成规律衰减(如1/n²衰减)。
    • 优点:有效区分周期信号与随机干扰。
    • 缺点:仅适用于含谐波结构的信号(如方波、振动冲击信号)。
  • 适用场景:电力系统谐波污染分析。

3.4.7 时频稳定性分析
  • 原理:真实信号在时频分析中的峰值应具备时间稳定性,噪声则随机波动。
    • 计算步骤
      1. 对信号分段做短时傅里叶变换(STFT)。
      2. 统计目标频点在所有时间段的幅值方差或峰度。
      3. 方差越小,信号越稳定。
    • 优点:动态监测信号可靠性。
    • 缺点:计算量较大,实时性受限。
  • 适用场景:语音信号端点检测(如识别稳态语音段)。

3.4.8 模板匹配(互相关法)
  • 原理:与理想信号模板的频谱或时域波形做互相关,评估匹配度。
    • 计算步骤
      1. 生成理论信号频谱模板(如正弦波主瓣形状)。
      2. 计算实测频谱片段与模板的归一化互相关系数。
      3. 相关系数越接近1,匹配度越高。
    • 优点:高抗噪性,可精准识别模式化信号。
    • 缺点:依赖先验模板,灵活性较低。
  • 适用场景:雷达脉冲信号识别。

3.4.9 总结

选型建议

评估方法核心指标适用信噪比计算复杂度典型场景
SNR功率相对比值中-高(>10dB)通信系统频点评估
3dB带宽法主瓣宽度高(>20dB)精密频率测量
统计显著性检验p值低-中(<20dB)中高生物医学信号检测
谐波验证谐波衰减规律高(需谐波)电力系统谐波分析
时频稳定性方差中-高语音/雷达信号跟踪

综合策略

  1. 初步筛选:计算SNR和3dB带宽,快速排除弱信号。
  2. 二次验证:对疑似信号做统计显著性检验或谐波验证。
  3. 高级分析:若需高置信度,结合模板匹配和时频稳定性(如工业设备故障诊断)。

小结

  • 通过多维指标联合判定,可显著提高信号真伪判断的鲁棒性。
  • 例如,在环境噪声监测中:峰值SNR >15dB、3dB带宽 <0.5Hz,且通过统计显著性检验(p<0.01),则可判定为有效信号。

3.5 频率分析与矫正

确定谱线后就可以开始进一步计算频率, 注意不同算法的计算量, 部分性能不足的嵌入式单片机可能执行时间会达到秒级别.
我不想太过冗余的介绍, 毕竟要讲清楚的话就要长篇大论了, 请自行搜索相关内容.
本文只是ds简单介绍部分可以使用的步骤, 并非必须必要的, 而且不一定是对的, 请自行判断.


3.5.1 Zoom FFT(局部细化FFT)
  • 原理:通过复调制(下变频)将目标频段搬移到低频,再利用低采样率重采样和FFT实现局部频谱细化。
  • 优点
    • 可对任意频段局部细化,无需全局高密度采样。
    • 计算量低于全频段高分辨FFT(适用于实时系统)。
  • 缺点
    • 需要两次FFT(信号段滤波与重采样),实现复杂。
    • 抗噪能力弱,频谱泄漏仍依赖窗函数抑制。
  • 适用场景:窄带信号分析(如通信信道频率偏移监测)。

3.5.2 Chirp Z变换(CZT)
  • 原理:通过螺旋形路径在复平面计算Z变换,自由指定频谱分析的频率范围和分辨率。
  • 优点
    • 分辨率可灵活设定,突破FFT栅栏效应。
    • 计算效率优于传统Z变换。
  • 缺点
    • 高分辨率时计算量仍较大(需复数乘法累加)。
    • 主瓣展宽明显,易受噪声干扰。
  • 适用场景:高精度频偏测量(如雷达信号微小多普勒频移提取)。

3.5.3 相位补偿法(离散频谱插值)
  • 原理:通过相邻谱线相位差估计信号的真实频率,结合FFT结果插值修正频谱幅值。
  • 优点
    • 计算量小(仅插值修正),实时性强。
    • 可大幅提升频率估计精度(如Rife-Vincent窗插值)。
  • 缺点
    • 依赖单峰假设,多信号混叠时失效。
    • 低信噪比(SNR)场景误差陡增。
  • 适用场景:单频信号分析(如电力系统谐波检测)。

3.5.4 频谱峰值搜索 + 插值拟合
  • 原理:先通过FFT粗测主瓣位置,再对主瓣内谱线插值(如多项式、高斯拟合)细化峰值。
  • 优点
    • 实现简单,适合硬件化处理(无需复杂调制)。
    • 对主瓣形态匹配的窗函数误差小(如Hanning窗三谱线插值)。
  • 缺点
    • 仅改善频率估计精度,无法提升真实频谱分辨率。
    • 旁瓣泄露严重时插值失效。
  • 适用场景:仪器仪表领域(振动传感器频谱优化)。

3.5.5 现代超分辨算法(MUSIC/ESPRIT)
  • 原理:基于信号子空间分解,利用噪声与信号的正交性实现超分辨频率估计。
  • 优点
    • 突破瑞利极限,理论分辨率无限高。
    • 多分量信号分离能力强。
  • 缺点
    • 需预知信号源数目,计算复杂度高。
    • 对噪声敏感,协方差矩阵估计误差影响稳定性。
  • 适用场景:密集频谱分离(如声呐多目标测向)。

3.5.6 总结

方法对比与选型建议

方法分辨率提升抗噪性计算量实时性适用信噪比
Zoom FFT>15dB
CZT中高>20dB
相位补偿法中(仅频率)极高>30dB(单频)
插值拟合极低极高>25dB
MUSIC/ESPRIT极高极高>10dB(需多快拍)

选型原则

  1. 实时性优先:选相位补偿法或插值拟合。
  2. 分辨率优先:信噪比高选MUSIC/ESPRIT,中等选CZT。
  3. 工程实用性:Zoom FFT适合嵌入式系统,现代算法需高性能硬件支持。

注意事项

  1. 频谱泄漏抑制:细化前需优化窗函数(如Blackman-Harris窗降低旁瓣)。
  2. 噪声门限设置:低信噪比场景应结合统计阈值(如N-sigma准则)滤除虚假谱峰。
  3. 多分量信号处理:避免方法冲突(如插值法不适用多峰混叠,需配合盲源分离)。

小结

  • 通过组合多种方法(如先CZT粗筛频段,再MUSIC超分辨),可平衡效率与精度。

3.6 输出滤波

最后输出结果之前还需进行滤波处理, 避免跳变信号, 进一步确保了输出的正确性.
请根据实际需求选择或组合滤波算法, 滤波必然带来滞后问题, 请权衡利弊.
我不想太过冗余的介绍, 毕竟要讲清楚的话就要长篇大论了, 请自行搜索相关内容.
本文只是ds简单介绍部分可以使用的步骤, 并非必须必要的, 而且不一定是对的, 请自行判断.

算法实时性内存消耗抗突变能力适用场景
滑动平均滤波弱(滞后效应)稳态环境
卡尔曼滤波强(动态模型)移动目标跟踪
中值滤波极强(阶跃抑制)抗脉冲干扰
指数平滑适中(参数可调)资源受限系统

推荐方案

  • 初始部署:滑动平均 + 中值滤波级联
  • 优化版本:自适应卡尔曼滤波(过程噪声动态调整)

第4章 简单总结

恭喜你, 看完了~~~ 个人认为可以简单概括为以下内容

FMCW雷达测距通过发射频率线性变化的三角波信号,接收端将反射回波与发射信号混频生成中频差频信号,利用差频频率与目标距离的线性关系解算距离。

关键环节

  1. 确保调频线性度
  2. 设计基带滤波器
  3. 最优频率解算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值