📄 rsac.m
字号:
%RSAC Read SAC binary files.% RSAC('sacfile') reads in a SAC (seismic analysis code) binary% format file into a 3-column vector.% Column 1 contains time values.% Column 2 contains amplitude values.% Column 3 contains all SAC header information.% Default byte order is big-endian. M-file can be set to default% little-endian byte order.%% usage: output = rsac('sacfile')%% Examples:%% KATH = rsac('KATH.R');% plot(KATH(:,1),KATH(:,2))%% [SQRL, AAK] = rsac('SQRL.R','AAK.R');%% by Michael Thorne (4/2004) mthorne@asu.edufunction [varargout] = rsac(varargin);for nrecs = 1:nargin sacfile = varargin{nrecs};%---------------------------------------------------------------------------% Default byte-order% endian = 'big-endian' byte order (e.g., UNIX)% = 'little-endian' byte order (e.g., LINUX)endian = 'little-endian';if strcmp(endian,'big-endian') fid = fopen(sacfile,'r','ieee-be'); elseif strcmp(endian,'little-endian') fid = fopen(sacfile,'r','ieee-le'); end% read in single precision real header variables:%---------------------------------------------------------------------------for i=1:70 h(i) = fread(fid,1,'single');end% read in single precision integer header variables:%---------------------------------------------------------------------------for i=71:105 h(i) = fread(fid,1,'int32');end% Check header version = 6 and issue warning%---------------------------------------------------------------------------% If the header version is not NVHDR == 6 then the sacfile is likely of the% opposite byte order. This will give h(77) some ridiculously large% number. NVHDR can also be 4 or 5. In this case it is an old SAC file% and rsac cannot read this file in. To correct, read the SAC file into% the newest verson of SAC and w over.% if (h(77) == 4 | h(77) == 5) message = strcat('NVHDR = 4 or 5. File: "',sacfile,'" may be from an old version of SAC.'); error(message)elseif h(77) ~= 6 message = strcat('Current rsac byte order: "',endian,'". File: "',sacfile,'" may be of opposite byte-order.'); error(message)end% read in logical header variables%---------------------------------------------------------------------------for i=106:110 h(i) = fread(fid,1,'int32');end% read in character header variables%---------------------------------------------------------------------------for i=111:302 h(i) = (fread(fid,1,'char'))';end% read in amplitudes%---------------------------------------------------------------------------YARRAY = fread(fid,'single');if h(106) == 1 XARRAY = (linspace(h(6),h(7),h(80)))'; else error('LEVEN must = 1; SAC file not evenly spaced')end % add header signature for testing files for SAC format%---------------------------------------------------------------------------h(303) = 77;h(304) = 73;h(305) = 75;h(306) = 69;% arrange output files%---------------------------------------------------------------------------OUTPUT(:,1) = XARRAY;OUTPUT(:,2) = YARRAY;OUTPUT(1:306,3) = h(1:306)';%pad xarray and yarray with NaN if smaller than header fieldif h(80) < 306 OUTPUT((h(80)+1):306,1) = NaN; OUTPUT((h(80)+1):306,2) = NaN;endfclose(fid);varargout{nrecs} = OUTPUT;end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -