静力触探数据智能预处理(2)
前言
数据处理方式已由手工1.0、计算机辅助2.0到人工智能3.0的趋势发展。现场采集的静力触探数据通常是由仪器厂家开发的数据采集软件保存,将原始数据导入Excel中,数据格式需要花费一定的时间整理,当数据量比较大的时候容易出错。利用matlab开发了静力触探数据快速读取程序,可以实现对原始数据的一键提取并快速分类,非专业编写,代码仅供参考。
文章目录
- 静力触探数据智能预处理(2)
- 前言
- 1、原始数据格式
- 2、自编函数
- 2.1、Draw_JT函数
- 2.2、Draw_xiaosan函数
- 2.3、Save_excel函数
- 3、数据提取函数
- 3.1 多个消散数据提取
- 3.2、静力触探数据与单个消散数据提取
1、原始数据格式
数据采集仪保存的原始记录是*.kw格式(或者其他格式),可转换成用记事本打开的*.txt格式或者用于excel的*.csv格式,数据处理时要在excel中删除表头或其它符号,比较浪费时间,原始数据格式如下:
利用matlab编程可以将原始数据读取出来,并转化成标准静力触探数据格式。
2、自编函数
2.1、Draw_JT函数
此函数的功能是将绘制原始静力触探曲线图。
function Draw_JT(jt_data)
% 画静探曲线图
figure(1);
set(gcf,'position',[20 50 800 800]);
subplot(1,3,1),plot(jt_data(:,2),jt_data(:,1),'r');
set(gca,'ydir','reverse');
set(gca,'xaxislocation','top');
xlabel('q_c/mPa','FontWeight','bold');
ylabel('Depth/m','FontWeight','bold');
set(gca,'fontname','times new roman','fontsize',16);
subplot(1,3,2),plot(jt_data(:,3),jt_data(:,1),'b');
set(gca,'ydir','reverse');
set(gca,'xaxislocation','top');
xlabel('f_s/kPa','FontWeight','bold');
% ylabel('深度/m','FontWeight','bold');
set(gca,'fontname','times new roman','fontsize',16);
subplot(1,3,3),plot(jt_data(:,4),jt_data(:,1),'g');
set(gca,'ydir','reverse');
set(gca,'xaxislocation','top');
xlabel('u_2/kPa','FontWeight','bold');
% ylabel('深度/m','FontWeight','bold');
set(gca,'fontname','times new roman','fontsize',16);
成图效果如下:
2.2、Draw_xiaosan函数
此函数的功能是绘制孔压消散曲线图。
function Draw_xiansan(xs_data)
% 画消散曲线图
figure(2);
set(gcf,'position',[50 50 600 600]);
plot(xs_data(:,1),xs_data(:,4),'r');
% set(gca,'ydir','reverse');
% set(gca,'xaxislocation','top');
ylim([0 1.1*max(xs_data(:,4))]);
ylabel('u_2/kPa','FontWeight','bold');
xlabel('Time/s','FontWeight','bold');
set(gca,'fontname','times new roman','fontsize',16);
title('孔压消散曲线','fontname','宋体');
2.3、Save_excel函数
此函数功能是将静探原始数据保存为excel中,用于后续处理。
function save_xls(jt_data,PathName)
% 将静探数据保存为excel
prompt = {'请输入要保存的文件名:','请输入保存的表格名(sheet):'};
dlgtitle = '保存静探数据为excel';
dims = [1.5 70];
definput = {'JTdata.xls','sheet1'};
answer = inputdlg(prompt,dlgtitle,dims,definput);
filename_jt = strcat(PathName,answer{1});
sheet = answer{2};
xlswrite(filename_jt,jt_data,sheet);
使用此函数时,会自动弹出窗口,确定数据保存的位置以及sheet。
3、数据提取函数
3.1 多个消散数据提取
当原始数据中包含多段消散数据时,使用此程序可快速提取静力触探数据,并将孔压消散数据分类。代码如下:
close all
clear
clc
% 读取静力触探数据并保存为excel
% 程序修改,shangxiang
% 2023年2月6日
% 打开文件所在的文件夹,读取静探数据文件
[inFileName,PathName] = uigetfile('*.kw',...
'选择静探数据文件','MultiSelect','on');
filename = strcat(PathName,inFileName);
% 将静探数据读取出来
data = importdata(filename);
a = data.data;
n = length(a);
% 提取数据,找出数据起点
for i = 1:n
b = a(i);
k = i;
if b == 0
break
end
end
% 判断是否包含消散数据
xiansan = 0;
% 数据格式转换
d = a(k-1:end);
xiansan_begin = 0;
for i = 2:length(d)
if isnan(d(i))&&isnan(d(i-1))
xiansan_begin = i;
fprintf('...这个数据文件中包含消散数据\n消散数据从%d开始...\n',xiansan_begin);
break;
end
end
% 将静探数据与消散数据分离
jt_data_lie = d(1:xiansan_begin-2);
jt_data = reshape(jt_data_lie,6,[]);
jt_data = jt_data';
jt_data = jt_data(:,2:6);
save_xls(jt_data,PathName);
xs_data_lie = d(xiansan_begin:end);
% 将消散数据分离
if xiansan_begin ~= 0,xs_num = 1;end
for i = 2:length(xs_data_lie)
if isnan(xs_data_lie(i))&&isnan(xs_data_lie(i-2))
xs_begin(xs_num) = i;
xs_num = xs_num + 1;
end
end
xs_begin = [1,xs_begin,length(xs_data_lie)+3];
fprintf('...这个数据文件中包含%d组消散数据...\n',xs_num);
for i = 2:xs_num+1
clear xs_data
xs_data = xs_data_lie(xs_begin(i-1):xs_begin(i)-3);
xs_data = reshape(xs_data,6,[]);
xs_data = xs_data';
xs_data = xs_data(:,2:6);
save_xls(xs_data,PathName);
end
%
% % 数据格式说明
% % 一共有五列数据
% % 第一列为深度数据
% % 第二列为锥尖阻力数据
% % 第三列为侧壁摩擦力数据
% % 第四列为孔隙水压力数据
% % 第五列为探头倾角数据
%
%
% % 将静探数据保存至excel文件中
% % save_xls(jt_data,PathName);
%
% % 绘制静探曲线图
Draw_JT(jt_data);
%
% % 绘制消散曲线图
% % Draw_xiansan(xs_data);
% % save_xls(xs_data,PathName);
%
%
% time = xs_data(:,1);
% u2 = xs_data(:,4);
% u2_guiyi = (u2 - min(u2))/(max(u2) - min(u2));
% u2_guiyi_smooth = smoothdata(u2_guiyi,'loess',50);
% figure(11);
% % plot(log(time),u2_guiyi);hold on
% plot(log(time),u2_guiyi_smooth);
% xlabel('log(t)','FontWeight','bold','fontname','times new roman');
% ylabel('归一化u_2','FontWeight','bold');
% set(gca,'fontsize',16);
% title('孔压消散曲线图','fontname','宋体');
%
% % sheet = inFileName(1:end-3);
% % filename_png = strcat(PathName,sheet,'.png');
% % % 保存曲线图
% % print(gcf, '-dpng', '-r600', filename_png)
%
3.2、静力触探数据与单个消散数据提取
此程序的功能是将单个孔压消散数据提取出来,并与静力触探数据分离。
close all
clear
clc
% 读取静力触探数据并保存为excel
% 程序修改,shangxiang,2023年8月30日。
% 打开文件所在的文件夹,读取静探数据文件
[inFileName,PathName] = uigetfile('*.kw',...
'选择静探数据文件','MultiSelect','on');
filename = strcat(PathName,inFileName);
% 将静探数据读取出来
data = importdata(filename);
a = data.data;
n = length(a);
% 提取数据,找出数据起点
for i = 1:n
b = a(i);
k = i;
if b == 0
break
end
end
% 判断是否包含消散数据
xiansan = 0;
% 数据格式转换
d = a(k-1:end);
xiansan_begin = 0;
for i = 2:length(d)
if isnan(d(i))&&isnan(d(i-1))
xiansan_begin = i;
fprintf('...这个数据文件中包含消散数据\n消散数据从%d开始...\n',xiansan_begin);
d(i) = [];
break;
end
end
if xiansan_begin == 0
fprintf('...这个数据文件中不包含消散数据...\n');
xiansan_begin = length(d) + 2;
end
% 将静探数据与消散数据分离
a_new = reshape(d,6,[]);
a_new_new = a_new';
data_new = a_new_new(:,2:6);
jt_lie = ( xiansan_begin - 2 )/6;
jt_data = data_new(1:jt_lie,:);
xs_data = data_new(jt_lie+1:end,:);
% 数据格式说明
% 一共有五列数据
% 第一列为深度数据
% 第二列为锥尖阻力数据
% 第三列为侧壁摩擦力数据
% 第四列为孔隙水压力数据
% 第五列为探头倾角数据
% 将静探数据保存至excel文件中
save_xls(jt_data,PathName);
% 绘制静探曲线图
Draw_JT(jt_data);
% 绘制消散曲线图
% Draw_xiansan(xs_data);
save_xls(xs_data,PathName);
% time = xs_data(:,1);
% u2 = xs_data(:,4);
% u2_guiyi = (u2 - min(u2))/(max(u2) - min(u2));
% u2_guiyi_smooth = smoothdata(u2_guiyi,'loess',50);
% figure(11);
% % plot(log(time),u2_guiyi);hold on
% plot(log(time),u2_guiyi_smooth);
% xlabel('log(t)','FontWeight','bold','fontname','times new roman');
% ylabel('归一化u_2','FontWeight','bold');
% set(gca,'fontsize',16);
% title('孔压消散曲线图','fontname','宋体');
% sheet = inFileName(1:end-3);
% filename_png = strcat(PathName,sheet,'.png');
% % 保存曲线图
% print(gcf, '-dpng', '-r600', filename_png)
注意,当使用此程序读取其他数据格式时,需要适当的修改代码。