毫米波雷达基础知识学习报告

毫米波雷达基础知识学习报告

面向嵌入式软件开发的雷达原理与应用

目标: 掌握雷达基础原理、调试方法和目标检测算法


目录

  1. 雷达基础原理
  2. 毫米波雷达技术特点
  3. 雷达信号处理基础
  4. 目标检测与识别
  5. 雷达调试与标定
  6. 学习总结

1. 雷达基础原理

1.1 雷达工作原理概述

RADAR = RA dio D etection A nd Ranging(无线电探测与测距)

graph LR A[发射器] --> B[发射天线] B --> C[电磁波传播] C --> D[目标反射] D --> E[接收天线] E --> F[接收器] F --> G[信号处理] G --> H[目标信息] style A fill:#e3f2fd style F fill:#e8f5e8 style G fill:#fff3e0 style H fill:#fce4ec

基本工作流程:

  1. 发射:雷达发射高频电磁波
  2. 传播:电磁波在空间中传播
  3. 反射:遇到目标后发生反射
  4. 接收:接收反射回来的信号
  5. 处理:分析信号获取目标信息

1.2 雷达方程

基础雷达方程:

<math xmlns="http://www.w3.org/1998/Math/MathML"> P r = P t G t G r λ 2 σ ( 4 π ) 3 R 4 P_r = \frac{P_t G_t G_r \lambda^2 \sigma}{(4\pi)^3 R^4} </math>Pr=(4π)3R4PtGtGrλ2σ

参数说明:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> P r P_r </math>Pr:接收功率 (W)
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> P t P_t </math>Pt:发射功率 (W)
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> G t G_t </math>Gt:发射天线增益
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> G r G_r </math>Gr:接收天线增益
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> λ \lambda </math>λ:波长 (m)
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> σ \sigma </math>σ:雷达截面积 (m²)
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> R R </math>R:目标距离 (m)

关键理解:

markdown 复制代码
1. 接收功率与距离的四次方成反比
   → 距离增加一倍,信号强度降低16倍

2. 频率越高(波长越短),理论性能越好
   → 毫米波雷达的优势所在

3. 目标尺寸影响反射强度
   → 大车比小车更容易检测

1.3 雷达测量参数

雷达可以测量的基本参数:

graph TD A[雷达测量参数] --> B[距离 Range] A --> C[速度 Velocity] A --> D[角度 Angle] A --> E[雷达截面积 RCS] B --> B1[时间延迟测量
ToF] C --> C1[多普勒频移
Doppler Effect] D --> D2[相位差测量
Phase Difference] E --> E1[反射信号强度
Signal Strength]
1.3.1 距离测量

飞行时间法 (Time of Flight):

<math xmlns="http://www.w3.org/1998/Math/MathML"> R = c ⋅ t 2 R = \frac{c \cdot t}{2} </math>R=2c⋅t

其中:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> R R </math>R:距离 (m)
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> c c </math>c:光速 <math xmlns="http://www.w3.org/1998/Math/MathML"> 3 × 1 0 8 3 \times 10^8 </math>3×108 m/s
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> t t </math>t:往返时间 (s)

示例计算:

bash 复制代码
目标距离 100m:
往返时间 t = 2R/c = 200m / (3×10⁸ m/s) = 667ns

时间精度要求很高!
1.3.2 速度测量

多普勒效应:

<math xmlns="http://www.w3.org/1998/Math/MathML"> f d = 2 v r f 0 c f_d = \frac{2 v_r f_0}{c} </math>fd=c2vrf0

其中:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> f d f_d </math>fd:多普勒频移 (Hz)
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> v r v_r </math>vr:径向速度 (m/s)
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> f 0 f_0 </math>f0:载波频率 (Hz)
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> c c </math>c:光速 (m/s)

速度计算:

<math xmlns="http://www.w3.org/1998/Math/MathML"> v r = f d ⋅ c 2 f 0 v_r = \frac{f_d \cdot c}{2 f_0} </math>vr=2f0fd⋅c

示例计算:

ini 复制代码
77GHz雷达,目标速度60km/h:
v_r = 60km/h = 16.67m/s
f_d = 2 × 16.67 × 77×10⁹ / (3×10⁸) = 8.55kHz

1.4 雷达频段分类

常用雷达频段:

频段 频率范围 波长 特点 应用
L 1-2 GHz 15-30 cm 穿透力强,精度低 远程监视
S 2-4 GHz 7.5-15 cm 平衡性能 气象雷达
C 4-8 GHz 3.75-7.5 cm 中等性能 航管雷达
X 8-12 GHz 2.5-3.75 cm 高精度 导航雷达
Ku 12-18 GHz 1.67-2.5 cm 高分辨率 卫星通信
K 18-27 GHz 1.11-1.67 cm 高精度 交通雷达
Ka 27-40 GHz 0.75-1.11 cm 超高精度 汽车雷达
毫米波 30-300 GHz 1-10 mm 极高精度,小体积 车载雷达

2. 毫米波雷达技术特点

2.1 毫米波的优势

技术优势:

graph TD A[毫米波雷达优势] --> B[高分辨率] A --> C[小尺寸] A --> D[全天候工作] A --> E[穿透能力] B --> B1[角度分辨率高
距离分辨率高] C --> C1[天线尺寸小
设备紧凑] D --> D1[不受光照影响
不受天气影响] E --> E1[穿透雨雾
穿透灰尘]

分辨率优势:

距离分辨率: <math xmlns="http://www.w3.org/1998/Math/MathML"> Δ R = c 2 B \Delta R = \frac{c}{2B} </math>ΔR=2Bc

其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> B B </math>B 是信号带宽。毫米波雷达带宽大,距离分辨率高。

角度分辨率: <math xmlns="http://www.w3.org/1998/Math/MathML"> Δ θ = λ D \Delta \theta = \frac{\lambda}{D} </math>Δθ=Dλ

其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> D D </math>D 是天线尺寸。波长短,相同天线尺寸下角度分辨率更高。

示例对比:

diff 复制代码
24GHz雷达:
- 带宽:250MHz → 距离分辨率:60cm
- 波长:12.5mm → 角度分辨率好

77GHz雷达:  
- 带宽:4GHz → 距离分辨率:3.75cm
- 波长:3.9mm → 角度分辨率更好

2.2 常用毫米波雷达频段

车载雷达频段:

graph LR subgraph 24GHz频段 A1[24.05-24.25 GHz
窄带] A2[21.65-26.65 GHz
宽带ISM] end subgraph 77GHz频段 B1[76-77 GHz
短距离] B2[77-81 GHz
长距离] end subgraph 79GHz频段 C1[77-81 GHz
新标准] end

频段对比:

参数 24GHz 77GHz 优势对比
距离精度 60cm 3.75cm 77GHz精度高20倍
速度精度 0.1km/h 0.03km/h 77GHz更精确
天线尺寸 较大 77GHz集成度高
功耗 较高 较低 77GHz更节能
成本 中等 24GHz成本优势
应用 盲点检测 自动驾驶 按需求选择

2.3 FMCW雷达原理

FMCW = Frequency Modulated Continuous Wave(调频连续波)

graph TD A[FMCW工作原理] --> B[频率线性调制] A --> C[连续发射接收] A --> D[差频信号分析] B --> B1[锯齿波调制
三角波调制] C --> C1[发射不间断
同时接收] D --> D1[距离信息
速度信息]

FMCW信号特征:

调制波形: <math xmlns="http://www.w3.org/1998/Math/MathML"> f ( t ) = f 0 + B T ⋅ t f(t) = f_0 + \frac{B}{T} \cdot t </math>f(t)=f0+TB⋅t

其中:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> f 0 f_0 </math>f0:起始频率
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> B B </math>B:调制带宽
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> T T </math>T:调制周期

差频计算:

距离差频: <math xmlns="http://www.w3.org/1998/Math/MathML"> f R = 2 R ⋅ B c ⋅ T f_R = \frac{2R \cdot B}{c \cdot T} </math>fR=c⋅T2R⋅B

速度差频: <math xmlns="http://www.w3.org/1998/Math/MathML"> f v = 2 v ⋅ f 0 c f_v = \frac{2v \cdot f_0}{c} </math>fv=c2v⋅f0

混合信号: <math xmlns="http://www.w3.org/1998/Math/MathML"> f b e a t = f R + f v f_{beat} = f_R + f_v </math>fbeat=fR+fv


3. 雷达信号处理基础

3.1 信号处理流程

graph LR A[射频前端] --> B[ADC采样] B --> C[数字信号处理] C --> D[目标检测] D --> E[参数估计] E --> F[目标跟踪] subgraph DSP处理 C --> C1[距离FFT] C1 --> C2[多普勒FFT] C2 --> C3[角度估计] C3 --> C4[CFAR检测] end

3.2 距离FFT处理

**目的:**从差频信号中提取距离信息

处理步骤:

  1. 采样:对中频信号进行ADC采样
  2. 加窗:减少频谱泄漏
  3. FFT:转换到频域
  4. 幅度计算 : <math xmlns="http://www.w3.org/1998/Math/MathML"> ∣ F F T ∣ |FFT| </math>∣FFT∣

距离分辨率: <math xmlns="http://www.w3.org/1998/Math/MathML"> Δ R = c 2 B \Delta R = \frac{c}{2B} </math>ΔR=2Bc

最大检测距离: <math xmlns="http://www.w3.org/1998/Math/MathML"> R m a x = c ⋅ T ⋅ f s 4 B R_{max} = \frac{c \cdot T \cdot f_s}{4B} </math>Rmax=4Bc⋅T⋅fs

其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> f s f_s </math>fs 是采样频率。

代码示例(伪代码):

c 复制代码
// 距离FFT处理
void range_fft_processing(complex_t* adc_data, int num_samples) {
    // 1. 加窗处理
    apply_window(adc_data, window_coeff, num_samples);
    
    // 2. FFT变换
    fft(adc_data, range_fft_output, num_samples);
    
    // 3. 计算幅度
    for(int i = 0; i < num_samples; i++) {
        range_magnitude[i] = sqrt(pow(range_fft_output[i].real, 2) + 
                                  pow(range_fft_output[i].imag, 2));
    }
    
    // 4. 距离映射
    for(int i = 0; i < num_samples; i++) {
        range_bins[i] = i * range_resolution;
    }
}

3.3 多普勒FFT处理

目的: 从多个周期的信号中提取速度信息

处理流程:

ini 复制代码
Chirp 1: [Range FFT] → Range-Doppler Map[0][:]
Chirp 2: [Range FFT] → Range-Doppler Map[1][:]
...
Chirp N: [Range FFT] → Range-Doppler Map[N-1][:]
                ↓
        [Doppler FFT on each range bin]
                ↓
        Complete Range-Doppler Map

速度分辨率: <math xmlns="http://www.w3.org/1998/Math/MathML"> Δ v = λ 2 ⋅ N ⋅ T c \Delta v = \frac{\lambda}{2 \cdot N \cdot T_c} </math>Δv=2⋅N⋅Tcλ

其中:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> N N </math>N:Chirp数量
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> T c T_c </math>Tc:Chirp周期

最大检测速度: <math xmlns="http://www.w3.org/1998/Math/MathML"> v m a x = λ 4 T c v_{max} = \frac{\lambda}{4 T_c} </math>vmax=4Tcλ

3.4 CFAR检测算法

CFAR = Constant False Alarm Rate(恒虚警率)

**目的:**在噪声环境中自适应地检测目标

graph TD A[CFAR检测] --> B[CA-CFAR
单元平均] A --> C[OS-CFAR
有序统计] A --> D[GO-CFAR
最大选择] A --> E[SO-CFAR
最小选择] B --> B1[适用均匀噪声] C --> C1[适用杂波边缘] D --> D1[适用多目标] E --> E1[适用强干扰]

CA-CFAR算法:

检测准则: <math xmlns="http://www.w3.org/1998/Math/MathML"> X > T = α ⋅ P n ^ X > T = \alpha \cdot \hat{P_n} </math>X>T=α⋅Pn^

其中:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> X X </math>X:待检测单元功率
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> T T </math>T:检测门限
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> α \alpha </math>α:门限因子
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> P n ^ \hat{P_n} </math>Pn^:估计噪声功率

噪声功率估计: <math xmlns="http://www.w3.org/1998/Math/MathML"> P n ^ = 1 N ∑ i = 1 N P i \hat{P_n} = \frac{1}{N} \sum_{i=1}^{N} P_i </math>Pn^=N1∑i=1NPi

代码实现:

c 复制代码
// CA-CFAR检测
bool cfar_detection(float* range_profile, int target_idx, 
                   int guard_cells, int ref_cells, float threshold_factor) {
    
    float noise_sum = 0;
    int noise_count = 0;
    
    // 计算参考单元平均功率
    for(int i = -ref_cells - guard_cells; i < -guard_cells; i++) {
        if(target_idx + i >= 0) {
            noise_sum += range_profile[target_idx + i];
            noise_count++;
        }
    }
    
    for(int i = guard_cells + 1; i <= guard_cells + ref_cells; i++) {
        if(target_idx + i < MAX_RANGE_BINS) {
            noise_sum += range_profile[target_idx + i];
            noise_count++;
        }
    }
    
    // 计算检测门限
    float noise_avg = noise_sum / noise_count;
    float threshold = threshold_factor * noise_avg;
    
    // 检测判决
    return (range_profile[target_idx] > threshold);
}

4. 目标检测与识别

4.1 目标检测流程

graph TD A[Range-Doppler Map] --> B[CFAR检测] B --> C[峰值提取] C --> D[聚类处理] D --> E[参数估计] E --> F[目标确认] F --> F1[距离 R] F --> F2[速度 V] F --> F3[角度 θ] F --> F4[RCS σ]

4.2 多目标检测

问题: 多个目标可能在距离-多普勒图上产生多个峰值

解决方案:

1. 聚类算法:

c 复制代码
typedef struct {
    float range;
    float velocity;
    float angle;
    float rcs;
    float snr;
} target_t;

// DBSCAN聚类
void dbscan_clustering(detection_point_t* points, int num_points,
                      target_t* targets, int* num_targets) {
    
    float eps_range = 0.5;    // 距离聚类半径
    float eps_velocity = 0.2; // 速度聚类半径
    int min_points = 3;       // 最小点数
    
    for(int i = 0; i < num_points; i++) {
        if(points[i].cluster_id != UNCLASSIFIED) continue;
        
        // 寻找邻域点
        int neighbors[MAX_POINTS];
        int neighbor_count = find_neighbors(points, num_points, i, 
                                          eps_range, eps_velocity, neighbors);
        
        if(neighbor_count >= min_points) {
            // 形成新簇
            expand_cluster(points, i, neighbors, neighbor_count, 
                          eps_range, eps_velocity, current_cluster_id++);
        }
    }
    
    // 从簇中生成目标
    generate_targets_from_clusters(points, num_points, targets, num_targets);
}

4.3 角度估计

多天线阵列角度估计:

相位差法: <math xmlns="http://www.w3.org/1998/Math/MathML"> θ = arcsin ⁡ ( Δ ϕ ⋅ λ 2 π ⋅ d ) \theta = \arcsin\left(\frac{\Delta \phi \cdot \lambda}{2\pi \cdot d}\right) </math>θ=arcsin(2π⋅dΔϕ⋅λ)

其中:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> Δ ϕ \Delta \phi </math>Δϕ:相位差
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> d d </math>d:天线间距

数字波束形成(DBF):

c 复制代码
// 数字波束形成角度估计
void angle_estimation_dbf(complex_t* rx_data[], int num_antennas, 
                         float* angle_spectrum, int num_angles) {
    
    for(int angle_idx = 0; angle_idx < num_angles; angle_idx++) {
        float angle = -60.0 + angle_idx * 120.0 / num_angles; // -60°到+60°
        
        complex_t beam_output = {0, 0};
        
        // 对每个天线应用相位补偿
        for(int ant = 0; ant < num_antennas; ant++) {
            float phase_compensation = 2 * PI * ant * antenna_spacing * 
                                     sin(angle * PI / 180) / wavelength;
            
            complex_t weight = {cos(phase_compensation), -sin(phase_compensation)};
            
            // 复数乘法
            beam_output.real += rx_data[ant]->real * weight.real - 
                               rx_data[ant]->imag * weight.imag;
            beam_output.imag += rx_data[ant]->real * weight.imag + 
                               rx_data[ant]->imag * weight.real;
        }
        
        angle_spectrum[angle_idx] = sqrt(beam_output.real * beam_output.real + 
                                        beam_output.imag * beam_output.imag);
    }
}

4.4 目标分类

基于RCS的目标分类:

目标类型 典型RCS (dBsm) 特征
小轿车 5-15 中等反射强度
SUV/卡车 15-25 强反射强度
摩托车 -5-5 弱反射强度
行人 -15--5 很弱反射强度
自行车 -20--10 极弱反射强度

分类算法示例:

c 复制代码
typedef enum {
    TARGET_UNKNOWN = 0,
    TARGET_PEDESTRIAN,
    TARGET_BICYCLE,
    TARGET_MOTORCYCLE,
    TARGET_CAR,
    TARGET_TRUCK
} target_class_t;

target_class_t classify_target(target_t* target) {
    float rcs_dbsm = 10 * log10(target->rcs);
    float velocity_abs = fabs(target->velocity);
    
    // 静止或慢速移动
    if(velocity_abs < 0.5) {
        return TARGET_UNKNOWN;
    }
    
    // 基于RCS分类
    if(rcs_dbsm < -10) {
        if(velocity_abs < 5) return TARGET_PEDESTRIAN;
        else return TARGET_BICYCLE;
    }
    else if(rcs_dbsm < 5) {
        return TARGET_MOTORCYCLE;
    }
    else if(rcs_dbsm < 20) {
        return TARGET_CAR;
    }
    else {
        return TARGET_TRUCK;
    }
}

5. 雷达调试与标定

5.1 雷达系统调试流程

graph TD A[雷达调试] --> B[硬件调试] A --> C[软件调试] A --> D[性能测试] A --> E[标定校准] B --> B1[射频链路测试] B --> B2[天线方向图测试] B --> B3[功率校准] C --> C1[信号处理算法验证] C --> C2[目标检测性能] C --> C3[参数优化] D --> D1[距离精度测试] D --> D2[速度精度测试] D --> D3[角度精度测试] E --> E1[距离标定] E --> E2[速度标定] E --> E3[角度标定]

5.2 硬件调试

射频性能验证:

1. 发射功率测试:

c 复制代码
// 发射功率监控
typedef struct {
    float tx_power_dbm;
    float temperature;
    float voltage;
    bool power_ok;
} rf_status_t;

void monitor_rf_performance(rf_status_t* status) {
    // 读取功率检测器
    status->tx_power_dbm = read_power_detector();
    
    // 温度补偿
    status->temperature = read_temperature_sensor();
    float temp_compensation = (status->temperature - 25.0) * 0.02; // dB/°C
    status->tx_power_dbm += temp_compensation;
    
    // 功率范围检查
    status->power_ok = (status->tx_power_dbm >= MIN_TX_POWER) && 
                      (status->tx_power_dbm <= MAX_TX_POWER);
    
    if(!status->power_ok) {
        // 功率异常处理
        adjust_tx_power(status->tx_power_dbm);
    }
}

2. 接收链路测试:

c 复制代码
// 接收机噪声系数测试
float measure_noise_figure() {
    float noise_power_off, noise_power_on;
    
    // 关闭噪声源,测量本底噪声
    set_noise_source(false);
    delay_ms(100);
    noise_power_off = measure_noise_power();
    
    // 打开噪声源,测量总噪声
    set_noise_source(true);
    delay_ms(100);
    noise_power_on = measure_noise_power();
    
    // 计算噪声系数
    float y_factor = noise_power_on / noise_power_off;
    float noise_figure_db = 10 * log10((ENR_db - 1) / (y_factor - 1));
    
    return noise_figure_db;
}

5.3 软件调试

信号处理链路验证:

1. 数据完整性检查:

c 复制代码
// ADC数据质量检查
bool validate_adc_data(uint16_t* adc_data, int num_samples) {
    // 检查数据范围
    for(int i = 0; i < num_samples; i++) {
        if(adc_data[i] > ADC_MAX_VALUE || adc_data[i] < ADC_MIN_VALUE) {
            return false;
        }
    }
    
    // 检查数据方差(避免全零或全满)
    float mean = calculate_mean(adc_data, num_samples);
    float variance = calculate_variance(adc_data, num_samples, mean);
    
    if(variance < MIN_VARIANCE || variance > MAX_VARIANCE) {
        return false;
    }
    
    return true;
}

2. 算法性能监控:

c 复制代码
// 处理时间监控
typedef struct {
    uint32_t start_time;
    uint32_t end_time;
    uint32_t duration_us;
    char function_name[32];
} profiler_t;

void profile_function_start(profiler_t* profiler, const char* name) {
    strcpy(profiler->function_name, name);
    profiler->start_time = get_timestamp_us();
}

void profile_function_end(profiler_t* profiler) {
    profiler->end_time = get_timestamp_us();
    profiler->duration_us = profiler->end_time - profiler->start_time;
    
    // 记录性能数据
    log_performance(profiler->function_name, profiler->duration_us);
    
    // 性能告警
    if(profiler->duration_us > MAX_PROCESSING_TIME) {
        log_warning("Function %s took %d us (max: %d us)", 
                   profiler->function_name, profiler->duration_us, MAX_PROCESSING_TIME);
    }
}

5.4 标定校准

距离标定:

角反射器标定法:

c 复制代码
// 距离标定
typedef struct {
    float measured_distance;
    float actual_distance;
    float error;
} calibration_point_t;

void distance_calibration() {
    calibration_point_t cal_points[] = {
        {0, 10.0, 0},   // 10m角反射器
        {0, 50.0, 0},   // 50m角反射器
        {0, 100.0, 0},  // 100m角反射器
        {0, 200.0, 0}   // 200m角反射器
    };
    
    int num_points = sizeof(cal_points) / sizeof(calibration_point_t);
    
    for(int i = 0; i < num_points; i++) {
        // 测量距离
        cal_points[i].measured_distance = measure_target_distance();
        
        // 计算误差
        cal_points[i].error = cal_points[i].measured_distance - 
                             cal_points[i].actual_distance;
        
        printf("Distance Cal Point %d: Actual=%.1fm, Measured=%.1fm, Error=%.2fm\n",
               i, cal_points[i].actual_distance, 
               cal_points[i].measured_distance, cal_points[i].error);
    }
    
    // 线性回归校正
    float slope, offset;
    linear_regression(cal_points, num_points, &slope, &offset);
    
    // 更新校正参数
    update_distance_calibration(slope, offset);
}

速度标定:

c 复制代码
// 使用移动目标进行速度标定
void velocity_calibration(float reference_velocity) {
    float measured_velocities[CALIBRATION_SAMPLES];
    
    // 采集多个测量值
    for(int i = 0; i < CALIBRATION_SAMPLES; i++) {
        measured_velocities[i] = measure_target_velocity();
        delay_ms(100);
    }
    
    // 计算平均值和标准差
    float mean_velocity = calculate_mean(measured_velocities, CALIBRATION_SAMPLES);
    float std_velocity = calculate_std(measured_velocities, CALIBRATION_SAMPLES);
    
    // 计算校正因子
    float velocity_correction = reference_velocity / mean_velocity;
    
    printf("Velocity Calibration:\n");
    printf("  Reference: %.2f m/s\n", reference_velocity);
    printf("  Measured:  %.2f ± %.2f m/s\n", mean_velocity, std_velocity);
    printf("  Correction Factor: %.4f\n", velocity_correction);
    
    // 应用校正
    update_velocity_calibration(velocity_correction);
}

6. 学习总结

雷达基础原理:

mindmap root((雷达基础)) 测距原理 飞行时间 FMCW调频 距离分辨率 测速原理 多普勒效应 频移计算 速度分辨率 测角原理 相位差 波束形成 角度分辨率 信号处理 距离FFT 多普勒FFT CFAR检测
相关推荐
demo007x4 分钟前
在国内也能使用 Claude cli给自己提效,附实操方法
前端·后端·程序员
jayaccc13 分钟前
Webpack配置详解与实战指南
前端·webpack·node.js
南囝coding13 分钟前
发现一个宝藏图片对比工具!速度比 ImageMagick 快 6 倍,还是开源的
前端
前端小黑屋21 分钟前
查看 Base64 编码的字体包对应的字符集
前端·css·字体
每天吃饭的羊32 分钟前
媒体查询
开发语言·前端·javascript
XiaoYu20021 小时前
第8章 Three.js入门
前端·javascript·three.js
这个一个非常哈1 小时前
element之,自定义form的label
前端·javascript·vue.js
阿东在coding1 小时前
Flutter 测试框架对比指南
前端
是李嘉图呀1 小时前
npm推送包失败需要Two-factor权限认证问题解决
前端
自己记录_理解更深刻1 小时前
本地完成「新建 GitHub 仓库 react-ts-demo → 关联本地 React+TS 项目 → 提交初始代码」的完整操作流程
前端