%读取地震数据 *.SG2
clc
clear all
fid01 = fopen ('60-1.SG2' ,'r'); %打开SG2 数据文件
%%
id=fread(fid01,1,'int16');% 文件描述块ID
char_id = dec2hex (id);%3A55
bb=fread(fid01,1,'int16');%所使用的SEG标准的版本号
%%
M = fread(fid01,1 ,'uint16') ; %从文件描述块中读取道指针子块大小
N = fread(fid01,1 ,'uint16') ; %从文件描述块中读取采样道数(N)
fread(fid01,1 ,'uint8') ; %为01h 或02h ,这主要取决于第9 、10 字节所存放的字符串结束符个数
fread(fid01,1 ,'uint16') ; %字符串结束符,起着将文件描述块和道描述块中的多个字符串分开的作用
fread(fid01,1 ,'uint8') ; %行结束符的大小(01h或02h)
fread(fid01,1 ,'uint16') ; %行结束符
fread(fid01,9,'uint16'); %SEGO2 保留部分
sym Pointers
for i=1:N
Pointers(i)=fread(fid01, 1, 'int32');
end;
for i = 1 :N
fread (fid01) ; %将读数指针拨至文件开始位置
fseek (fid01 ,Pointers (i) ,'bof') ; %将读数指针拨至第i道的道描述块起始位置
temp = fread (fid01 ,1 ,'int16') ; %读取道描述块的0 ,1 字节
char_temp= dec2hex (temp); % 4422
B_size = fread (fid01 ,1 ,'uint16') ; %读取道描述块的大小
D_size = fread (fid01 ,1 ,'ulong') ; %读取数据块的字节大小
S_number = fread (fid01 ,1 ,'ulong'); %读取数据块中的采样点数(S number)
D_format = fread (fid01 ,1 ,'uchar') ; %读取数据存储格式代码(D format)
chx = dec2hex (D_format) ;
fread(fid01,19,'uchar');
fseek (fid01,B_size-32,'cof') ; %将读数指针拨至数据块的起始位置
for j = 1 :S_number
Data(i,j) = fread (fid01,1,'float') ;%该数组为数据存储数组
DData(j,i)=Data(i,j);
end
end
fclose (fid01) ;%文件存储部分,几种方式,根据需要选择。%%
% success=xlswrite('D:\MATLAB\sg2read\1.xls',Data)%%
% if NUM==1
% dlmwrite('data_1.txt',Data);%dlmwrite('filename', M, 'D', R, C)
%从矩阵M的第R行、第C列开始,作为要写矩阵块的左 %上角,将数据用D分割写入文件。M为要保存数据,D可为\t表示空格分隔。
%%
% dlmwrite('data_1.dat',Data);%%
% save 'data_1_1.txt' Data -ascii;
AAA=zeros(8192,25);
DData=DData(1:8192,:);
for i=1:8192
AAA(i,1)=0.0000625*i;
end
for i=1:24
AAA(:,i+1)=DData(:,i);
end
save -ascii 60-1.dat AAA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 程序不够完整,希望做这方面的给与完善一下,有好的建议给我留言吧