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

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

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

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


目录

  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检测
相关推荐
FFF-X4 分钟前
前端无感刷新 Token 的 Axios 封装方案
前端
qq_589568104 分钟前
javaweb开发笔记—— 前端工程化
java·前端
gnip22 分钟前
包管理工具的发展
前端
前端工作日常1 小时前
H5 实时摄像头 + 麦克风:完整可运行 Demo 与深度拆解
前端·javascript
韩沛晓2 小时前
uniapp跨域怎么解决
前端·javascript·uni-app
前端工作日常2 小时前
以 Vue 项目为例串联eslint整个流程
前端·eslint
程序员鱼皮2 小时前
太香了!我连夜给项目加上了这套 Java 监控系统
java·前端·程序员
该用户已不存在2 小时前
这几款Rust工具,开发体验直线上升
前端·后端·rust
前端雾辰2 小时前
Uniapp APP 端实现 TCP Socket 通信(ZPL 打印实战)
前端
无羡仙2 小时前
虚拟列表:怎么显示大量数据不卡
前端·react.js