文章目录
2022.1.8日的记录:
陆陆续续几天,玩中带做终于是写好了一个基本的雏形。以后想往里面添加东西就好添了。
首先是文件功能描述。
caogao:caogao,“草稿”,写程序调试代码的地方。
CreateSignal:生成各种调制的时域信号。
PSK2 : 2PSK调制。
FM : FM调制。
AM:AM调制。
DSB:DSB调制。
Signals_STFT:设置每张图含有的信号种类和数量,将生成的各种信号整合到同一个时间坐标上,选择添加噪声、突发信号,最后生成时频图。时间长度、信号起止时间设定范围内随机。我设置4种信号,每张图信号个数2-8随机如下:
随机生成的图:
Main:用来将生成的时频图处理成yolo格式的数据集。包括设置训练集图片数量、将图片分类成训练集和验证集(此处不生成测试集),同时保存含有每个信号的box信息(及信号种类,中心点坐标(x,y),box的宽度和长度)的label文本文件。
文件目录、图片和标签信息:
Testbox:使用生成的文本文件中的信息来在原图中画框,目的是为了查看自动生成的标签文件信息是否正确。效果如下:
Detect:用来生成用于测试模型的图片。
训练好的模型效果如下:
Main
root_path = 'E:\datasets\2000';% 数据集根路径
train_label_path = [root_path, '\train\labels\'];% 训练集label文本保存路径
train_im_path = [root_path, '\train\images\'];% 训练集label文本保存路径
val_label_path = [root_path, '\valid\labels\'];% 验证集label文本保存路径
val_im_path = [root_path, '\valid\images\'];% 验证集label文本保存路径
im_all_num = 1000; %所有图片的数量
im_train_num = 0.8 * im_all_num;%训练集图片的数量
im_val_num = 0.2 * im_all_num;%验证集所有图片的数量
if signal_class == 2 % 2fsk区别对待
x = (matrix(n, 2) + (matrix(n, 3) - matrix(n, 2))/2)/120000; % 中心点横坐标及中心频率
y = 0.5; % 中心点纵坐标及中心时刻位置
w = (matrix(n, 3)-matrix(n, 2))/120000 + 14/875; % 宽度及带宽 为了画出的框可以包含信号而增加像素点
h = 1; % 高度及信号时长
else
x = matrix(n, 3)/120000; % 中心点横坐标及中心频率
y = random_time(n, 1); % 中心点纵坐标及中心时刻位置
w = 2 * matrix(n, 2) / 120000 + 14/875; % 宽度及带宽 为了画出的框可以包含信号而增加像素点
h = random_time(n, 2); % 高度及信号时长
end
Signals_STFT
%% stft参数设置
wlen = 1024;% 设置窗口长度
window = hamming(wlen);% 设置海明窗的窗长
hop = 1;% 每次平移的步长
noverlap = wlen - hop; % 重叠长度
% f = 0:117.1875:120000;% 设置频率刻度hz,出图很慢,不用
nfft = 2^nextpow2(length(window)); % nfft点数
fs = 240000; % 采样频率 频率坐标轴为采样频率的一半
%% 信号参数设置
dt = 1/fs; % 时间精度
times_tart = 0; % 开始时间
time_end = 1; % 结束时间
t = times_tart:dt:time_end - dt; % 设置时间坐标轴起止时间
snr = randi([0, 20]); % 设置随机信噪比
signals_matrix = []; % 用来整合信号类型和频率的矩阵 格式为 class f1 f2
random_time = []; % 用来整合信号中心时刻和时长的矩阵 格式为 时长 中心时刻
class = [0, 1, 4, 3]; % 设置信号种类(从0开始同python)
% 0 AM 1 FM 2 DSB 3 2PSK 4 2FSK
signals_num = randi([2, 8]); % 每张图信号的数量:2~8随机
for i = 1:signals_num
random_time(i, 2) = unifrnd(0.1, 0.5); % 信号时长0.1-0.5随机
random_time(i, 1) = unifrnd(random_time(i, 2)/2,...
1 - random_time(i, 2)/2); % 信号中心时刻在保证信号在图内的前提下在随机
end