⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 write_segy_file.m

📁 基于Matlab的地震数据处理显示和测井数据显示于处理的小程序
💻 M
📖 第 1 页 / 共 2 页
字号:
     two_bytes(22)=0;    end  endendfwrite(fid,[jobid lineid reelid],'int32');fwrite(fid,two_bytes,'int16');if param.print, disp('Binary reel header written'), end;%   Write headers and tracesnh=size(seismic.header_info,1);start=zeros(nh,1);bytes=zeros(nh,1);index=zeros(nh,1);kk=1;[start,bytes,index,kk]=set_parameters(seismic,'ds_seqno',1,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'ffid',9,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'o_trace_no',13,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'source',17,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'cdp',21,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'seq_cdp',25,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'trc_type',29,2,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'offset',37,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'depth',49,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'sou_h2od',61,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'rec_h2od',65,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'sou_x',73,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'sou_y',77,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'sou_elev',45,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'rec_x',81,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'rec_y',85,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'rec_elev',41,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'gen_scale_factor',69,2,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'gen_scale_factor',71,2,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'gen_scale_factor',89,2,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'number_of_samples',115,2,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'samp_int',117,2,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'lag',109,2,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'cdp_x',181,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'cdp_y',185,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'iline_no',189,4,start,bytes,index,kk,param.print);[start,bytes,index,kk]=set_parameters(seismic,'xline_no',193,4,start,bytes,index,kk,param.print);%       Add user-specified headersfor ii=1:length(param.headers)   if length(param.headers{ii}) ~= 3      disp([char(13),'  Error in specification of headers to be written to file: ', ...          cell2str(param.headers{ii}(1))])      error(' Probably insufficient number of parameters')   end   [start,bytes,index,kk]=set_parameters(seismic,param.headers{ii}{1}, ...        param.headers{ii}{2},param.headers{ii}{3},start,bytes,index,kk,param.print);endstart(kk:end)=[];    % Remove unneeded, previously reserved array elementsbytes(kk:end)=[];    % Remove unneeded, previously reserved array elementsindex(kk:end)=[];    % Remove unneeded, previously reserved array elementsfor ii=1:ntr  write_trace(fid,seismic.traces(:,ii),seismic.headers(index,ii),start,bytes,fidx);endfclose(fid);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [start,bytes,index,kk]=set_parameters(seismic,mnem,sb,nb,start,bytes,index,kk,iprint)% Function sets values start(index),bytes(index) to the starting location% of the header mnemonic and increments index% seismic    seismic structure% mnem    header mnemonic whose starting location in the four-byte representation %         (nb=4) or the two-byte representation (nb=2) needs to be set% sb      starting byte% nb      number of bytes% start   array where the index for the two-byte and four-byte header is stored% bytes   array where the number of bytes required by this header is stored% index   index into row of header which contains the header values of %         the mnemonic mnem% kk      next location in arrays start and bytes% OUTPUT% start   updated start array% bytes   updated bytes array% index   updated index% kk      input index incremented by 1% iprint  print-out control parameter: 1 printout, 0 no printoutglobal S4Mif S4M.case_sensitive   idx=find(ismember(seismic.header_info(:,1),mnem));else   idx=find(ismember(lower(seismic.header_info(:,1)),mnem));endif isempty(idx)  if iprint, disp(['Header ',mnem,' not found and not written to file ']), end  return, endindex(kk)=idx;bytes(kk)=nb;if nb == 2  temp=fix((sb-1)/2);  if temp*2 ~= sb-1    error(['Starting byte location for header ',mnem,'(',num2str(sb),' is not odd'])  else    start(kk)=temp+1;  endelse    temp=fix((sb-1)/4);  if temp*4 ~= sb-1    error(['Starting byte location for header ',mnem,'(',num2str(sb),' is not 1 plus a multiple of 4'])  else    start(kk)=temp+1;  end  endkk=kk+1;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function write_trace(fid,trace,headers,start,bytes,fidx)% Function writes one seismic trace together with its header to file% fid     file identification number% trace   seismic trace% headers header values associated with the trace% start   starting four-byte or two-byte index in the 240-byte header %         for each header value% bytes   number of bytes for each header value% fidx    format index;%         fidx=0; no conversion%         fidx=1; conversion to IMB floating point format% nsamp=length(trace);nh=length(headers);fbytes=zeros(60,1);tbytes=zeros(120,1);for ii=1:nh   if bytes(ii) == 4      fbytes(start(ii))=headers(ii);   else      tbytes(start(ii))=headers(ii);   endendfwrite(fid,fbytes( 1: 7),'int32');fwrite(fid,tbytes(15:18),'int16');fwrite(fid,fbytes(10:17),'int32');fwrite(fid,tbytes(35:36),'int16');fwrite(fid,fbytes(19:22),'int32');fwrite(fid,tbytes(45:90),'int16');fwrite(fid,fbytes(46:60),'int32');% Write traceif fidx == 0   fwrite(fid,trace,'float32');else   error('IBM floating point not yet implemented')end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function ascii_header=make_header% Function creates ASCII version of standard EBCIC header of SEG-Y formatascii_header=char(...'C 1 CLIENT                        COMPANY                       CREW NO', ...         'C 2 LINE            AREA                        MAP ID ', ...                          'C 3 REEL NO           DAY-START OF REEL     YEAR      OBSERVER', ...                   'C 4 INSTRUMENT: MFG            MODEL            SERIAL NO', ...                       'C 5 DATA TRACES/RECORD        AUXILIARY TRACES/RECORD         CDP FOLD', ...           'C 6 SAMPLE INTERNAL         SAMPLES/TRACE       BITS/IN      BYTES/SAMPLE', ...        'C 7 RECORDING FORMAT        FORMAT THIS REEL        MEASUREMENT SYSTEM', ...           'C 8 SAMPLE CODE: FLOATING PT     FIXED PT     FIXED PT-GAIN     CORRELATED ', ...      'C 9 GAIN  TYPE: FIXED     BINARY     FLOATING POINT     OTHER ', ...                   'C10 FILTERS: ALIAS     HZ  NOTCH     HZ  BAND    -     HZ  SLOPE    -    DB/OCT ', ...  'C11 SOURCE: TYPE            NUMBER/POINT        POINT INTERVAL', ...                   'C12     PATTERN:                           LENGTH        WIDTH', ...                   'C13 SWEEP: START     HZ  END     HZ  LENGTH      MS  CHANNEL NO     TYPE', ...         'C14 TAPER: START LENGTH       MS  END LENGTH       MS  TYPE', ...                      'C15 SPREAD: OFFSET        MAX DISTANCE        GROUP INTERVAL', ...                    'C16 GEOPHONES: PER GROUP     SPACING     FREQUENCY     MFG          MODEL', ...        'C17     PATTERN:                           LENGTH        WIDTH', ...                   'C18 TRACES SORTED BY: RECORD     CDP     OTHER', ...                                  'C19 AMPLITUDE RECOVEY: NONE      SPHERICAL DIV       AGC    OTHER', ...                'C20 MAP PROJECTION                      ZONE ID       COORDINATE UNITS', ...           'C21 PROCESSING:', ...                                                                  'C22 PROCESSING:', ...                                                                  'C23 ', ...                                                                             'C24 ', ...                                                                             'C25 ', ...                                                                             'C26 ', ...                                                                             'C27 ', ...                                                                             'C28 ', ...                                                                             'C29 ', ...                                                                             'C30 ', ...                                                                             'C31 ', ...                                                                             'C32 ', ...                                                                             'C33 ', ...                                                                             'C34 ', ...                                                                             'C35 ', ...                                                                             'C36 ', ...                                                                             'C37 ', ...                                                                             'C38 ', ...                                                                             'C39 ', ...                                                                             'C40 END EBCDIC')';%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function ebcdic=ascii2ebcdic(ascii)% Function converts ASCII string to EBCDIC% see http://www.room42.com/store/computer_center/code_tables.shtml% Date Feb. 20, 2000;  written by E. R.% INPUT% ascii         ASCII string% OUTPUT% ebcdic	EBCDIC string%   		  ebcdic=ascii2ebcdic(ascii)pointer =  ...  [0  16  64 240 124 215 125 151  75  75  75  75  75  75  75  75   1  17  90 241 193 216 129 152  75  75  75  75  75  75  75  75   2  18 127 242 194 217 130 153  75  75  75  75  75  75  75  75   3  19 123 243 195 226 131 162  75  75  75  75  75  75  75  75   4  20  91 244 196 227 132 163  75  75  75  75  75  75  75  75   5  21 108 245 197 228 133 164  75  75  75  75  75  75  75  75   6  22  80 246 198 229 134 165  75  75  75  75  75  75  75  75   7  23 125 247 199 230 135 166  75  75  75  75  75  75  75  75   8  24  77 248 200 231 136 167  75  75  75  75  75  75  75  75   9  25  93 249 201 232 137 168  75  75  75  75  75  75  75  75  10  26  92 122 209 233 145 169  75  75  75  75  75  75  75  75  11  27  78  94 210 173 146 192  75  75  75  75  75  75  75  75  12  28 107  76 211 224 147 106  75  75  75  75  75  75  75  75  13  29  96 126 212 189 148 208  75  75  75  75  75  75  75  75  14  30  75 110 213  95 149 161  75  75  75  75  75  75  75  75  15  31  97 111 214 109 150  75  75  75  75  75  75  75  75  75];pointer=pointer(:);ebcdic=pointer(ascii+1);                                                         

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -