基于 RFUAV 系统使用 Matlab 处理无人机信号
教程简介
在通信安全与频谱监测中,基于射频 (RF) 数据的无人机识别系统被广泛研究。 RFUAV 项目通过频谱图分析、信噪比估计等手段,对无人机的 IQ 信号进行分析处理。本项目在 OpenBayes 平台上使用 MATLAB 实现 RFUAV 的关键流程,完成 .mat → .dat 数据转换、频谱图可视化、 SNR 估计及分段裁剪等任务。
该教程基于浙江理工大学、杭州电子科技大学等研究团队于 2025 年发布的论文「RFUAV: A Benchmark Dataset for Unmanned Aerial Vehicle Detection and Identification」进行数据处理复现,由于原始数据暂未提供,此处数据集选用 IDLab 平台的数据作为数据处理演示。因完整数据集过于庞大,本教程仅对其中部分数据进行分析。
理论基础
信号格式
- IQ 数据:复数形式表示为 x(t)=I(t)+jQ(t),包含幅度与相应信息。
- .mat 数据:原始文件存储在 IQ_samples 字段中。
- .dat 数据:float32 格式,交替存储 I 和 Q 。
分析流程
- 加载 IQ 数据
- 转换为.dat 格式
- 使用 FFT 绘制频谱
- 使用功率谱密度和频带划分估计 SNR
- 分段裁剪以供模型训练
操作步骤
1. 运行准备
克隆并启动容器后,「打开工作空间」→在启动页打开「Matlab」

2. 数据转换
2.1 数据转换算法 (main_convert.m)
% 设置路径
mat_path = 'lorasf12_g0.0dB_att24dB_freq867.4MHz_4.mat'; % 当前目录
dat_path = 'AVATA_1.dat'; % 输出 .dat 文件名
% 加载 .mat 文件
mat_data = load(mat_path);
disp(fieldnames(mat_data)) % 显示变量名,确认变量存在
% 正确提取变量
iq = mat_data.IQ_samples;
% 转换为 float32 类型,并交替存储 I 和 Q
iq_float32 = single([real(iq(:)).'; imag(iq(:)).']); % 交错排列为 I1 Q1 I2 Q2 ...
% 保存为 .dat 文件
fid = fopen(dat_path, 'w');
fwrite(fid, iq_float32, 'float32');
fclose(fid);
fprintf('转换完成,.dat 文件保存至: %s\n', dat_path);
2.2 数据转换实现
run('main_convert.m')
生成左侧 AVATA_1.dat 文档

3. 信号处理与频谱图生成
3.1 代码实现 (main.m)
% main.m
clc; clear;
addpath('tools'); % 添加工具函数路径
% 参数设置
data_path = 'AVATA_1.dat'; % 替换为实际上传的文件路径
fs = 100e6; % 采样率
nfft = 512; % FFT 点数
duration = 0.1; % 时长 0.1s
datatype = 'float32';
% 频谱图显示
fprintf('>>> 可视化频谱图\n');
fig = check(data_path, nfft, fs, duration, datatype);
saveas(fig, 'spectrum_AVATA_1.png');
% 读取 IQ 数据
fid = fopen(data_path, 'rb');
dataIQ = fread(fid, 'float32');
fclose(fid);
% 信噪比估计
fprintf('>>> 信噪比估计\n');
bw = 2e6;
[idx1, idx2, idx3, idx4, f1, f2] = positionFind(dataIQ, fs, bw, nfft);
snr_val = snrEsti(dataIQ, fs, nfft, f1, f2, idx1, idx2, idx3, idx4);
fprintf('Estimated SNR: %.2f dB\n', snr_val);
% 分段裁剪
fprintf('>>> 开始数据分段...\n');
rawdata_crop(data_path, 2, fs); % 每段 2 秒
3.2 信号处理结果与频谱图

4. 其他 .mat 文件处理
可将 main_convert.m 中的 mat_path 文件路径更改为自己需要处理的文件
