📄 rdvlead.m
字号:
function data = rdvlead(fid, verbose, select);
% rdvlead.m reads the variable leader data from a raw ADCP
%
% function data = rdvlead(fid, verbose, select);
% Read the variable leader data from a raw ADCP
% data file opened for binary reading
% Returns the contents of the variable leader
% as elements of the vector 'data' or an
% empty matrix if the fixed leader ID is not
% identified (error condition).
% If the variable select is provided as a vector
% of zeros and ones, the function will return
% only the elements of data which correspond to
% a one in the vector select. Select must be the
% same length as the number of fields in the
% record, currently 32. (Changed to 39 27-Feb-03)
% Set verbose=1 for a text output.
% Updated 27-Feb-2003 (ALR) for output of pressure data and changed fields in record to 39
% Written by Marinna Martini
% for the U.S. Geological Survey
% Atlantic Marine Geology, Woods Hole, MA
% 1/7/95
NFIELDS = 39;
data=zeros(1,NFIELDS);
fld=1;
if exist('verbose') ~= 1,
verbose = 0;
end
if exist('select') ~= 1,
select = [];
end
% make sure we're looking at the beginning of
% the variable leader record by testing for it's ID
data(fld)=fread(fid,1,'int16');
if(data(fld)~=128),
disp('Variable Leader ID not found');
data=[];
return;
end
fld=fld+1;
% ensemble number
data(fld)=fread(fid,1,'ushort');
fld=fld+1;
% Time of ensemble
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
if verbose, disp(sprintf('Time of ensemble %d/%d/%d %d:%d:%d.%d',...
data(fld-5), data(fld-4), data(fld-6), data(fld-3), data(fld-2),...
data(fld-1), data(fld))); end;
fld=fld+1;
% ensemble number rollover
data(fld)=fread(fid,1,'uchar');
if verbose, disp(sprintf('Ensemble %d',data(fld-8)+(65536.*(data(fld))))); end;
fld=fld+1;
% built in test results
data(fld)=fread(fid,1,'ushort');
fld=fld+1;
% speed of sound (EC)
data(fld)=fread(fid,1,'ushort');
if verbose, disp(sprintf('Speed of sound %d m/s',data(fld))); end;
fld=fld+1;
% depth of transducer (ED) in decimeters
data(fld)=fread(fid,1,'ushort');
fld=fld+1;
% Heading (EH)
data(fld)=fread(fid,1,'uint16');
if verbose, disp(sprintf('Heading %4.2f deg.',data(fld).*0.01)); end;
fld=fld+1;
% Pitch (EP)
data(fld)=fread(fid,1,'int16');
if verbose, disp(sprintf('Pitch %4.2f deg.',data(fld).*0.01)); end;
fld=fld+1;
% Roll (ER)
data(fld)=fread(fid,1,'int16');
if verbose, disp(sprintf('Roll %4.2f deg.',data(fld).*0.01)); end
fld=fld+1;
% Salinity (ES)
data(fld)=fread(fid,1,'ushort');
if verbose, disp(sprintf('Salinity %d ppt',data(fld))); end
fld=fld+1;
% Temperature (ET)
data(fld)=fread(fid,1,'ushort');
if verbose, disp(sprintf('Temperature %4.2f deg.',data(fld).*0.01)); end
fld=fld+1;
% Maximum ping time
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
% Accuracy (STD) of heading, pitch and roll
% heading (1 deg/count), pitch and roll (0.1 deg/count)
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
% ADC channels
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
fld=fld+1;
data(fld)=fread(fid,1,'uchar');
%Pressure Data added 27-Feb-03
fld=fld+1;
data(fld)=fread(fid,1,'uchar'); %For error word status
%b=dec2bin(data(fld));
fld=fld+1;
data(fld)=fread(fid,1,'uchar'); %For error word status
%b=dec2bin(data(fld));
fld=fld+1;
data(fld)=fread(fid,1,'uchar'); %For error word status
%b=dec2bin(data(fld));
fld=fld+1;
data(fld)=fread(fid,1,'uchar'); %For error word status
%b=dec2bin(data(fld));
fld=fld+1;
data(fld)=fread(fid,1,'uchar'); %reserved
%b=dec2bin(data(fld));
fld=fld+1;
data(fld)=fread(fid,1,'int16'); %pressure in decapascals
if verbose, disp(sprintf('Pressure %d pascals',data(fld)*10)); end;
fld=fld+1;
data(fld)=fread(fid,1,'int16'); %pressure variance in DecaPascals
if verbose, disp(sprintf('Pressure Variance %d pascals',data(fld)*10)); end;
%part of original
if length(select) == length(data),
data(find(select==0))=[];
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -