clear all;close all;clc
%% 读取数据
filelist=dir('/Users/boopstore3/Desktop/matlab/shiyanchengxu/six/CTD_data');
filename1 = filelist(3:6,:);
for i=1:4
filename=filename1(i).name;
[lat,lon,gtime,data,names,h]=cnv2mat(filename);%读取经纬度,深度,观测时间和观测数据
data=data(:,2:4);names=names(2:4,:);%只保留压强(水深),温度和盐度
%% 数据质量控制
ind1=find(data(:,1)>0.3&data(:,1)<h);%截取有效水深
data=data(ind1,:);%截取有效水深的温度和盐度
ind2=find(data(:,1)==max(data(:,1)));%分开下放数据和回升数据
D_data=data(1:ind2,:);%下放数据
U_data=data(ind2:end,:);%上升数据
D_data(:,2)=smooth(D_data(:,2),50,'rloess');%滑动平均滤去噪点数据
D_data(:,3)=smooth(D_data(:,3),50,'rloess');
U_data(:,2)=smooth(U_data(:,2),50,'rloess');
U_data(:,3)=smooth(U_data(:,3),50,'rloess');
data=[D_data;U_data];
DATA=[];
for j=0.3:0.1:max(data(:,1)) % 从0.3米到最大水深,每隔0.1米取中位数作为中间水深的值
ind3=find(data(:,1)>=j&data(:,1)<=j+0.1);
DATA=[DATA;j+0.05,median(data(ind3,2:3),1)];
end
DATA(:,2)=smooth(DATA(:,2),10,'rloess'); % 再用滑动平均去除噪声数据
DATA(:,3)=smooth(DATA(:,3),10,'rloess');
%% 画图
figure(i)
set(0,'defaultfigurecolor','w')
hl1=plot(DATA(:,3),DATA(:,1),'r','linewidth',2); % 画温度
ax1=gca;
set(ax1,'xlim',[10 30],'ylim',[0 DATA(end,1)],'XMinorTick','on','ydir','reverse',...
'box','on','xcolor',get(hl1,'color'))
xlabel('Temperature(\circC)','fontsize',10)
ylabel('Depth(m)','fontsize',10)
set(ax1,'fontsize',10)
[hl2,ax2,ax3] = floatAxisX(DATA(:,2),DATA(:,1),'b','Salinity(psu)',[32 35 0 DATA(end,1)]); %画盐度
set(hl2,'linewidth',2)
set(ax2,'ydir','reverse','YMinorTick','on')
set(ax3,'fontsize',10)
set(get(ax3,'xLabel'),'fontsize',10)
set(gcf,'PaperPositionMode', 'manual')
set(gcf,'PaperUnits','centimeters')
set(gcf,'PaperPosition',[0 0 9.5 11.5])
set(gcf,'Papersize',[9.5 11.5])
end
matlab 批量导入CTD数据+温盐剖面图
最新推荐文章于 2023-11-07 18:02:58 发布