Prepared by
C. W. Piker
Dept. of Physics & Astronomy
The University of Iowa
Iowa City, IA 52242
This document has been reviewed for export control and does NOT contain technical information controlled under the International Traffic in Arms Regulations (22 CFR 120-130).
Contents
1. Overview
1.1 Common Properties
1.2 On-Board Manipulations
1.3 Output to Spacecraft verses Level 2 Packets
1.4 Extra Processing for Downmixed Waveforms
2. WGDS Packet Envelope
2.1 Prefix Record
2.2 Header Blocks
2.3 Data (Payload) Blocks
2.4 CRC-CCITT Algorithm
3. Science Data Packets
3.1 Sample Vector Types (The PSID)
3.2 Science Data Status Header Block
3.3 Other Header Blocks
3.4 Data Section
3.5 Process for Converting from L2 to L3 data
4. Housekeeping Packets
4.1 Sub-second Collect Time Adjustments
4.2 Micro-packets
The Level 2 volume, JNOWAV_0000 exists to "safe" low level binary Waves EDRs (Experiment Data Records) and Housekeeping packets. These data are not intended for general use. The Level 3 volume, JNOWAV_1000, provides calibrated, fixed-length records which should be used if at all possible for the task at hand. Persons wishing to process Level 2 records anyway should (in addition to reading this document) contact the Waves instrument team before proceeding.
Waves science EDRs are not fixed length and thus cannot be specified via standard PDS labels. Because of this limitation, Waves EDR records are detailed in this document. Waves housekeeping records contain both a fixed format 64 byte section followed by 4, variable content, 16 byte records. The fixed section of the Waves housekeeping packets are fully defined via PDS labels, while the variable content section is briefly touched on in Section 4 below.
Prerequisite: This document delves into some of the details of handling low-level Waves instrument data. The VOLSIS.HTM document on this volume provides a higher-level overview of the Juno Mission, the Waves Instrument and it's data products. Before reading this document readers should first be familiar with Section 1.6, all of Section 2, and Appendix C of VOLSIS.HTM before proceeding.
Waves measurements begin as digital conversions of analog voltage states. In this document, a set of conversion values which are,
Inside the Waves instrument most sample vectors initially represent a voltage wave in time. If the voltage wave was driven by the electric antenna then it's an electric sample vector, if it was driven by the magnetic sensor then it's a magnetic sample vector.
Raw sample vectors can be transmitted to the Juno spacecraft for later delivery to the ground. This mode of operation is called Burst Mode. Typically though, the time ordered sample vector is converted to a frequency ordered sample vector via the instrument's on-board Fourier Transform hardware. The transformed vector is further reduced via simple averaging into frequency bins. Sending reduced frequency vectors saves quite a bit of space while still providing a good overview of the instrument's environment. This mode of operation is call Survey Mode. No mater the transformations applied to the sample vector it still retains it's identity and has associated with it the following fixed properties:
Sample vectors may under go one or more of the following operations on-board before being delivered to the Juno spacecraft data systems:
On-board manipulations two and three (averaging over frequency and 9-bit conversion) introduce permanent changes to the data. The first operation (conversion to the frequency domain) is only done on-board in preparation for frequency averaging so the fact that it is a reversible change is irrelevant. The last two operations (Rice compression and segmentation) are reversed before Level 2 data files are written to the JNOWAV_0000 volume. No matter the on-board operations preformed on a sample vector it still maintains it's identity. The vector's start time, sample frequency, initial length and analog state properties are retained and passed down, in some form, with the data values themselves.
In order to transmit information in an orderly way from Waves to Juno some sort of structure needs to be defined. Inside Waves, all sample vectors are organized into Waves Mini-Packets, which are then grouped into Waves Packets before transmission out to the spacecraft. This organization is represented in the left-hand structure in Figure 1.2.
Ideally one mini-packet would contain one sample vector. The header portion of the packet would provide the essential properties, Start Time, Sensor Selection, Gain States, Sampling Rate or Frequency Bins, Vector length and Digital Resolution. However this would make a very large header and since the Waves instrument only generates a small handful of different types of sample vectors, much of this information is provided in external look-up tables. The mini-packet headers themselves only carry a look-up table ID which must be used to determine many of the properties.
Also, it would be nice if one mini-packet always contained an entire sample vector, however some of the vectors generated by Waves are too large to fit in a single transmission unit to the spacecraft, and thus must be segmented into multiple units. These fragments each receive their own mini-packet header. Inside the header is a segment number which is used by ground software to re-assemble whole sample vectors.
In addition to these complications Waves also compresses data via two different schemes, (1) Rice Compression, which is loss-less and is used to compress the high resolution WAVES_BURST products, and (2) 9-bit float conversion which is lossy and is used to reduce the size of WAVES_SURVEY products.
Before data are written to the JNOWAV_0000 volume, the following operations are preformed:
The Waves high-frequency receivers are able to record high-resolution frequency information for signals that occur far above their sampling frequency of 1.3125 MHz using frequency down-mixing. Why this works is covered in Appendix C of the VOLSIS.HTM document. In addition to unsegmenting and decompressing Waves mini-packets. Ground software also combines HFR in-phase (I) and quadrature (Q) waveforms into a frequency spectrum centered on the mixer frequency and extending to plus and minus the Nyquist frequency of the down-linked waveforms. Like all level 2 data, the resulting spectrum is not calibrated but is still in units of data-numbers. The algorithm for doing this follows:
It should be evident by now that quite a bit of processing is required to produce the just the Level 2 files. So, this document does not provide sufficient to information to process raw Waves science data products off the spacecraft up to useful calibrated products. The assumption then is that one has Level 2 products, by some means, and wishes to produce calibrated Level 3 files.
The basic unit of data generated by Waves and delivered to the Juno spacecraft C&DH system is called an mini-packet. Waves mini-packets are formatted to meet restrictions on instrument-to-spacecraft packet lengths and to efficiently utilize the available telemetry bandwidth. To save space, Waves Level 2 data makes copious use of bit fields, employs loss-less compressed, and truncates SCLKs. C&DH Packet length limitations require Waves to segment long sample vectors across multiple mini-packets. All this complicated in-flight packaging must be undone on the ground to recover the collected waveforms and spectra.
To provide room for ancillary data and large measurements each as-delivered, mini-packet is embedded inside a WGDS (Waves Ground Data System) packet upon receipt by the Waves instrument team. Both science and housekeeping data are placed in WGDS wrappers. All WGDS packets consist of:
A 16-byte prefix, which contains the data and header lengths
1-N header blocks to record ancillary information
A data block
The packet length repeated
It is possible for a generic algorithm to navigate L2 data files without understanding the details of each header and data section.
Figure 2.1 provides the general structure of the ground processing packets. On the JNOWAV_0000 volume, all .DAT (housekeeping) and .PKT (science records) files are composed of a stream of these packets and only these packets. There are no other headers or footers in the files.
Note: In this document all base 16 numbers are prefixed with the characters '0x', as this is standard in most common programming languages.
There is one prefix per WGDS packet, it is always 16 bytes long. The first 4 bytes are the sync pattern 0xFA, 0x6C, 0x27, 0x41. This is useful in the case that a file becomes fragmented or has invalid length information for one or more packets. Table 2.1 defines the prefix bytes in ascending address order.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|
Bytes 0-7 | 0xFA | 0x6C | 0x27 | 0x41 | CRC | Non-Data Length | ||
Bytes 8-15 | Total Packet Length | NAIF ID | 0x04 | Content |
WGDS Packet prefix field definitions:
CRC: A unsigned 16-bit MSB (Most Significant Byte) first integer containing the CRC-CCITT of everything that follows for this packet up to and including the trailing length bytes. See Section 1.4 for a definition of the CRC-CCITT algorithm in the C language.
Non-Data Length: An unsigned 16-bit MSB first integer containing the number of bytes in the WGDS headers alone, this includes the entire 4-byte sync pattern and the trailing 4 length bytes. Waves packets always pad the headers out to 256 bytes. This combined with the 4 trailing length bytes means that the non-data length will always be at least 260.
Total Packet Length: An unsigned 32-bit MSB first integer containing the number of bytes in the total packet, including all data, all headers, all padding and the trailer bytes.
NAIF ID: The NAIF SPICE ID for Juno, this is always -61, or 0xFF 0xC3 as hex bytes. Note that the NAIF ID sets the name space or "code table" for the header block IDs, programs IDs and the content indicator byte below.
Content Indicator Byte: An identifier for the contents of the packet. For Waves this byte consists of two parts, the upper 4 bits are the Data Kind Indicator and may have one of the following values:
0x6 -- Down-link data (Waves housekeeping)
0x8 -- Science Data
The lower bits are the Data Contents Indicator. This value denotes how many processing stages have been applied to the data contents. Upon receipt by the Waves IOT it will have the value 0x1, by the time science packets are ready for delivery to the PDS the value will be 0x5. A list of all values follows:
0x1 - Raw IDP (Waves housekeeping stops at this processing level)
0x2 through 0x4 -- See DOCUMENT/WAVESEDR/WAVESBLKS.TXT
0x5 - 1 Measurement (Waves science data stops at this processing level)
The rest of the header is series of Header Blocks, each of which may be up to 256 bytes in size and always starts with a size byte and a block ID byte. At a minimum, this provides sufficient information for programs to skip over blocks that are unrecognized. To reiterate, all WGDS header blocks start as follows:
Byte 0 | Byte 1 | Byte N | |
---|---|---|---|
Block Type ID | Block Length - 1 (in Bytes) | .... | varies |
where the meaning of the block type IDs is defined by the "code-page" indicated in the NAIF ID field of the prefix. Of course only code-page -61, Juno, will be defined in this document. Since the block length byte can have a maximum value of 255, a single header block is limited to 256 bytes in length.
To allow processing meta-data to be easily distinguished from measurement meta-data, a second generic header block is defined as follows:
Byte 0 | Byte 1 | Byte 2 | Byte N | |
---|---|---|---|---|
0x70 | Block Length - 1 (in Bytes) | Process Type ID | .... | varies |
where, as expected, the Process Type ID's are only defined within the Juno "code-page".
Building upon these generic header block definitions are the specific Juno Waves header blocks. Here's a list of the actual header block types that may be found within Waves L2 data, most packets contain just a few of the possible header block types. Note that header blocks are always written in order by increasing block type ID and, if applicable, by increasing processes type ID.
Block Type ID | Block Size | Process Type ID | Purpose |
---|---|---|---|
0x10 | 56 bytes | N/A | Science Data Status Block -- provides definition of science packet data area, present in science data packets |
0x11 | 48 bytes | N/A | Memory Read Out Status Block -- provides memory dump address information, present in MRO packets. |
0x1A | 24 bytes | N/A | High Rate Science Bin Header Block -- A copy of the high rate product record mode or binning mode header applicable to a WAVES_BURST product. |
0x20 | 13 bytes | N/A | CCSDS Header Block -- A copy of the CCSDS header applied on the spacecraft, present in housekeeping packets |
0x70 | 60 bytes | 0x13 | Product file Reader Processing Block -- Applied by the program which reads product telemetry data files |
0x70 | 112 bytes | 0x14 | SFDU Reader Processing Block -- Applied by the program that reads Waves packets from an SFDU stream. |
0x70 | 16 bytes | 0x20 | Unpacker Processing Block -- Applied by the program that separates individual Waves measurements from the enclosing IDP packet in to separate WGDS packets. |
0x70 | 64 bytes | 0x30 | Unsegmenter Processing Block -- Applied by the program that combines broken-up Waves measurements from multiple IDP packets into a single WGDS packet. |
0x70 | 16 bytes | 0x40 | Decompresser Processing Block -- Applied by the program that decompresses Waves measurements. |
0x70 | 94 bytes | 0x70 | Sideband Recovery Block -- Applied by the program that combines In-phase and Quadrature measurements from an HFR into a 1 MHz spectrum about the mixing frequency. |
Initially the payload section is quite complicated, containing one IDP packet as transmitted from Waves and, is thus, a non-trivial mixture of headers and in-flight packaged data. Ground software then undoes most of the in-flight packaging. At the point that uncalibrated Level 2 data sets are generated by the ground software, the payload section consists of only one series vector in a simply readable format. These processed packets are written to the Level 2 volume.
Every program that generates or modifies a WGDS packet must calculate a CRC (cyclic redundancy check) to guard against packet corruption. These CRCs are re-calculated every time a packet is loaded for processing and checked against the embedded value. As described in VOLSIS.HTM Section 3.3.1 packets which fail a CRC check are dropped with an error message. A C-code listing of the CRC-CCITT algorithm for little endian byte architectures with constants used for the CRC field in the WGDS packet header follows.
static int crc_tabccitt_init = 0; static unsigned short crc_tabccitt[256]; #define P_CCITT 0x1021 static void init_crcccitt_tab( void ) { int i, j; unsigned short crc, c; for(i=0; i<256; i++) { crc = 0; c = ((unsigned short) i) << 8; for(j=0; j<8; j++) { if( (crc ^ c) & 0x8000 ) crc = ( crc << 1 ) ^ P_CCITT; else crc = crc << 1; c = c << 1; } crc_tabccitt[i] = crc; } crc_tabccitt_init = 1; } /* Calc CRC-CCITT on an arbitrary length set of char data */ unsigned short crc_ccitt(const char* sData, size_t szLen){ int i; unsigned short usIdx, usChar, usCRC; sRet[2] = '\0'; if( ! crc_tabccitt_init ) init_crcccitt_tab(); usCRC = 0; for(i = 0; i<szLen; i++){ usChar = 0x00ff & (unsigned short) sData[i]; usIdx = (usCRC >> 8) ^ usChar; usCRC = (usCRC << 8) ^ crc_tabccitt[usIdx]; } return usCRC; }
All final science products delivered to the PDS are originally given to the Waves IOT as product telemetry files. These product telemetry files consist of pure Waves IDP packets without other padding or headers. By the time Waves data makes it through the Level 2 processing chain, packets have the layout defined in Figure 3.1. Though the Level 2 data packets contain many header blocks, most Level 3 products may be written using only the Science Data Status block. The Science data status block is key, as it identifies the receiver used to collect the measurement, the time of collection and the binary format of the samples in the data section.
Waves generates only a limited number of different sample vectors. Each sample vector type has a unique Packet and Source ID (PSID). Many properties of the vector may be determined using the PSID and table 3.1 below. These include:
Properties that are not defined by the PSID are:
PSID | Measurement Type | Source | Notes |
---|---|---|---|
0x47 | 3 to 41 MHz spectra 1 MHz steps |
HFR-44 Log Amp | Analog spectrum analyzer data, freq centers are 3.5, 4.5, ... 40.5 and 1 MHz wide. |
0x46 | HFR-45 Log Amp | ||
0x5F | Binned FFTs of a 7MHz waveform capture |
HFR-44 I chan -> FFT Engine | Frequency bins defined in Table 3.6 |
0x5B | HFR-45 I -> FFT Engine | ||
0x3B | HFR-45 I -> FFT Engine | ||
0x7B | 7 MHz waveform capture | HFR-45 I chan | This are the input data to the FFT transforms, though it may not be sent to the ground. |
0x7F | HFR-44 I chan | ||
0x3F | HFR-44 I chan | ||
0x88 | 1.3125 MHz waveform | HFR-45 I chan | In-phase signal mixed with local oscillator |
0x8C | HFR-44 I chan | ||
0x89 | HFR-45 Q chan | Quadrature signal mixed with local oscillator | |
0x8D | HFR-44 Q chan | ||
0xF1 | 1.3 MHz band limited spectra centered at mixer frequency. |
HFR-45 I & Q chan | Derived on ground from 0x88 & 0x89 |
0xF2 | HFR-44 I & Q chan | Derived on ground from 0x8C & 0x8D | |
0x91 | Binned FFTs of a 50 kHz waveform capture | LFR B -> FFT engine | Frequency bins defined in Table 3.4 |
0x92 | LFR Lo E -> FFT engine | ||
0x93 | Binned FFTs of a 375 kHz waveform | LFR Hi E -> FFT engine | Frequency bins defined in Table 3.5 |
0xF0 | 3 different binned FFTs of 50 kHz waveform captures | LFR B, LFR Noise -> FFT eng. | Frequency bins defined in Table 3.4 |
0xF4 | LFR Lo E,LFR Noise -> FFT eng. | ||
0xF5 | 3 different binned FFTs of 375 kHz waveform captures | LFR Hi E, LFR Noise -> FFT eng. | Frequency bins defined in Table 3.5 |
0xA1 | 50 kHz waveform | LFR B | These are the input data to the FFT transforms, though it may not be sent to the ground. |
0xA2 | LFR Lo E | ||
0xA3 | 375 kHz waveform | LFR Hi E | |
0xA0 | 3 different 50 kHz waveforms | LFR B E, LFR Noise Input | Original signal waveform, plus noise mitigation waveform, plus noise mitigated waveform. |
0xA4 | LFR Lo E, LFR Noise Input | ||
0xA5 | 3 different 375 kHz waveforms | LFR Hi E, LFR Noise Input |
Program processing Level 2 data generate and update this header block. The Science Data Status Block defines the state of the data section and contains both permanent fields that are retained after all processing is complete and temporary fields required for intermediate processing states, only the permanent fields will be defined. This block has the lowest type ID so that it will always occur directly following the prefix.
This block acts an expanded version of the mini-packet header. Ideally the mini-packet header emitted by Waves would be reused for ground processing. The limitation in doing so is that the mini-packet headers transmitted from Waves are designed to be as small as possible and thus cannot describe unsegmented data. That being said, no information is lost, so the original telemetered mini-packet headers could be recreated via information encoded in the Science Data Status block, the Unsegmenter block and the High Rate Bin Header block, along with some knowledge of the instrument to C&DH communication protocol.
Byte Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
0 - 7 | 0x10 | 0x37 | Modifier | Telem Src | Collect SCLK | |||
8 - 15 | Col. RTI | Avg | Hi Seq No | Hi Report SCLK | ||||
16 - 23 | IDP CRC | Lo Seq No | Lo Report SCLK | |||||
24 - 31 | MPH 0 | MPH 1 | MPH 2 | MPH 3 | MPH 4 | MPH 5 | MPH 6 | MPH 7 |
32 - 39 | MSF 0 | MSF 1 | MSF 2 | MSF 3 | MSF 4 | MSF 5 | MSF 6 | MSF 7 |
40 - 47 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 |
48 - 55 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | Flags |
Science Data Status Block fields relevant to generating Level 3 data are described below:
Collect SCLK: The full 32-bit spacecraft SCLK at the time of the data collection, reconstructed using the IDP header SCLK and the individual mini-packet RTI fields. This is a 32-bit MSB first unsigned integer.
Collect RTI (Real Time Interrupt): The internal Waves scheduling clock runs at 40 Hz. Thus operations can be scheduled to occur at most 1/40th of a second. An RTI value of 0 represents a collection that began as the clock clicked to a new second, and a value of 39 is the last possible measurement start time in a second.
Avg: The number of original data captures averaged within the Waves instrument to arrive at this measurement. Warning: This value must be set in ground software and may be in error.
MPH0 through MPH7: An updated mini-packet header were all fields in the original mini-packet header that no longer accurate have been zero'ed out. In order to convert data samples to waveform or spectra measurements, software must at least read the ID, PATN, BGAIN, ATTN, SRC, BND and FMT bit fields. The bits are broken out as follows:
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
MPH 0 | ID 3 | ID 3 | ID 1 | ID 0 | 0 | 0 | 0 | 0 |
MPH 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
MPH 2 | RTI 15 | RTI 14 | RTI 13 | RTI 12 | RTI 11 | RTI 10 | RTI 9 | RTI 8 |
MPH 3 | RTI 7 | RTI 6 | RTI 5 | RTI 4 | RTI 3 | RTI 2 | RTI 1 | RTI 0 |
MPH 4 | 1 | PATN | BATN | 1 | 0 | 0 | 0 | 0 |
MPH 5 | SATN 3 | SATN 2 | SATN 1 | SATN 0 | SRC 3 | SRC 2 | SRC 1 | SRC 0 |
MPH 6 | BND 7 | BND 6 | BND 5 | BND 4 | BND 3 | BND 2 | BND 1 | BND 0 |
MPH 7 | MSF 1 | MSF 2 | FMT 5 | FMT 4 | FMT 3 | FMT 2 | FMT 1 | FMT 0 |
ID and SRC: The combination of these two fields identifies the hardware and software path within the Waves instrument from which the samples were collected. In C one can get the combined ID by:
PSID = (ID << 4) | SRC;
so the ID filed becomes the upper four bits and the SRC filed becomes the lower 4 bits. See Table 3.1 for an overview of most Waves science record types listed by PSID.
RTI: This is a combination of the 40Hz interrupt counter plus the SCLK as follows:
RTI field = (0x3FF & SCLK)*40 + rti
This field is used in conjunction with the IDP_SCLK to determine the Collect SCLK and Collect RTI pair, which are much more convenient to work with.
PATN: If 1 the pre-amplifier attenuator is on. The attenuation is 25dB for the Lo E and B LFR channels, and 20dB for LFR Hi E, HFR baseband and HFR down-mixed channels.
BATN: If 1 the back end LFR attenuator is on for the Hi and Lo E channels which adds 20dB of attenuation to the signal. This field should be ignored for HFR data.
SATN: The HFR-44 and HFR-45 receivers each contain a programmable attenuator. To determine the receiver attenuation present in the samples use the relation:
Rec. Attn = SATN * 2 dB.
This field should be ignored for LFR data.
BND: The HFR-44 and HFR-45 receivers use a local oscillator to down-mix E-field signals that vary too quickly to be directly sampled via the on-board A/D converters. This byte provides the setting for the local oscillator, when in use. This it it only meaningful for data derived from the HFR I& Q channels, which would be PSIDs 0x88, 0x89, 0x8C, 0x8D, 0xF1 and 0xF2. The values are:
0x00 - HFR receiver is in baseband, A/D converter runs at 7MHz
0x01 - HFR receiver is sweeping for log detection (Making HFR spectrum packets)
0x0C to 0xBF - Mixer setting in MHz.
Note that the mixer runs at four times the center frequency for HFR I/Q packets thus:
Center MHz = BND / 4.0
FMT: The measurement format, provides the binary format for the numeric samples in the data section of the packet. Note that the Waves central processor is a "little-endian" architecture, and all multi-byte measurements are stored with the least significant byte in the lowest address. Values for the FMT field found in process Waves science data packets are:
0x2 -- 32-bit LSB first IEEE floating point values
0x4 -- 8-bit unsigned integers
0xC -- 16-bit LSB first unsigned integers
0x1C -- 16-bit LSB first unsigned integers
Parsing the fields defined in Section 2.2 above are sufficient to determine how to read most types of measurements. Further documentation on all the header fields may be found in the text document WAVESEDR/WAVESBLKS.TXT located in the DOCUMENT/WAVESEDR directory of the JNOWAV_0000 volume. In particular the High Rate Bin Header block is useful for gathering the Quality Factors generated by the Waves Instrument to signal to the spacecraft C&DH system which waveform captures should be telemetered to the ground.
The data section of the WGDS packet mostly consists of pure samples strung end to end without padding. Some packets contain more than one kind of data product and must be handled as exceptions, see "Gotchas" below. To convert the samples to floating point numbers read the FMT field in the MPH 7 byte of the Science Data Status block in the WGDS header. Though it may appear otherwise, the Waves IOT did not intentionally bury the data format.
To convert these samples to physical units consult the calibration document WAVESCAL.HTM. In addition the labels for the individual calibration files in the JNOWAV_1000/CALIB directory contain quite a bit of descriptive text explaining exactly how each column and field is utilized.
Since all sample vectors that are transformed to frequency space are handled in the exact same way based on the PSID, frequency values are not included in the data section. Instead assign frequency bin values using one of the tables below.
This frequency down mapping is handled on-board and applies to packets with the PSID values 0x91, 0x92, 0xF0 and 0xF4. All these measurements were acquired using the low frequency channel low frequency receiver (LFR-Lo). The on-board processing is not actually an average but rather a sum. Thus before sending raw values for these packet to the calibration functions, divide the values by the number of bins indicated in Table 3.4 below.
Data Value Index | Target Frequency | Low DFT Frequency | High DFT Frequency | DFT Low Index | DFT High Index | Number of Summed Bins |
---|---|---|---|---|---|---|
0 | 50.1187 | 48.82812 | 48.82812 | 1 | 1 | 1 |
1 | 100.000 | 97.65625 | 97.65625 | 2 | 2 | 1 |
2 | 141.254 | 146.4844 | 146.4844 | 3 | 3 | 1 |
3 | 199.526 | 195.3125 | 195.3125 | 4 | 4 | 1 |
4 | 251.189 | 244.1406 | 244.1406 | 5 | 5 | 1 |
5 | 281.838 | 292.9688 | 292.9688 | 6 | 6 | 1 |
6 | 354.813 | 341.7969 | 341.7969 | 7 | 7 | 1 |
7 | 398.107 | 390.6250 | 390.6250 | 8 | 8 | 1 |
8 | 446.684 | 439.4531 | 439.4531 | 9 | 9 | 1 |
9 | 501.187 | 488.2813 | 488.2813 | 10 | 10 | 1 |
10 | 562.341 | 537.1094 | 537.1094 | 11 | 11 | 1 |
11 | 562.341 | 585.9375 | 585.9375 | 12 | 12 | 1 |
12 | 630.957 | 634.7656 | 634.7656 | 13 | 13 | 1 |
13 | 707.946 | 683.5938 | 732.4219 | 14 | 15 | 2 |
14 | 794.328 | 781.2500 | 830.0781 | 16 | 17 | 2 |
15 | 891.251 | 878.9063 | 927.7344 | 18 | 19 | 2 |
16 | 1000.00 | 976.5625 | 1025.391 | 20 | 21 | 2 |
17 | 1122.02 | 1074.219 | 1171.875 | 22 | 24 | 3 |
18 | 1258.93 | 1220.703 | 1318.359 | 25 | 27 | 3 |
19 | 1412.54 | 1367.188 | 1464.844 | 28 | 30 | 3 |
20 | 1584.89 | 1513.672 | 1660.156 | 31 | 34 | 4 |
21 | 1778.28 | 1708.984 | 1855.469 | 35 | 38 | 4 |
22 | 1995.26 | 1904.297 | 2099.609 | 39 | 43 | 5 |
23 | 2238.72 | 2148.438 | 2343.750 | 44 | 48 | 5 |
24 | 2511.89 | 2392.578 | 2636.719 | 49 | 54 | 6 |
25 | 2818.38 | 2685.547 | 2978.516 | 55 | 61 | 7 |
26 | 3162.28 | 3027.344 | 3320.313 | 62 | 68 | 7 |
27 | 3548.13 | 3369.141 | 3710.938 | 69 | 76 | 8 |
28 | 3981.07 | 3759.766 | 4199.219 | 77 | 86 | 10 |
29 | 4466.84 | 4248.047 | 4687.500 | 87 | 96 | 10 |
30 | 5011.87 | 4736.328 | 5273.438 | 97 | 108 | 12 |
31 | 5623.41 | 5322.266 | 5908.203 | 109 | 121 | 13 |
32 | 6309.57 | 5957.031 | 6640.625 | 122 | 136 | 15 |
33 | 7079.46 | 6689.453 | 7470.703 | 137 | 153 | 17 |
34 | 7943.28 | 7519.531 | 8398.438 | 154 | 172 | 19 |
35 | 8912.51 | 8447.266 | 9423.828 | 173 | 193 | 21 |
36 | 10000.0 | 9472.656 | 10546.88 | 194 | 216 | 23 |
37 | 11220.2 | 10595.70 | 11865.23 | 217 | 243 | 27 |
38 | 12589.3 | 11914.06 | 13330.08 | 244 | 273 | 30 |
39 | 14125.4 | 13378.91 | 14941.41 | 274 | 306 | 33 |
40 | 15848.9 | 14990.23 | 16748.05 | 307 | 343 | 37 |
41 | 17782.8 | 16796.88 | 18798.83 | 344 | 385 | 42 |
42 | 19952.6 | 18847.66 | 21093.75 | 386 | 432 | 47 |
This frequency down mapping is handled on-board and applies to packets with the PSID values 0x93 and 0xF5. All these measurements were acquired using the high frequency channel low frequency receiver (LFR-Hi). Like the LFR-Lo data, the on-board processing is not actually an average but rather a sum . Thus before sending raw values for these packet to the calibration functions, divide the values by the number of bins indicated in Table 3.5 below.
Data Value Index | Target Frequency | Low FFT Frequency | High FFT Frequency | DFT Low Index | DFT High Index | Number of Summed Bins |
0 | 19952.6 | 19042.97 | 20874.02 | 52 | 57 | 6 |
---|---|---|---|---|---|---|
1 | 22387.2 | 21240.23 | 23437.50 | 58 | 64 | 7 |
2 | 25118.9 | 23803.71 | 26367.19 | 65 | 72 | 8 |
3 | 28183.8 | 26733.40 | 29663.09 | 73 | 81 | 9 |
4 | 31622.8 | 30029.30 | 33325.20 | 82 | 91 | 10 |
5 | 35481.4 | 33691.40 | 37353.52 | 92 | 102 | 11 |
6 | 39810.7 | 37719.73 | 42114.26 | 103 | 115 | 13 |
7 | 44668.4 | 42480.47 | 47241.21 | 116 | 129 | 14 |
8 | 50118.7 | 47607.42 | 52734.38 | 130 | 144 | 15 |
9 | 56234.2 | 53100.59 | 59326.17 | 145 | 162 | 18 |
10 | 63095.8 | 59692.38 | 66650.39 | 163 | 182 | 20 |
11 | 70794.6 | 67016.60 | 74707.03 | 183 | 204 | 22 |
12 | 79432.9 | 75073.24 | 83862.31 | 205 | 229 | 25 |
13 | 89125.1 | 84228.52 | 94116.21 | 230 | 257 | 28 |
14 | 100000 | 94482.42 | 105835.0 | 258 | 289 | 32 |
15 | 112202 | 106201.2 | 118652.3 | 290 | 324 | 35 |
16 | 125893 | 119018.6 | 133300.8 | 325 | 364 | 40 |
17 | 141254 | 133667.0 | 149414.1 | 365 | 408 | 44 |
This frequency down mapping is handled on-board and applies to packets with the PSID values 0x5F, 0x5B, and 0xF5. All these measurements were acquired the baseband channel of one of the high frequency receivers ( HFR-45 Baseband, or HFR-46 Baseband). Again, like the LFR-Lo data, the on-board processing is not actually an average but rather a sum . Thus before sending raw values for these packet to the calibration functions, divide the values by the number of bins indicated in Table 3.6 below.
Data Value Index | Target Frequency | Low FFT Frequency | High FFT Frequency | DFT Low Index | DFT High Index | Number of Summed Bins |
0 | 141254 | 136719 | 143555 | 20 | 21 | 2 |
---|---|---|---|---|---|---|
1 | 158489 | 150391 | 164063 | 22 | 24 | 3 |
2 | 177828 | 170898 | 184570 | 25 | 27 | 3 |
3 | 199526 | 191406 | 205078 | 28 | 30 | 3 |
4 | 223872 | 211914 | 232422 | 31 | 34 | 4 |
5 | 251189 | 239258 | 259766 | 35 | 38 | 4 |
6 | 281838 | 266602 | 293945 | 39 | 43 | 5 |
7 | 316228 | 300781 | 328125 | 44 | 48 | 5 |
8 | 354813 | 334961 | 369141 | 49 | 54 | 6 |
9 | 398107 | 375977 | 416992 | 55 | 61 | 7 |
10 | 446684 | 423828 | 471680 | 62 | 69 | 8 |
11 | 501187 | 478516 | 526367 | 70 | 77 | 8 |
12 | 562341 | 533203 | 594727 | 78 | 87 | 10 |
13 | 630957 | 601563 | 663086 | 88 | 97 | 10 |
14 | 707946 | 669922 | 745117 | 98 | 109 | 12 |
15 | 794328 | 751953 | 840820 | 110 | 123 | 14 |
16 | 891251 | 847656 | 943359 | 124 | 138 | 15 |
17 | 1000000 | 950195 | 1052734 | 139 | 154 | 16 |
18 | 1122019 | 1059570 | 1182617 | 155 | 173 | 19 |
19 | 1258926 | 1189453 | 1333008 | 174 | 195 | 22 |
20 | 1412538 | 1339844 | 1490234 | 196 | 218 | 23 |
21 | 1584893 | 1497070 | 1674805 | 219 | 245 | 27 |
22 | 1778280 | 1681641 | 1879883 | 246 | 275 | 30 |
23 | 1995262 | 1886719 | 2112305 | 276 | 309 | 34 |
24 | 2238721 | 2119141 | 2365234 | 310 | 346 | 37 |
25 | 2511887 | 2372070 | 2659180 | 347 | 389 | 43 |
26 | 2818383 | 2666016 | 2980469 | 390 | 436 | 47 |
Packets with PSIDs 0xF0, 0xF4, and 0xF5 contain three different spectra. All data are stored as 32-bit IEEE floats in little endian byte order. Assuming the number of data samples is N (a number that is always divisible by 3), the data layout is as follows:
Packets with PSIDs 0xA0, 0xA4, and 0xA5 contain three different waveforms stacked end-to-end along with a set of coefficients from the Noise Mitigation algorithm. All data are stored as 32-bit IEEE floats in little endian byte order. Assuming the number of data samples is N (a number that is always divisible by 3), the data layout is as follows:
Though it has already been described in VOLSIS.HTM Section 3.3.2, it is worth restating the Level 2 data to Level 3 processing procedure using terms defined in this document. An outline of the steps preformed in the conversion from Level 2 WGDS packets on the JNOWAV_0000 volume to Level 3 WAVES_SURVEY SPREADSHEET objects on the JNOWAV_1000 volume follows.
Spectra and attenuator calibration files are loaded from the JNOWAV_1000/CALIB directory.
All WGDS packets on the JNOWAV_0000 volume containing WAVES_SURVEY data for a single UTC day are loaded to memory.
All WGDS packets on the JNOWAV_0000 volume containing Housekeeping data for a single UTC day are parsed to find sub-second time adjustments.
All packet data is converted to 32-bit IEEE floats and calibrated to physical measurements. This includes basic calibration plus adjustments for attenuation.
Data collection SCLKs are pulled from the Science Data Status block of each WGDS packet. Housekeeping sub-second time adjustments are then added to these SCLK values, the resulting SCLK is sent to SPICE for conversion to SCETs.
All calibrated E-field packets are matched in SCET space in an attempt to define SPREADSHEET rows that contain complete sweeps from 50Hz to 41 MHz. Partial rows will be defined for packets that could not be aligned into a complete sweep.
Two primary WAVES_SURVEY products are written to the JNOWAV_1000 volume containing all primary measurements for a particular UTC day. One for E-field data and the other for B-field data.
If noise reduction diagnostic data were present, auxiliary product files are written to contain those data.
The equivalent processing for WAVES_BURST data follows.
1.Waveform and attenuation calibration files are loaded from the JNOWAV_1000/CALIB directory.
All WGDS packets on the JNOWAV_0000 volume containing WAVES_BURST data for a single continuous high-rate recording session are loaded to memory.
All WGDS packets on the JNOWAV_0000 volume containing Housekeeping data for a single UTC day are parsed to find sub-second time adjustments.
All packet data is converted to 32-bit IEEE floats and calibrated to physical measurements. This includes basic calibration plus adjustments for attenuation.
Data collection SCLKs are pulled from the Science Data Status block of each WGDS packet. Housekeeping sub-second time adjustments are then added to these SCLK values, the resulting SCLK is sent to SPICE for conversion to SCETs.
All measurements for the continuous recording session are written to a single product file.
Since housekeeping packets just happen to be fixed length, files containing housekeeping data may be defined via standard PDS labels. Thus, most of the information needed to view these records may be obtained by reading any one PDS label for a file with the name pattern WAV_YYYYDDD_HSK_VXX.DAT on the JNOWAV_0000 volume.
The Collect SCLK fields in the WGDS science data packets are not exactly the real spacecraft SCLK at the time of data collection. There is a sub-second offset from spacecraft seconds which changes very slowly compared to the data collection rate. To save space in the Science data stream this offset is not reported in the science IDP packets generated by Waves. Instead these offsets are emitted into the housekeeping stream. Thus, to determine data collections times to greater that 1 second accuracy, housekeeping data must be loaded. This field containing the offset is named SCLK_SUBSEC and is defined and described in all housekeeping product labels.
The housekeeping packets contain both a fixed content 64-byte section, which is defined via standard PDS labels followed by a 64-byte variable content containing 4, 16-byte micro-packets. Micro-packets are touched on below, but to get the details on the the usefulness of each micro-packet type consult the University of Iowa document Juno/Waves Housekeeping Telemetry Formats Reference Manual, 98-90016 JPL/DRD SE-007-001A.
Each housekeeping packet ends with 4 micro packets. A micro-packet is 16 bytes long and has the following format.
Byte 0 | Byte 1 | Bytes 2-3 | Bytes 4-15 |
---|---|---|---|
Type | Sequence | RTI | varies |
The Type field identifies the content of bytes 4-15 in the micro-packet. The following types are defined.
0x11: C&DH hardware clock tracking statistics 1
0x12: C&DH hardware clock tracking statistics 2
0x14: C&DH hardware clock anomaly
0xA1: Waves FFT Engine Test Status
0xA2: Waves FFT Engine Error Status
0xA3: Waves FFT Engine watchdog status
0xB1: Last B-Field reported by FGM
0xC1: IEB trigger report
0xC2: IEB text label
0xD1: Waves Instrument power switch status
0xE1: Command Error Counter
0xF1: Waves reset status, and bus side select
0xF2: Waves ROM status
0xF3: Waves Hardware Versions, software kernel version
0xF4: Waves software kernel version time-stamp
0xF5: Clock Statistics
0xF7: Quick scan of 8-bit A/D converters
0xF8: Quick scan of 16-bit A/D converters
The sequence field increments for each micro packet added to the output buffer in the Waves kernel software. At the time a housekeeping packet is emitted, the last 4 micro-packets are dumped into the output stream. Since new micro-packets may not be present, the sequence field may be used to identify repeated micro-packets and ignore them.
The RTI field is produced in the same manner as the RTI field in Section 3.1, and records the time at which the micro-packet was added to the output buffer.