TS record data format

Each TS file recorded to disk contains a run of 1 or more pulses, which are from the same basic RVP10 configuration. In RVP10 nomenclature, this is called the Acquisition Mode (stored in the rvptsPulseInfo structure). Each time something changes, such as the PRF, the acquisition mode changes, and a new file is created. If there are no changes, the files are arbitrarily written every 200.000 pulses.

TS files consist of ASCII headers and binary data, shown in the following table. They start with the rvptsPulseInfo structure. This is followed by possibly many pulses. Each pulse has a rvptsPulseHdr structure followed by an array of 16-bit binary data.

TS file format
File component Description
<rvptsPulseInfo> Variable size, even
<rvptsPulseHdr #1> Variable size, even
Pulse Data #1 16-bit words, count from header
<rvptsPulseHdr #2> Variable size, even
Pulse Data #2 16-bit words, count from header
...

Each time series sample consists of 2 floating point numbers representing the I and Q voltages. The values are full magnitude with a value of 1. This represents +8 dBm on the IFDR, but may change in future revisions.

Floating point numbers are packed into 16-bit words using High SNR packed floating format. See Initiate processing (PROC).

The 16-bit words are stored in the little-endian byte order that is native to the Intel processor chips common on PCs, which is the reverse of "Network order" used on sockets. The tsview displays the (I,Q) samples in power and angle format:

Power = 6dBm + 10 x log10[I2 + Q2] 
Angle – atan2(Q, I)

The first time series sample number is from the burst pulse. This is followed by a sample from each range bin with data. The iNumVecs field in the pulse hdr indicates the total number of samples. If it is a dual polarization receiver system, this is duplicated for the second receiver (the iVIQPerBin field in the pulse hdr). The total number of bytes of data is:

Bytes = 2 x 2 x iNumVecs x iVIQPerBin

The number of samples can be different in each pulse in the same file. This is because the sampling stops when the next trigger arrives. If triggers are from an external source, the PRT may fluctuate.

To explain the rvptsPulseInfo structure, see the following example (for more information, see the rvpts.h header file ):

rvptsPulseInfo start	The structure is bracketed by start and end
iVersion=0	          Structure version number
iMajorMode=1	        1:FFT, 2:Random Phase (see dsp.h)
iPolarization=1	     Transmit polarization: 0:H, 1:V, 2:Alt, 3:H+V
iPhaseModSeq=0	      See dsp.h
taskID.iSweep=0	     Application sweep number
taskID.iAuxNum=0	    Application auxiliary number 
taskID.sTaskName=Ascope_DEFAULT	Application task name 
sSiteName=RVP10	    Site name of RVP10
iAqMode=161	         Increments each time there is a change
iUnfoldMode=0	       Dual-PRF flag, see PRF_* in dsp_lib.h
iPWidthCode=0	       Pulse width index (0–3)
fPWidthUSec=1	       Pulse width in microseconds
fAqClkMHz=35.9751	   Acquisition clock rate
fWavelengthCM=10.7	  Radar wavelength in cm
fSaturationDBM=6	    Saturation power of the I & Q samples
fRangeMaskRes=125	   Range mask resolution in meters
iRangeMask=33825 ...	Full range mask, up to 512 16-bit numbers 
fNoiseDBm=–81.6584 –81.6584	Noise samples for the 2 channels 
fNoiseStdvDB=–0.00540576 –0.00540576   Standard deviation of the noise samples 
fNoiseRangeKM=525	   Range at which the last noise was taken
fNoisePRFHz=250	     PRF at which the last noise was taken
iGparmLatchSts=0 0	  Latched status from GPARM command 
iGparmImmedSts=21124 8963 771 19 0 0	Immediate status from GPARM command
iGparmDiagBits=0 0 0 0     Diagnostic results from GPARM command
sVersionString=8.04.4      Version of RVP10
fDBzCalibCx	         dBZ0 for second polarization
fNoiseCalib[2]	      Noise level at calibration, [2 polarizations]
fBurstCalib	         Burst power at calibration
iAntStatusMask	      Mask of what antenna status bits are available
fPWidthUSecPulse2	   Width of pulse 2
fDBzCalibPulse2[2]	  dBZ0 pulse 2 [2 polarizations]
fNoiseCalibPulse2[2]	Noise level at calibration, [2 polarizations]
fBurstCalibPulse2	   Burst power at calibration
iFlags	              Bit 1 set if Hybrid Pulse recorded
fNoiseDBmPuse2[2]	   Current noise level for pulse 2 [2 pols.] rvptsPulseInfo end

The rvptsPulseHdr structure is also defined in the rvpts.h file. For example:

rvptsPulseHdr start iVersion=0
iFlags=3	Bit 0: N/A
               Bit 1: Gap before this pulse
               Bit 2: First pulse in trigger bank Bit 3: Last pulse in trigger bank
               Bit 4: Trig bank (possibly unchanged) is just beginning Bit 5: Triggers were blanked on this pulse
iMSecUTC=179	    The data acquisition time ms
iTimeUTC=1071875957    The data acq. time in seconds since 1970, UTC
iBtime=2429100475      Ms time pulse inserted in API
iSysTime=45973182      Acq clock count of pulse acquisition
iPrevPRT=119917        Acq clock period from previous trigger
iNextPRT=119917	 Acq clock period to next trigger
iSeqNum=287828	  Sequence number of pulse in API
iAqMode=161	     Acq Mode sequence number (8-bits)
iPolarBits=0	    Polarization control bits
iTxPhase=182	    Transmit phase 1 deg (16-bit binary angle)
iAz=16381	       Azimuth=89.98 deg (16-bit binary angle)
iEl=179	         Elevation=0.98 deg (16-bit binary angle)
iNumVecs=401	    The number of TS samples in this pulse
iMaxVecs=401	    The max possible number (1+#bins requested)
iVIQPerBin=1	    1 for single polarization, 2 for dual
iTgBank=0	       Trigger bank number
iTgWave=0	       Trigger waveform sequence number
uiqPerm.iLong=0 0      User tag bits, permanent
uiqOnce.iLong=0 0      User tag bits, one time
RX[0].fBurstMag=3.58298e–05	Burst pulse amplitude, 1=full scale 0.446Volts
RX[0].iBurstArg=45561	      Burst pulse phase difference (previous-this)
RX[1].fBurstMag=0	Second receiver burst info RX[1].iBurstArg=0
iAntStatus	       Mask of current antenna status bits
iVecOffsetPulse2	 Offset in the TS data to pulse 2 rvptsPulseHdr end