Matlab算中国沿海七个验潮站多年调和常数

数据来自网站http://uhslc.soest.hawaii.edu/data/?rq#uh288a

中国沿海有十几个验潮站,大部分验潮站是75-97年的每小时的数据。我下载的是dat格式的ascii文本数据,个人觉得csv格式更好,数据方便读取。选取其中七个计算,分别是'Dalian','lianyungang','Lusi','Kanmen','Shanwei','Zhapo','Beihai',算各个验潮站每一年的调和常数。只算四个主要分潮'M2';'S2';'O1';'K1'。

数据是这样:

 

数据只需要第四列到最后一列。

下面附上代码:

 1 clear;
 2 tic
 3 location={'Dalian','lianyungang','Lusi','Kanmen','Shanwei','Zhapo','Beihai'};   
 4 latitude=[38.925,34.750,32.133,28.088,22.750,21.583,21.483];
 5 for j=1:length(location)
 6     Dir=fullfile('C:','Users','Lenovo','Desktop','Documents','本科生毕业论文','验潮站数据资料',location{j});
 7     File=dir(Dir);
 8     File_num=length(File);
 9     amp_pha=struct('time',{[]},'data',{[]});
10     for i=3:File_num
11         File_name=File(i).name;
12         fileID=fopen(fullfile(Dir,File_name));
13         C = textscan(fileID,'%s %s %s %f %f %f %f %f %f %f %f %f %f %f %f','headerlines',1);
14         fclose(fileID);
15         data=zeros(size(C{1},1),12);   
16         for m=1:12
17             data(:,m)=C{1,m+3};
18         end
19         data=data';
20         data=reshape(data,[1,numel(data)]);
21         data(data==9999)=NaN;
22         [NAME,FREQ,TIDECON,XOUT]=t_tide(data,'interval',1,'latitude',latitude(j),'start time',[str2double(File_name(6:7))+1900,00,00,00],'rayleigh',['M2';'S2';'O1';'K1'] );
23         amp_pha(i-2).time=str2double(File_name(6:7))+1900;   amp_pha(i-2).data=TIDECON(:,[1,3]);
24     end
25     save([location{j},'.mat'],'amp_pha');
26 end
27 toc

 关于T_Tide的使用可以参考http://blog.sina.com.cn/s/blog_aed5bd1d0102w9vb.html

第21行,数据有很多9999的坏数据用NaN代替。

最终得到的结果用struct类型保存,第一个字段是多少年time,第二个字段是四个分潮调和常数data。结果用mat文件保存。

查看Beihai的结果:

>> clear;
>> load('Beihai.mat')

 

———————————20221109补充————————————

可能有同学说http://uhslc.soest.hawaii.edu/data/?rq#uh288a进不去,可能需要科学冲浪。实在进不去就找找其他的SSH数据吧,国外公开的资料数据集还是很多的。

另外,直接下载nc格式吧,这是几年前写的代码了。nc格式读取方便很多!

 

posted @ 2019-05-06 23:22  Keegen  阅读(1875)  评论(5编辑  收藏  举报