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.
| 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
