SLIDE 8 The sdf file format description
Rec (24 bytes)
Record parameters:
If data block:
- Raw timestamp
- Theta (4 encoders)
- Number of waveform blocks
struct Q680RecBlockBuf { char dum0 [2]; // -- char ctrl [1]; // u1 control block flag char tc [5]; // i5 record timestamp (4ns) char dum1 [2]; // -- char C1f [2]; // u2 fine angle encoder 1 char C1 [2]; // u2 coarse angle encoder 1 char dum2 [2]; // -- char C2f [2]; // u2 fine angle encoder 2 char C2 [2]; // u2 coarse angle encoder 2 char dum3 [3]; // -- char nb [1]; // u1 number of data blocks };
DataHdr (4 bytes)
Waveform block header:
- Relative timestamp
- Type, length
struct Q680DataBlockHdrBuf { char tc [2]; // u2 data timestamp (4ns) char type [1]; // u1 type {EM=192, LO=0, HI=64} char l [1]; // u1 length (4 samples) };
Ctrl (68 bytes)
GPS synchronization:
- Sync timestamp
- GPS weekseconds
struct Q680CtrlBlockBuf { char dum0 [51]; // -- char sync [5]; // i5 sync timestamp (4ns) char weeksec[4]; // u4 weekseconds (ms) char dum1 [8]; // -- };
EmPulse (DataHdr.l bytes)
Sampled emitted pulse
char EmPulse[DataHdr.l]; // u emitted pulse (1ns sampling)
RecWave (DataHdr.l bytes)
Sampled received wave block
char RecWave[DataHdr.l]; // u received wave block (1ns sampling)
V ariables and data blocks:
- Rec timestamp / theta / facet / n blocks
- Data timestamp / length
- GPS sync timestamps
- Emitted pulse
- Received waves
Header (6640 bytes)
sdf file header. LMS-Q680i instrument constants:
- File format parameters
- Angle encoder constants
- Geometry constants
- Range correction arrays
- Amplitude correction arrays
Variables:
- Pulse Repetition Rate (PRR)
- Measurements per line
- MTA zone (pulses in the air)
- MTA PRR bounds
struct Q680HeaderBuf { char HeaderSize [4]; // i4 size of this header char ProtocolFlags [4]; // u4 ? char SubheaderIdMain [2]; // u2 ? char SubheaderIdSub [2]; // u2 ? char ParameterIdMain [1]; // u1 ? char ParameterIdSub [1]; // u1 ? char MeasIdMain [1]; // u1 ? char MeasIdSub [1]; // u1 ? char SampleBlockIdMain [1]; // u1 ? char SampleBlockIdSub [1]; // u1 ? char HousekeepingIdMain [1]; // u1 ? char HousekeepingIdSub [1]; // u1 ? char SerialNumber [8]; // s8 serial number char InstrumentType [8]; // s8 type (Q680I) char InstrumentModel [2]; // u2 model number char dum1 [2]; // -- char SyncField [4]; // i4 record synchronization field (=ZZZZ) char BeamAperture [2]; // u2 laser beam aperture (?) char dum2 [2]; // -- char BeamDivergence [2]; // u2 laser beam divergence (?) char dum3 [2]; // -- char BeamFocus [2]; // u2 beam focus (?) char dum4 [2]; // -- char LineAngleCircleCount [4]; // u4 encoder steps (for 360 deg) char NumberFacets [1]; // u1 number of facets (=4) char dum5 [1]; // -- char LineAngleCoarseRes [2]; // u2 coarse angle resolution char LineAngleOffset0 [4]; // u4 coarse angle encoder 1 offset char LineAngleOffset1 [4]; // u4 coarse angle encoder 2 offset char LineEncoderFineCountOffset0[2]; // u2 fine angle encoder 1 offset char LineEncoderFineCountOffset1[2]; // u2 fine angle encoder 2 offset char RangeCorrPPM [4]; // i4 light velocity correction (PPM) char LoChannelRangeOffset [4]; // i4 low channel range offset (mm) char HiChannelRangeOffset [4]; // i4 high channel range offset (mm) char CorrLaserOriginx [4]; // f4 x| char CorrLaserOriginy [4]; // f4 y|laser origin vector (m) char CorrLaserOriginz [4]; // f4 z| char CorrLaserDirx [4]; // f4 x| char CorrLaserDiry [4]; // f4 y|laser direction vector char CorrLaserDirz [4]; // f4 z| char CorrMirrorAxisx [4]; // f4 x| char CorrMirrorAxisy [4]; // f4 y|mirror axis vector char CorrMirrorAxisz [4]; // f4 z| char CorrOffsetx [4]; // f4 x| char CorrOffsety [4]; // f4 y|offset vector (m) char CorrOffsetz [4]; // f4 z| char CorrFacetNormal1x [4]; // f4 x| char CorrFacetNormal1y [4]; // f4 y|facet 1 normal vector char CorrFacetNormal1z [4]; // f4 z| char CorrFacetDistance1 [4]; // f4 facet 1 distance (m) char CorrFacetNormal2x [4]; // f4 x| char CorrFacetNormal2y [4]; // f4 y|facet 2 normal vector char CorrFacetNormal2z [4]; // f4 z| char CorrFacetDistance2 [4]; // f4 facet 2 distance (m) char CorrFacetNormal3x [4]; // f4 x| char CorrFacetNormal3y [4]; // f4 y|facet 3 normal vector char CorrFacetNormal3z [4]; // f4 z| char CorrFacetDistance3 [4]; // f4 facet 3 distance (m) char CorrFacetNormal4x [4]; // f4 x| char CorrFacetNormal4y [4]; // f4 y|facet 4 normal vector char CorrFacetNormal4z [4]; // f4 z| char CorrFacetDistance4 [4]; // f4 facet 4 distance (m) char LinearizeArray [512]; // u2[256] nonlinear amplitude correction (low channel) char DelogArray [512]; // u2[256] nonlinear amplitude correction (high channel) char AmplCorrArrayLO [600]; // i2[300] amplitude-dependent range correction (low channel) (mm) char AmplCorrArrayHI [600]; // i2[300] amplitude-dependent range correction (high channel)(mm) char ADCThresholdArrayLO [2048]; // u1[2048] ADC thresholds (low channel) char ADCThresholdArrayHI [2048]; // u1[2048] ADC thresholds (high channel) char ADCOffset [8]; // u2[4] ADC offsets char LastPulseSuppression [4]; // u1[4] ? char NearRangeSuppression [4]; // u4 ignore nearest return (unit?) char LaserPulseRate [4]; // u4 PRR (Pulse Repetition Rate) (Hz) char MTAPrrConfig [1]; // u1 ? char dum6 [3]; // -- char MTAPrrLow [4]; // u4 PRR lower bound (Hz) char MTAPrrHigh [4]; // u4 PRR higher bound (Hz) char MTAZone [1]; // u1 number of pulses in the air char dum7 [3]; // -- char LineScanStartValue [16]; // u4[4] ? char LineScanIncrement [16]; // u4[4] ? char LineScanMeasNumber [4]; // u4 measurements per line char RangeGate [2]; // u2 ? char PositionStartPulse [2]; // u2 ? char SampleBlockLen [4]; // u1[4] data block lenghts (4ns) char PreQuadCount [4]; // u1[4] ? char ADCThreshold [4]; // u1[4] ADC thresholds char ChannelSwitchLevel [1]; // u1 hi channel recording threshold char dum8 [3]; // -- char LogChannel [1]; // u1 ? char dum9 [3]; // -- char FirstBlocks [1]; // u1 ? char dum10 [3]; // -- char LastBlocks [1]; // u1 ? char dum11 [3]; // -- char GpsStringDecoder [16]; // s16 ? };
Constant instrument parameters