数学建模第二轮校赛(从不划水)

数学建模第二轮校赛

1)文件格式:
1号电压,2号电压,3号电压,4号电压,5号电压,6号电压,方向, 脉冲, 时间戳
1.61, 1.06, 0.97, 0.95, 0.98, 1.47, 1, 1, 102070423

2)电压值一共有六个,对应了六根钢丝绳的数据。一行数据就是一帧数据。第一列表示第一根绳子的电压值,第二列表示第二根绳子的电压值,…,第六列表示第六根绳子的电压值。

3)方向“0”代表下行,方向“1”表示上行。

4)脉冲:其实就是距离,通过距离传感器得到。从1到n递增,每一帧(一行数据代表一帧数据)对应一个脉冲数字,脉冲数每增加1,代表距离增加了0.4米。
可能有多帧数据对应一个脉冲(表示在0.4米内进行了多次测量)。在绘制波形图时,每一帧所对应的距离等于0.4米除以帧数。

5)时间戳主要用来给文件命名,避免重复。这个数据可以忽略。

6)钢丝绳长为960米,断丝的位置可以用帧表示。

7)每一个文件记录一次运行的监测数据,10个文件记录了10次往返运行的监测数据。注意上行和下行的监测数据不是从同一端记录。

代码部分

这个文档做的是总体数据处理
降噪:(参考的别人代码)
输出当前信噪比和方均根误差,返回处理后的信号:
sigH:硬阈值处理
sigS:   软阈值处理
sigG:   固定阈值处理
找缺陷:
我们利用上面处理过的三个信号取同一帧数内的平均值查找缺陷:
这里每运行一次输出一个data中一条绳子缺陷数量及位置。
%-- 2022/5/3 10:50 --%

降噪

加载数据
%% 需要改的地方只有这里data后面的数字及v后面的数字
load data1.mat
data=data1
Y=data.v1

原信号
figure(1)
plot(Y)
xlabel('横坐标');
ylabel('纵坐标');
title('原始信号');

硬阈值处理
lev=3;
sigH=wden(Y,'heursure','h','one',lev,'db4');%硬阈值去噪处理后的信号序列
figure(2)
plot(sigH)
xlabel('横坐标');
ylabel('纵坐标');
title('硬阈值去噪处理')

软阈值处理
lev=3;
sigS=wden(Y,'heursure','s','one',lev,'db4');%软阈值去噪处理后的信号序列
figure(3)
plot(sigH)
xlabel('横坐标');
ylabel('纵坐标');
title('软阈值去噪处理')

固定阈值处理
lev=3;
sigG=wden(Y,'sqtwolog','s','sln',lev,'db4');%固定阈值去噪处理后的信号序列
figure(4)
plot(sigG);
xlabel('横坐标');
ylabel('纵坐标');
title('固定阈值后的去噪处理')

计算信噪比SNR
Psig=sum(Y'*Y)/numel(Y);
Pnoi1=sum((Y-sigH)'*(Y-sigH))/numel(Y);
Pnoi2=sum((Y-sigS)'*(Y-sigS))/numel(Y);
Pnoi3=sum((Y-sigG)'*(Y-sigG))/numel(Y);
SNR1=10*log10(Psig/Pnoi1);
SNR2=10*log10(Psig/Pnoi2);
SNR3=10*log10(Psig/Pnoi3);

计算均方根误差RMSE
RMSE1=sqrt(Pnoi1);
RMSE2=sqrt(Pnoi2);
RMSE3=sqrt(Pnoi3);

输出结果
disp('-------------三种阈值设定方式的降噪处理结果---------------');
disp(['硬阈值去噪处理的SNR=',num2str(SNR1),',RMSE=',num2str(RMSE1)]);
disp(['软阈值去噪处理的SNR=',num2str(SNR2),',RMSE=',num2str(RMSE2)]);
disp(['固定阈值后的去噪处理SNR=',num2str(SNR3),',RMSE=',num2str(RMSE3)]);

找缺陷
这里我们开始找缺陷

确定要处理过后的信号
dnsig=sigH

记录帧数索引值
max_index=max(data.pulse)
index=1:max_index
index=index'

获得每一帧记录次数
count = hist(data.pulse,unique(data.pulse))

获得每一帧内的电压平均值
(这一步由于用了for循环可能执行有点久)
vol_mean=zeros(1,max_index)
for i=1:max_index
    vol_mean(i)=mean(dnsig(data.pulse==i))
end

画图
plot(vol_mean)

求降噪后平均值
(这里我们会发现降噪后平均值和原始平均值是一样的)
mean_all=mean(dnsig)
mean_origin=mean(data.v1)

求出题目中要求的量化定义
percent=abs(vol_mean-mean_all)./mean_all

画图
plot(percent)

给缺陷分类,并返回相应位置:
defect1:微小断丝索引值:1%~1.6%;
defect2:变形索引值:1.6%~2.5%;
defect3:轻度断丝索引值:2.5%~5%;
defect4:中度断丝索引值:5%~14%;
defect5:内部断股索引值:14%~;
defect1=(percent>0.01&percent<0.016)
defect2=(percent>0.016&percent<0.025)
defect3=(percent>0.025&percent<0.05)
defect4=(percent>0.05&percent<0.14)
defect5=(percent>0.14)

输出缺陷数目
disp('-------------缺陷数目---------------');
disp(['微小断丝数目=',num2str(sum(defect1))]);
disp(['变形数目=',num2str(sum(defect2))]);
disp(['轻度断丝数目=',num2str(sum(defect3))]);
disp(['中度断丝数目=',num2str(sum(defect4))]);
disp(['内部断股数目=',num2str(sum(defect5))]);
posted @ 2022-05-03 11:40  Link_kingdom  阅读(121)  评论(0编辑  收藏  举报