📄 rdi2cdf.m
字号:
%eval(['cdf{''',varname,'''}.epic_code = nclong(1279+i);']) end mexcdf('ATTPUT',cdf,varname,'_FillValue','FLOAT',1,1e35); %eval(['cdf{''',varname,'''}.FillValue = ncfloat(1e35);']) mexcdf('ATTPUT',cdf,varname,'valid_range','FLOAT',2,[-32768 32767]); %eval(['cdf{''',varname,'''}.valid_range = ncfloat([-32768 32767]);'])end%for i=1:nbeams, varname = [VARNAMES(CORRELATION,:),int2str(i)]; mexcdf('VARDEF',cdf,varname,'FLOAT',2,[0 1]); %eval(['cdf{''',varname,'''} = ncfloat(''ensemble'',''bin'');']) mexcdf('ATTPUT',cdf,varname,'units','CHAR',6,'counts'); %eval(['cdf{''',varname,'''}.units = ''counts'';']) buf=sprintf('Beam %1i correlation',i); mexcdf('ATTPUT',cdf,varname,'long_name','CHAR',length(buf),buf); %eval(['cdf{''',varname,'''}.long_name = buf;']) mexcdf('ATTPUT',cdf,varname,'epic_code','LONG',1,1293+i); %eval(['cdf{''',varname,'''}.epic_code = nclong(1293+i);']) mexcdf('ATTPUT',cdf,varname,'_FillValue','FLOAT',1,1e35); %eval(['cdf{''',varname,'''}.FillValue = ncfloat(1e35);']) mexcdf('ATTPUT',cdf,varname,'valid_range','FLOAT',2,[0 255]); %eval(['cdf{''',varname,'''}.valid_range = ncfloat([0 255]);'])end %for i=1:nbeams, varname = [VARNAMES(INTENSITY,:),int2str(i)]; mexcdf('VARDEF',cdf,varname,'FLOAT',2,[0 1]); %eval(['cdf{''',varname,'''} = ncfloat(''ensemble'',''bin'');']) mexcdf('ATTPUT',cdf,varname,'units','CHAR',6,'counts'); %eval(['cdf{''',varname,'''}.units = ''counts'';']) buf=sprintf('Echo Intensity (AGC) Beam %1i',i); mexcdf('ATTPUT',cdf,varname,'long_name','CHAR',length(buf),buf); %eval(['cdf{''',varname,'''}.long_name = buf;']) mexcdf('ATTPUT',cdf,varname,'epic_code','LONG',1,1220+i); %eval(['cdf{''',varname,'''}.epic_code = nclong(1220+i);']) mexcdf('ATTPUT',cdf,varname,'_FillValue','FLOAT',1,1e35); %eval(['cdf{''',varname,'''}.FillValue = ncfloat(1e35);']) mexcdf('ATTPUT',cdf,varname,'valid_range','FLOAT',2,[0 255]); %eval(['cdf{''',varname,'''}.valid_range = ncfloat([0 255]);']) mexcdf('ATTPUT',cdf,varname,'norm_factor','FLOAT',1,0.45); %eval(['cdf{''',varname,'''}.norm_factor = ncfloat(0.45);']) mcnote(cdf,varname,'normalization to db',notenum); notenum=notenum+1;end %for i=1:nbeams, varname = [VARNAMES(GOOD,:),int2str(i)]; mexcdf('VARDEF',cdf,varname,'FLOAT',2,[0 1]); %eval(['cdf{''',varname,'''} = ncfloat(''ensemble'',''bin'');']) mexcdf('ATTPUT',cdf,varname,'units','CHAR',6,'counts'); %eval(['cdf{''',varname,'''}.units = ''counts'';']) buf=sprintf('Percent Good Beam %1i',i); mexcdf('ATTPUT',cdf,varname,'long_name','CHAR',length(buf),buf); %eval(['cdf{''',varname,'''}.long_name = buf;']) mexcdf('ATTPUT',cdf,varname,'epic_code','LONG',1,1240+i); %eval(['cdf{''',varname,'''}.epic_code = nclong(1220+i);']) mexcdf('ATTPUT',cdf,varname,'_FillValue','FLOAT',1,1e35); %eval(['cdf{''',varname,'''}.FillValue = ncfloat(1e35);']) mexcdf('ATTPUT',cdf,varname,'valid_range','FLOAT',2,[0 100]); %eval(['cdf{''',varname,'''}.valid_range = ncfloat([0 255]);'])end %mexcdf('VARDEF',cdf,'Hdg','FLOAT',1,0);%cdf{'Hdg'} = ncfloat('ensemble');mexcdf('ATTPUT',cdf,'Hdg','units','CHAR',7,'degrees');%cdf{'Hdg'}.units = 'degrees';mexcdf('ATTPUT',cdf,'Hdg','long_name','CHAR',12,'INST Heading');%cdf{'Hdg'}.long_name = 'INST Heading';mexcdf('ATTPUT',cdf,'Hdg','epic_code','LONG',1,1215);%cdf{'Hdg'}.epic_code = nclong(1215);mexcdf('ATTPUT',cdf,'Hdg','_FillValue','FLOAT',1,1e35);%cdf{'Hdg'}.FillValue = ncfloat(1e35);mexcdf('ATTPUT',cdf,'Hdg','valid_range','FLOAT',2,[0 359.99]);%cdf{'Hdg'}.valid_range = ncfloat([0 359.99]);mexcdf('ATTPUT',cdf,'Hdg','heading_alignment','DOUBLE',1,hdg_alignment);%cdf.heading_alignment = nclong(data(fld));if ~isequal(hdg_bias,0) mexcdf('ATTPUT',cdf,'Hdg','heading_bias','DOUBLE',1,hdg_bias); c_hdg = hdg_bias; mcnote(cdf,'Hdg','heading bias recorded and applied internally correcting magnetic declination',notenum); notenum=notenum+1;elseif isequal(hdg_bias,0) & ~isempty(magnetic) mexcdf('ATTPUT',cdf,'Hdg','heading_bias','DOUBLE',1,magnetic); c_hdg = magnetic; if isequal(transform,0) %0 for beam mcnote(cdf,'Hdg','heading bias input by user and applied post-recovery for magnetic declination',notenum); elseif isequal(transform, 3) %3 for earth mcnote(cdf,'Hdg','heading bias input by user but not applied',notenum); end notenum=notenum+1;elseif isequal(hdg_bias,0) & isempty(magnetic) mexcdf('ATTPUT',cdf,'Hdg','heading_bias','DOUBLE',1,hdg_bias); c_hdg = hdg_bias; mcnote(cdf,'Hdg','No correction has been made for magnetic declination',notenum); notenum=notenum+1;end %cdf.heading_bias = nclong(data(fld));mcnote(cdf,'Hdg','units for heading bias and alignment are degrees',notenum);notenum=notenum+1;%mexcdf('VARDEF',cdf,'Ptch','FLOAT',1,0);%cdf{'Ptch'} = ncfloat('ensemble');mexcdf('ATTPUT',cdf,'Ptch','units','CHAR',7,'degrees');%cdf{'Ptch'}.units = 'degrees';mexcdf('ATTPUT',cdf,'Ptch','long_name','CHAR',10,'INST Pitch');%cdf{'Ptch'}.long_name = 'INST Pitch';mexcdf('ATTPUT',cdf,'Ptch','epic_code','LONG',1,1216);%cdf{'Ptch'}.epic_code = nclong(1216);mexcdf('ATTPUT',cdf,'Ptch','_FillValue','FLOAT',1,1e35);%cdf{'Ptch'}.FillValue = ncfloat(1e35);mexcdf('ATTPUT',cdf,'Ptch','valid_range','FLOAT',2,[-20 20]);%cdf{'Ptch'}.valid_range = ncfloat([-20 20]);%mexcdf('VARDEF',cdf,'Roll','FLOAT',1,0);%cdf{'Roll'} = ncfloat('ensemble');mexcdf('ATTPUT',cdf,'Roll','units','CHAR',7,'degrees');%cdf{'Roll'}.units = 'degrees';mexcdf('ATTPUT',cdf,'Roll','long_name','CHAR',9,'INST Roll');%cdf{'Roll'}.long_name = 'INST Roll';mexcdf('ATTPUT',cdf,'Roll','epic_code','LONG',1,1217);%cdf{'Roll'}.epic_code = nclong(1217);mexcdf('ATTPUT',cdf,'Roll','_FillValue','FLOAT',1,1e35);%cdf{'Roll'}.FillValue = ncfloat(1e35);mexcdf('ATTPUT',cdf,'Roll','valid_range','FLOAT',2,[-20 20]);%cdf{'Roll'}.valid_range = ncfloat([-20 20]);%mexcdf('VARDEF',cdf,'Tx','FLOAT',1,0);%cdf{'Tx'} = ncfloat('ensemble');mexcdf('ATTPUT',cdf,'Tx','units','CHAR',7,'degrees');%cdf{'Tx'}.units = 'degrees';mexcdf('ATTPUT',cdf,'Tx','long_name','CHAR',27,'ADCP Transducer Temperature');%cdf{'Tx'}.long_name = 'ADCP Transducer Temperature';mexcdf('ATTPUT',cdf,'Tx','epic_code','LONG',1,3017);%cdf{'Tx'}.epic_code = nclong(3017);mexcdf('ATTPUT',cdf,'Tx','_FillValue','FLOAT',1,1e35);%cdf{'Tx'}.FillValue = ncfloat(1e35);mexcdf('ATTPUT',cdf,'Tx','valid_range','FLOAT',2,[-5 40]);%cdf{'Tx'}.valid_range = ncfloat([-5 40]);%mexcdf('VARDEF',cdf,'xmitc','FLOAT',1,0);%cdf{'xmitc'} = ncfloat('ensemble');mexcdf('ATTPUT',cdf,'xmitc','units','CHAR',4,'amps');%cdf{'xmitc'}.units = 'amps';mexcdf('ATTPUT',cdf,'xmitc','long_name','CHAR',16,'transmit current');%cdf{'xmitc'}.long_name = 'transmit current';mexcdf('ATTPUT',cdf,'xmitc','_FillValue','FLOAT',1,1e35);%cdf{'xmitc'}.FillValue = ncfloat(1e35);%mexcdf('VARDEF',cdf,'xmitv','FLOAT',1,0);mexcdf('ATTPUT',cdf,'xmitv','units','CHAR',5,'volts');mexcdf('ATTPUT',cdf,'xmitv','long_name','CHAR',16,'transmit voltage');mexcdf('ATTPUT',cdf,'xmitv','_FillValue','FLOAT',1,1e35);%cdf{'xmitv'} = ncfloat('ensemble');%cdf{'xmitv'}.units = 'volts';%cdf{'xmitv'}.long_name = 'transmit voltage';%cdf{'xmitv'}.FillValue = ncfloat(1e35);%mexcdf('VARDEF',cdf,'dac','LONG',1,0);mexcdf('ATTPUT',cdf,'dac','units','CHAR',6,'counts');mexcdf('ATTPUT',cdf,'dac','long_name','CHAR',10,'DAC output');mexcdf('ATTPUT',cdf,'dac','_FillValue','LONG',1,1e35);%cdf{'dac'} = nclong('ensemble');%cdf{'dac'}.units = 'counts';%cdf{'dac'}.long_name = 'DAC output';%cdf{'dac'}.FillValue = nclong(1e35);%mexcdf('VARDEF',cdf,'VDD3','LONG',1,0);mexcdf('ATTPUT',cdf,'VDD3','units','CHAR',5,'volts');mexcdf('ATTPUT',cdf,'VDD3','long_name','CHAR',17,'battery voltage 3');mexcdf('ATTPUT',cdf,'VDD3','_FillValue','LONG',1,1e35);%cdf{'VDD3'} = nclong('ensemble');%cdf{'VDD3'}.units = 'volts';%cdf{'VDD3'}.long_name = 'battery voltage 3';%cdf{'VDD3'}.FillValue = nclong(1e35);%mexcdf('VARDEF',cdf,'VDD1','LONG',1,0);mexcdf('ATTPUT',cdf,'VDD1','units','CHAR',5,'volts');mexcdf('ATTPUT',cdf,'VDD1','long_name','CHAR',17,'battery voltage 1');mexcdf('ATTPUT',cdf,'VDD1','_FillValue','LONG',1,1e35);%cdf{'VDD1'} = nclong('ensemble');%cdf{'VDD1'}.units = 'volts';%cdf{'VDD1'}.long_name = 'battery voltage 1';%cdf{'VDD1'}.FillValue = nclong(1e35);%mexcdf('VARDEF',cdf,'VDC','LONG',1,0);mexcdf('ATTPUT',cdf,'VDC','units','CHAR',5,'volts');mexcdf('ATTPUT',cdf,'VDC','long_name','CHAR',3,'VDC');mexcdf('ATTPUT',cdf,'VDC','_FillValue','LONG',1,1e35);%cdf{'VDC'} = nclong('ensemble');%cdf{'VDC'}.units = 'volts';%cdf{'VDC'}.long_name = 'VDC';%cdf{'VDC'}.FillValue = nclong(1e35);%%Added 27-Feb-03mexcdf('VARDEF',cdf,'Pressure','FLOAT',1,0);mexcdf('ATTPUT',cdf,'Pressure','units','CHAR',7,'pascals');mexcdf('ATTPUT',cdf,'Pressure','long_name','CHAR',24,'ADCP Transducer Pressure');mexcdf('ATTPUT',cdf,'Pressure','epic_code','LONG',1,4);mexcdf('ATTPUT',cdf,'Pressure','_FillValue','FLOAT',1,1e35);mexcdf('ATTPUT',cdf,'Pressure','valid_range','FLOAT',2,[0 4294967295]);%cdf{'Pressure'} = ncfloat('ensemble');%cdf{'Pressure'}.units = 'pascals';%cdf{'Pressure'}.long_name = 'ADCP Transducer Pressure';%cdf{'Pressure'}.epic_code = nclong(4);%cdf{'Pressure'}.FillValue = ncfloat(1e35);%cdf{'Pressure'}.valid_range = ncfloat([0 4294967295]);mexcdf('ENDEF',cdf); %line 848, no varputs before endef!!fclose(fid); % close file to force a rewind%% ------- load up the data ------%fid = fopen(infile,'r');% load in the depths for each bin%status = mexcdf('VARPUT', cdfid, varid, start, count, value, autoscale)status=mexcdf('VARPUT',cdf,'D',0,nbins,depths);%cdf{'D'}(:) = depths;% mark for desired data and designate containersflags = zeros(1,39); %%changed 27-Feb-03flags(2)=1; % flag for ensemble numberflags(3:9)=ones(1,7); % flag for timeflags(12)=1; % speed of soundflags(14)=1; % headingflags(15)=1; % pitchflags(16)=1; % rollflags(18)=1; % temperatureflags(25)=1; % xmit currentflags(26)=1; % xmit voltageflags(27)=1; % DACflags(29)=1; % VDD3flags(30)=1; % VDD1flags(31)=1; % VDCflags(38)=1; %pressure %added 27-Feb-03i=0;readidx=1;% define some more thingstime_greg=zeros(nens,6);if exist('minens')~=1, minens = 1;elseif minens < 1, minens = 1;endif exist('maxens')~=1, maxens = nens;elseif maxens > nens, maxens = nens;endwhile 1, ens_start = ftell(fid); if ens_start < 0, break; endif (readidx >= minens) & (readidx <= maxens), % skip to the location of variable leader if fseek(fid, offsets(2), 'cof') < 0, break; end junk = rdvlead(fid, 0, flags); if ~isempty(junk), % sort and store ensnum = junk(1); mexcdf('VARPUT',cdf,'Rec',i,1,junk(1)); %cdf{'Rec'}(i) = junk(1); % fix the year, should work for the next 90 years... if junk(2) > 90, junk(2)=junk(2)+1900; else junk(2)=junk(2)+2000; end time_greg(i+1,:) = [junk(2:6) junk(7)+junk(8)/100];
time_jul=julian([junk(2:6) junk(7)+junk(8)/100]); mexcdf('VARPUT',cdf,'TIM',i,1,time_jul); %cdf{'TIM'}(i) = time_jul; mexcdf('VARPUT',cdf,'sv',i,1,junk(9)); %cdf{'sv'}(i) = junk(9); %correct heading for magnetic declination heading = junk(10)./100 + c_hdg; mexcdf('VARPUT',cdf,'Hdg',i,1,heading); %cdf{'Hdg'}(i) = heading; mexcdf('VARPUT',cdf,'Ptch',i,1,junk(11)./100); %cdf{'Ptch'}(i) = junk(11)./100; mexcdf('VARPUT',cdf,'Roll',i,1,junk(12)./100); %cdf{'Roll'}(i) = junk(12)./100; mexcdf('VARPUT',cdf,'Tx',i,1,junk(13)./100); %cdf{'Tx'}(i) = junk(13)./100; mexcdf('VARPUT',cdf,'xmitc',i,1,junk(14).*0.019); %cdf{'xmitc'}(i) = junk(14).*0.019; mexcdf('VARPUT',cdf,'xmitv',i,1,junk(15).*0.556); %cdf{'xmitv'}(i) = junk(15).*0.556; mexcdf('VARPUT',cdf,'dac',i,1,junk(16)); %cdf{'dac'}(i) = junk(16); mexcdf('VARPUT',cdf,'VDD3',i,1,junk(17).*0.097); %cdf{'VDD3'}(i) = junk(15).*0.097; mexcdf('VARPUT',cdf,'VDD1',i,1,junk(18).*0.032); %cdf{'VDD1'}(i) = junk(18).*0.032; mexcdf('VARPUT',cdf,'VDC',i,1,junk(19).*0.307); %cdf{'VDC'}(i) = junk(19).*0.307; press = junk(20)*10; mexcdf('VARPUT',cdf,'Pressure',i,1,press); %%added 27-Feb-03 %cdf{'Pressure'}(i)=junk(20).*10; end % get the main data (vel, corr, etc) junk=zeros(nbins,nbeams); fill=ones(1,nbeams).*(1e35); for type=3:6, pos=ftell(fid); % skip to the location of the next data type, if fseek(fid, ens_start+offsets(type)-pos, 'cof') < 0, break; end if fread(fid,1,'int16') ~= rec_ids(type), disp([longnames(type,:),' data ID not found']) else % read 'em for j=1:nbins, [dummy, n] = fread(fid,nbeams,read_types(type,:)); if n == nbeams, junk(j,:) = dummy'; else junk(j,:) = fill; end end % last minute massage if type == VELOCITY, % change the fill flag to be consistent dummy = find(junk == -32768); junk(dummy) = ones(size(dummy)).*(1e35); end % write 'em for j=1:nbeams, varname = [VARNAMES(type,:),int2str(j)]; mexcdf('VARPUT',cdf,varname,[i 0],[1 nbins],junk(:,j)'); %cdf{varname}(i,:) = junk(:,j); end end end i=i+1;end readidx=readidx+1; % jump to next ensemble pos=ftell(fid); nskip=nbytes-(pos-ens_start)+2; % add 2 for checksum if fseek(fid,nskip,'cof') < 0; break; end if readidx<1000 & ~rem(readidx,100), disp(sprintf('%d ensembles read, %d converted in %d sec',readidx-1,i,toc)), end if readidx>1000 & ~rem(readidx,1000), disp(sprintf('%d ensembles read, %d converted in %d sec',readidx-1,i,toc)), end if readidx>maxens break; endendfclose(fid);mexcdf('CLOSE',cdf);%cdf=close(cdf);disp('Conversion complete')disp(sprintf('%d seconds elapsed while processing',toc))disp(sprintf('%d was the number of the last ensemble read',ensnum))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -