一、项目简介
本文介绍一个使用 C++17 + Qt 6 + CMake 开发的简单雷达回波信号检测与测距仿真系统。
项目主要模拟雷达接收到多个目标回波后的信号处理过程,并通过窗口能量检测目标,再对目标回波的起始位置进行精定位,最终根据回波延迟计算目标距离,并使用 Qt Widgets 和 QPainter 将结果进行可视化。
整个项目的处理流程如下:
目标回波生成
↓
多目标信号叠加
↓
加入高斯噪声
↓
估计噪声能量
↓
计算窗口能量
↓
自适应阈值检测
↓
得到目标候选位置
↓
局部能量精定位
↓
计算目标距离
↓
Qt 可视化
本项目主要用于学习 C++ 信号处理、雷达测距基本原理以及 Qt 自绘图形,并不针对真实雷达系统进行建模。
二、项目使用的技术
开发环境:
- C++17
- Qt 6
- Qt Widgets
- CMake
- MinGW 64-bit
项目结构:
RadarSignalSimulator/
├── CMakeLists.txt
├── main.cpp
├── mainwindow.h
├── mainwindow.cpp
├── radar_signal_generator.h
├── radar_signal_generator.cpp
├── signal_widget.h
└── signal_widget.cpp
其中:
RadarSignalGenerator
负责信号生成、噪声处理、能量检测和距离计算相关的数据处理。
SignalWidget
负责将原始信号、窗口能量和检测结果绘制到 Qt 界面中。
三、雷达测距的基本原理
雷达通过发射电磁波并接收目标反射回来的回波,可以根据回波的传播时间计算目标距离。
假设雷达发射信号后,经过时间 (τ\tauτ) 接收到目标回波。
由于电磁波需要经历:
雷达 → 目标
目标 → 雷达
两个方向,因此目标距离为:
R=cτ2 R=\frac{c\tau}{2} R=2cτ
其中:
- (R):目标距离
- (c):电磁波传播速度
- (τ\tauτ):回波延迟时间
本项目中使用:
c=3×108 m/s c=3\times10^8\ m/s c=3×108 m/s
四、模拟雷达回波
首先定义基本参数:
const int sampleCount = 5000;
const double sampleRate = 10'000'000;
const double carrierFrequency = 1'000'000;
const double pulseWidth = 20e-6;
const double noiseStdDev = 0.15;
也就是:
采样点数:5000
采样率:10 MHz
载波频率:1 MHz
脉冲宽度:20 μs
噪声标准差:0.15
然后模拟三个不同距离的目标:
std::vector<double> signal1 =
generator.generatePulseEcho(
sampleCount,
sampleRate,
carrierFrequency,
pulseWidth,
8000,
1.0,
0.0
);
std::vector<double> signal2 =
generator.generatePulseEcho(
sampleCount,
sampleRate,
carrierFrequency,
pulseWidth,
15000,
0.8,
0.0
);
std::vector<double> signal3 =
generator.generatePulseEcho(
sampleCount,
sampleRate,
carrierFrequency,
pulseWidth,
23000,
0.6,
0.0
);
三个目标分别位于:
8 km
15 km
23 km
同时设置不同的目标幅度:
目标1:1.0
目标2:0.8
目标3:0.6
用于模拟不同强度的目标回波。
五、根据目标距离计算回波延迟
在信号生成函数中,首先根据目标距离计算回波延迟:
double delayTime =
2.0 * targetRange / C;
其中:
C = 3.0e8;
然后转换成采样点:
int delaySamples =
st
1万+



被折叠的 条评论
为什么被折叠?



