GTRI File Format Description

GTRI Turntable Phase History data is available in several different formats. The original data is stored in a CDF file that is available and accessible with mexcdf routines for Matlab. There is a Phoenix version of the data available that can be accessed with the normal Phoenix tools. The data is also available in phase history blocks that include sections of the available phase history accessible by Matlab.

The CDF file format is useful due to the fact that it contains several data groups of different data types and dimensions. The native header of the CDF file contains all the necessary information to access the data segments of the file. The header data can be accessed with an inquiry from Matlab using the mexcdf routine described later. The data segments of the phase history CDF files include: frequency_domain (phase history), frequency, azimuth, cal_add, cal_mult, header, and channel. The frequency domain contains the actual phase history data for the target. The frequency and azimuth sections contain the frequency of the radar system and target orientation. The azimuth is available at three nominal depression angles. The cal_add and cal_mult sections describe the calibration of the radar system for each sample. The header section contains comments about the factors of the collection. Finally, the channel section states which polarization was used for each part of the data collected.

The Phoenix files are very similar to the CDF files. The main difference is the Phoenix version contains a Phoenix header that describes the file in an ASCII format. This Phoenix header allows the Phoenix tools to be used to extract data from the file.

The phase history blocks contain down-sampled segments of the phase history data at a specific polarization and aspect. The data was down-sampled in frequency and in azimuth from ½ ft x ½ ft range and cross range resolution to 1 ft x 1 ft resolution. The phase history data block was extracted with 221 frequency and 79 azimuth points. The phase history blocks also contain a Phoenix header describing the data.

The phase history values in the CDF files and Phoenix files are complex floating-point numbers. The Phoenix files were written with the Sun Floating point standard. The files are organized as in the example below. The Phoenix file has the same sections plus a variable length Phoenix header at the beginning. There are eight sections in the CDF file. The native header of the CDF file is of variable length and can contain characters, integers, and floating-point numbers. The Phoenix header will contain the actual length of the Phoenix and native CDF header in bytes. The remaining sections are fixed in size. The byte column contains the size in byte of the previous section. It will be necessary to read or seek to that point in the file. Then seek or read to the position calculated with the index values.

The mexcdf routine allows Matlab to extract the data in CDF files. Mexcdf is available on several different computer platforms. Mexcdf routines can extract a list of variables, the dimensions for a specific variable, global attributes, variable attributes, and data points or blocks of data from a CDF file.

The available Matlab routines are written so that data can be manipulated and viewed from the phase history blocks with user defined values. The user specifies range resolution, cross range resolution, range pixel spacing, cross range pixel spacing, window, and ROI (Range of Interest) index. Range and cross range resolution are determined by the amount of data extracted in the phase history block. Range and cross range pixel spacing are defined by the distance between pixels to be represented on the image. The user gets a choice of three weighting windows: Hamming, Kaiser, or Taylor. The weighting window will emphasize the central area of the phase data. The different weight windows have different characteristics with regard to the width of the central area and amount of tapering on the edges. Finally the ROI index defines the area of the phase history data that is to be viewed.

Example:
Frequency Domain at Index Az = 100, Ch = 2, Fq = 150, Cp = 1 (Azimuth Index (Az) = 100, Channel Index (Ch) = 2, Frequency Index (Fq) = 150, Complex Index (Cp)=1).

Data can be accessed with normal read and write routines from the Phoenix file format. The first byte section shows the number of bytes between that section and the previous section. The ~ symbol means approximate size of actual values are contained in the Phoenix header.

First, seek to the beginning of the data block that contains the desired data.

Example:
Seek to = 804 + 896 = 1700 bytes

Then seek to or read the number of values calculated by the position for that data block.

Position
=[Az - 1]*3208 + [Ch - 1]*802 + [Fq - 1]*2 + [Cp - 1] + 1
=[100 - 1]*3208 + [2 - 1]*802 + [150 - 1]*2 + [1 - 1] +1
=[ 99 ]*3208 + [ 1 ]*802 + [149]*2 + 0 + 1
=317592 + 802 + 298 + 0 + 1
=318693
Seek to
=position * size of variable type (float = 4)
=318693 * 4
=1274772 bytes
0
Phoenix Header (characters)
+ ~804
Native Header Section (characters, floating point #, Integers)
+ ~896
Frequency Domain (Floating point #)
position =
  • [ Azimuth Index - 1 ] * 3208
  • + [ Channel Index - 1 ] * 802
  • + [ Frequency Index - 1 ] * 2
  • + [ Complex Index - 1 ]
  • + 1

+ 92390400
Frequency (floating point #)
position = [ Frequency Index ]
+ 1604
Azimuth (floating point #)
position =
  • [ Azimuth Index - 1 ] * 3
  • + [ Angles Index - 1 ]
  • + 1
+ 86400
Cal_add (floating point #)
position =
  • [ Channel Index - 1 ] * 802
  • + [ Frequency Index - 1 ] * 2
  • + [Complex Index - 1 ]
  • + 1
+ 12832
Cal_mult (floating point #)
position =
  • [ Channel Index - 1 ] * 802
  • + [ Frequency Index - 1 ] * 2
  • + [Complex Index - 1 ]
  • + 1
+ 12832
Header (characters)
position = [ Header Index ]
+ 4096
Channel (character)
position =
  • [ Channel Index - 1 ] * 2
  • + [ Charwidth Index -1 ]
  • + 1