实验数据处理
创始人
2024-02-09 21:20:47
0

来源

加热冷却温度实验,相同实验参数可能有一次或多次重复实验,一次实验中也可能有多次。如何分别每一次周期,并把每个周期的数据都分析出来,成为一个问题。
请添加图片描述

解决思想

  1. 想根据冷却后的平台划分不同周期,但是由于冷却介质温度不同,平台数值也不同,并且部分时间冷却为到出现平台就进行了加热,只是达到 threshold就加热。
  2. 根据 相邻 数据点的 difference 分别,但是当加热功率小 冷却速度慢,采样频率高(200 Hz)相邻点的差值基本没有太大变化。
  3. 最终采取 第 N 个点 和 N+ Num 个点之间的斜率作为参考斜率,区分出加热过程冷却过程 和稳态过程, 并结合 peek 点 进一步判断斜率是不是在加热阶段和冷却阶段。 Num20, 采样频率200Hz, 实际只有0.1s。

实现过程

子文件夹及文件处理

由于实验数据在 ‘.mat’ 文件中,改文件在root目录下的二级目录中。

  • 关于怎么获取改文件可以参考 Matlab 如何获取子文件夹或子子文件夹目录名与目录下文件名 及其文件名判断。
  • 关于怎么获取峰值 参考 matlab所有峰值,局部最大
  • 另外还有几个有用函数参考 matlab帮助: ischange, diff, findchangepts

划分实验


load(TemperatureMatFile, 'temperature_series');   	%  加载数据
Time = temperature_series(1,:);
T1   = temperature_series(3,:);% TF = ischange(T1, 'mean', 'Threshold',10);
% pts=findchangepts(T1,'Statistic','linear','MinThreshold',30);% T1_med = medfilt1(T1,7);						% 数据平滑
T1_med = transpose( smooth(T1,17) );
NumThreshold = 20;          % compare the N+NumThreshold with N for slope
T1_tmp = T1_med(NumThreshold+1 :end ) - T1_med(1:end-NumThreshold);
T1_slope = T1_tmp / (0.005*NumThreshold); % 0.005 for 200 Hz sampling rate
% T1_slope_smooth = medfilt1(T1_slope, 5);
T1_slope_smooth = transpose( smooth(T1_slope, 17) );[pks,locs] = findpeaks(T1, 'MinPeakDistance', 1000, 'MinPeakHeight', 60) ; 		% 找到peekind_1 = 1;
ind_2 = ind_1;
if isempty(locs)			% .mat 文件没有存储加热到60度的话直接丢弃,返回空ExpResult = struct.empty;return;
end
for i = 1:length(locs)ind_1 = ind_2;				% 一个文件中有多次实验,前一个实验冷却结束时间是后一次加热备选区间ind_2 = locs(i);% heating sectionindex = false(1,(length(T1)-NumThreshold));index(ind_1:ind_2) = true;												% 本次分析所提取的数据,针对一个文件中有多次实验% heating start below 25 degC are not guaranteedheat_start = find(T1(index)<25, 1, 'last')+ ind_1;         if isempty(heat_start)						 % 由于加热不一定每次都是从 25度开始加热,heat_start = find(T1_slope_smooth(index)>2, 1, 'first') + ind_1;  %这个 大于2  是绘制了 斜率曲线后 决定的,需要尝试endheat_stop    = find(T1(index)<60, 1, 'last') + ind_1;heat_time(i)    = Time(heat_stop) - Time(heat_start);heat_T(i,1)  = T1(heat_start);heat_T(i,2)  = T1(heat_stop);heat_ind(i,1)= heat_start;heat_ind(i,2)= heat_stop;% cooling sectionindex = false(1,(length(T1)-NumThreshold));index(ind_2:length(T1)-NumThreshold) = true;cool_start = find(T1(index)<60, 1, 'first') +ind_2;index(ind_2:cool_start) = false;        % cooling stop point larger than cooling start% cooling to 25 degC are not guaranteedcool_stop  = find(T1(index)<25, 1, 'first') +cool_start;if isempty(cool_stop)			%  cooling没有冷却到25度时 通过斜率判断是否稳定,0.2也是绘制斜率曲线后决定的。cool_stop  = find(T1_slope_smooth(index)<0.3 & T1_slope_smooth(index)>0.2, 1, 'first') +cool_start;if isempty(cool_stop)		% 如果没有 0.3  0.2之间的数,再次改变选取精度范围cool_stop  = find(T1_slope_smooth(index)<0.3 & T1_slope_smooth(index)>0, 1, 'first') +cool_start;endendcool_time(i)  = Time(cool_stop) - Time(cool_start);cool_T(i,1)  = T1(cool_start);cool_T(i,2)  = T1(cool_stop);cool_ind(i,1)= cool_start;cool_ind(i,2)= cool_stop;ind_2 = cool_stop;% idx = heat_ind(i,1):heat_ind(i,2);
% plot(idx, T1(idx), '--r', 'LineWidth', 1.2);
% idx = cool_ind(i,1):cool_ind(i,2);
% plot(idx, T1(idx), '--b', 'LineWidth', 1.5);
% disp('---')
% pause(0.5)end

实验结果在 struct 中,怎么排序

结构体转table,然后利用 sortrows() 排序,参考MATLAB 矩阵按不同行列排序。

实验结果

下图中红色虚线是提取的加热阶段,蓝色虚线是选取的冷却阶段。蓝色虚线和红色虚线是有间隔的。通过调参可以控制加热夹断的选取和冷却阶段的选取。
在这里插入图片描述

在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...