0
点赞
收藏
分享

微信扫一扫

毕业设计记录-检测参数代码和画图代码修改

文章目录

2022.1.25日的记录

之前的检测参数计算代码规定的是一次性就计算所有的数据,这给我想一张图一张图的看效果造成了困扰。所以修改了一下代码。一次只计算一个图。

for ii = 1:m % 遍历一个预测label文件中的所有信号
    calculate_signal = calculate_data(ii, :); % 一个预测信号
    delect_class = calculate_signal(1); % 得到预测信号的类别
     % 找出文件名一样的实际信号label文件中与calculate_signal相同类别的信号的行序列号
    x = find(real_data(:, 1) == delect_class);
    if isempty(x) % 检测出了实际信号中不存在的信号时
        Mf = Mf + 1; % 虚假信号加1
    else
        d = []; % 刷新数组d的长度
        for iii = 1:length(x) % 遍历所有找到的与calculate_signal类别相同的实际信号
            % 用俩个信号中心点的欧氏距离的最小值来找到与calculate_signal匹配的实际信号
            x_c = calculate_signal(2); y_c = calculate_signal(3); % calculate_signal中心坐标(x_c,y_c)
            x_r = real_data(x(iii), 2); y_r = real_data(x(iii), 3); % 实际信号中心坐标(x_r,y_r)
            d(iii) = (x_c - x_r)^2 + (y_c - y_r)^2;   % 算俩点距离的平方
        end
        [mmin, note] = min(d); % 得到最小值所在的d向量的序列号note
        signal_note = x(note); % 得到最小值所对应的实际信号的在矩阵real_data中的行序列号signal_note
        real_signal = real_data(signal_note, :); % 得到与calculate_signal匹配的实际信号
        cbox = calculate_signal(2: 5); % calculate_signal的box [x, y, w, h]
        rbox = real_signal(2: 5); % real_signal的box [x, y, w, h]
        iou = Box_IOU(cbox, rbox); % 计算iou
        if iou > 0.8
            Mt = Mt + 1; % 真实信号个数加1
            Fc = real_signal(2); % 实际信号频率值
            Bw = real_signal(4); % 实际信号带宽值
            Ts = real_signal(3) - real_signal(5)/2; % 实际信号开始时间值
            Te = real_signal(3) + real_signal(5)/2; % 实际信号终止时间值
            fc = calculate_signal(2); % 真实信号频率值
            bw = calculate_signal(4); % 真实信号带宽值
            ts = calculate_signal(3) - calculate_signal(5)/2; % 真实信号开始时间值
            te = calculate_signal(3) + calculate_signal(5)/2; % 真实信号开始时间值
            T = real_signal(5); % 实际信号时长值
            Eavg = Eavg + abs(Fc-fc)/Bw + abs(Bw-bw)/Bw + abs(Ts-ts)/T...
                + abs(Te-te)/T;
        else
            Mf = Mf + 1; % 虚假信号加1
        end
    end
end

画图代码中增加和修改了:
之前每个图的参数都是在循环中计算,今天修改为先将参数全部汇总到一个矩阵中,最后在使用sum函数计算。方便观察数据。

    for i = 1:num % 遍历每个SNR下的label文件夹下的一共num(1000)个labels文本文件,包括预测和实际
        % 判断文件是否存在,存在就读取文件。yolov5如果一张图检测不到目标就不会输出txt文件。
        if(exist([[CIOU_DIOU_NMS_5000_path, num2str(dB), 'dB\labels\'],[num2str(i),'.txt']], 'file') == 2)     
            ML = PdPfEavg([[real_path, num2str(dB), 'dB\labels\'],[num2str(i),'.txt']],...
                [[CIOU_DIOU_NMS_5000_path, num2str(dB), 'dB\labels\'],[num2str(i),'.txt']]);
            % N3ME_5000 : [N, M, Mt, Mf, Eavg]
            N3ME_5000 = [N3ME_5000; ML];
        else % 不存在就记录下对应的实际信号的个数并开始下一个label文件
            real_data = load([[real_path, num2str(dB), 'dB\labels\'],[num2str(i),'.txt']]);
            N = length(real_data(:,1)); % 一张图中实际信号的个数
            N3ME_5000 = [N3ME_5000; N, 0, 0, 0, 0]; % 记录对应的实际信号的个数N并填充矩阵行数
            disp(['训练集5000中', [num2str(dB),'dB下第', num2str(i), '张一个都没有检测出来']])
            continue;
        end

增加了将所有的计算结果用一个3维数组保存下来的代码

    N3ME_20000_dB(:, :, dB/2 + 1) = N3ME_20000; % 保存所有db下的结果

增加了打印模型不敏感的图片的代码

disp(['训练集20000中', [num2str(dB),'dB下第', num2str(i), '张一个都没有检测出来']])
举报

相关推荐

0 条评论