毕业设计记录-增加3种检测标准参数Pd、Pf、Eavg

2022.1.12的记录:
一共三个检测标准,检测概率、虚警概率、信号参数平均误差。

N = 0; % 实际信号总数
M = 0; % 检测出的信号个数
Mt = 0; % M中真实的信号个数,即检测到的信号中真的是信号的个数,标准IOU>0.8
Mf = 0; % M中虚假的信号个数,即误测的信号个数
Pd = 0; % 检测概率 Pd = Mt/N
Pf = 0; % 虚警概率 Pf = Mf/M
Eavg = 0; % 信息参数平均误差

在这里插入图片描述

为了方便计算检测到的信号中真的是信号的个数,修改yolov5代码中detect.py中,增加保存一个conf。
在这里插入图片描述
在这里插入图片描述
计算信息参数平均误差时遇到一个问题,因为每张图同一个信号不止一个,我无法区分同样的信号。就像下面右图中检测出2个2FSK信号,但是真实有3个2FSK信号,我该如何在真实的这3个2FSK信号中找到预测到的这俩个2FSK信号呢。
先拟定一个无可奈何的方案:将每张图中每个种类的信号个数限定为1

real_path = 'E:\yolov5\data\images\labels\'; % 真实数据的路径
calculate_path = 'E:\yolov5\runs\detect\exp36\labels\'; % 预测结果的路径
num = length(dir([real_path, '*.txt'])); % 统计label文本文件的数量
N = 0; % 实际信号总数
M = 0; % 检测出的信号个数
Mt = 0; % M中真实的信号个数,即检测到的信号中真的是信号的个数
Mf = 0; % M中虚假的信号个数,即误测的信号个数
Pd = 0; % 检测概率 Pd = Mt/N
Pf = 0; % 虚警概率 Pf = Mf/M
Eavg = 0; % 信息参数平均误差
for i = 1:num
    real_data = load([real_path,[num2str(i),'.txt']]); % 读取真实文本中的label信息
    calculate_data = load([calculate_path,[num2str(i),'.txt']]); % 读取预测文本中的label信息
    N = N + length(real_data(:,1));
    M = M + length(calculate_data(:,1));
    Mt = Mt + sum(calculate_data(:, 6) > 0.8);
end
Mf = M - Mt;
Pd = Mt/N;
Pf = Mf/M;

2022.1.13的记录:
matlab函数增的输入参数不设置就使用默认值的方法:
https://blog.csdn.net/weixin_30528371/article/details/98037085?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.no_search_link&spm=1001.2101.3001.4242.1&utm_relevant_index=3
在PlotData.py中使用俩个信号中心点欧式距离最小来配对真实信号和预测信号,从而计算信号参数平均误差率。

for i = 1:num
    real_data = load([real_path,[num2str(i),'.txt']]); % 读取真实文本中的label信息
    calculate_data = load([calculate_path,[num2str(i),'.txt']]); % 读取预测文本中的label信息
    m = length(calculate_data(:,1)); % 一张图检测出的信号的个数
    n = length(real_data(:,1)); % 一张图中实际信号的个数
    x = find(calculate_data(:, 6) > 0.8); % 找出每个真实信号所在行的索引值
    mt = length(x); % 一张图中真实信号的个数
    N = N + n;
    M = M + m;
    Mt = Mt + mt;
    for ii = 1:mt
        d = []; % 刷新数组d的长度
        for iii = 1:n
            % 用俩个信号中心点的欧氏距离的最小值来找到相对于的俩个信号
            d(iii) = (calculate_data(x(ii), 2) - real_data(iii, 2))^2 +...
                (calculate_data(x(ii), 2) - real_data(iii, 2))^2; 
        end
        [mmax, note] = min(d);
        Fc = real_data(note, 2); % 信号频率真实值
        Bw = real_data(note, 4); % 信号带宽真实值
        Ts = real_data(note, 3) - real_data(note, 5)/2; % 信号开始时间真实值
        Te = real_data(note, 3) + real_data(note, 5)/2; % 信号终止时间真实值
        fc = calculate_data(x(ii), 2); % 信号频率预测值
        bw = calculate_data(x(ii), 4); % 信号带宽预测值
        ts = calculate_data(x(ii), 3) - calculate_data(x(ii), 5)/2; % 信号开始时间预测值
        te = calculate_data(x(ii), 3) + calculate_data(x(ii), 5)/2; % 信号开始时间预测值
        T = real_data(note, 5); % 信号时长真实值
        Eavg = Eavg + abs(Fc-fc)/Bw + abs(Bw-bw)/Bw + abs(Ts-ts)/T...
            + abs(Te-te)/T;
%         nnn = nnn +1;
    end
end
Eavg = Eavg/(4 * Mt);

然后还修改了Signals_STFT,将函数内的随机信噪比改为函数的输入,使得可以通过输入特定值达到输出特定信噪比的图片的目的,为了以后画图做准备。同时也对Detect进行修改,以2为步进,0-16信噪比,每一个信噪比画1000张图用于对模型的验证,也会之后的画图提供数据支持。

% Detect.py  生成用于验证模型的图片和标签文件
num = 1000; %每个信噪比下图片的数量
for snr = 0:2:16
    save_path = ['E:\yolov5\data\images\', num2str(snr), 'dB\'];% 数据集根路径
    label_path = [save_path, 'labels\'];
    if(exist(label_path, 'dir')  ~= 7)     % 判断文件夹是否存在
       mkdir(label_path);                  % 不存在则创建文件夹
    end
    for i = 1:num
        [matrix, random_time] = Signals_STFT(snr); % 得到含有信号类型、f1、f2的矩阵
        saveas(gcf,[save_path, num2str(i), '.jpg']); % 保存图片
        close(); %关闭图片
        class = matrix(:,1);
        fid = fopen([label_path, [num2str(i), '.txt']], 'w'); % 创建label文本文件
        for n = 1:length(matrix(:, 1)) % length(matrix(:, 1))信号个数
            signal_class = class(n);
            if signal_class == 4 % 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;  % 高度及信号时长
            elseif signal_class == 3 % 2PSK区别对待
                x = matrix(n, 3)/120000;  % 中心点横坐标及中心频率
                y = random_time(n, 1); % 中心点纵坐标及中心时刻位置
                w = 14/875;   % 宽度 为了画出的框可以包含信号而增加像素点
                h = random_time(n, 2);  % 高度及信号时长   
            elseif signal_class == 1 % FM区别对待
                x = matrix(n, 3)/120000;  % 中心点横坐标及中心频率
                y = random_time(n, 1); % 中心点纵坐标及中心时刻位置
                % 基带信号频率:500  调制指数 5 
                w = 2 * (5+1) * 500/120000 + 14/875;   % 宽度 为了画出的框可以包含信号而增加像素点
                h = random_time(n, 2);  % 高度及信号时长   
            else  % AM和DSB
                x = matrix(n, 3)/120000;  % 中心点横坐标及中心频率
                y = random_time(n, 1); % 中心点纵坐标及中心时刻位置
                w = 2 * matrix(n, 2) / 120000 + 14/875;   % 宽度及带宽 为了画出的框可以包含信号而增加像素点
                h = random_time(n, 2);  % 高度及信号时长
            end
            signal_class = num2str(signal_class); 
            x = num2str(x);
            y = num2str(y);
            w = num2str(w); 
            h = num2str(h); 
            % ascii码 空格32 回车13
            label = strcat(signal_class, 32, x, 32, y, 32, w, 32, h, 13);
            for jj = 1:length(label)
                fprintf(fid, '%s', label(jj));   
            end 
        end
        fclose(fid);
        disp(['信噪比为',num2str(snr),'dB下的第',num2str(i),'张']);
    end
end

在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芃芃です

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值