###################################
#####   ANTENNA INFORMATION   #####
###################################

###################################
# ANTENNA INFO VECTOR SIZE
###################################
# The number of antenna info
# structures in the vector. Each
# entry in this vector is a structure
# with the following elements:
#
# - CARRIER_FREQUENCY
# - PC_OFFSET
# - PC_VARIATION_CORRECTION
# - PC_VARIATION_CORRECTION_UNC
# - SIGNAL_GAIN_CORRECTION
# - SIGNAL_GAIN_CORRECTION_UNC
#
# Notes:
# CARRIER_FREQUENCY
#   The carrier frequency in MHz.
#
# PC = PHASE CENTER
#   PC_OFFSET is a structure with six
#   elements: x, y, z and their associated uncertainties
#   Phase center offset (PCO) is defined with
#   respect to the origin of the Android sensor coordinate system, e.g.,
#   center of primary screen for mobiles
#
# PC_VARIATION_CORRECTION
#   2D vectors representing the phase center variation (PCV) corrections,
#   in millimeters, at regularly spaced azimuthal angle (theta) and zenith angle
#   (phi). The PCV correction is added to the phase measurement to obtain the
#   corrected value.
#   The azimuthal angle, theta, is defined with respect to the X axis of the
#   Android sensor coordinate system, increasing toward the Y axis. The zenith
#   angle, phi, is defined with respect to the Z axis of the Android Sensor
#   coordinate system, increasing toward the X-Y plane.
#   Each row vector (outer vectors) represents a fixed theta. The first row
#   corresponds to a theta angle of 0 degrees. The last row corresponds to a
#   theta angle of (360 - deltaTheta) degrees, where deltaTheta is the regular
#   spacing between azimuthal angles, i.e., deltaTheta = 360 / (number of rows).
#   The columns (inner vectors) represent fixed zenith angles, beginning at 0
#   degrees and ending at 180 degrees. They are separated by deltaPhi, the regular
#   spacing between zenith angles, i.e., deltaPhi = 180 / (number of columns - 1).
#
# PC_VARIATION_CORRECTION_UNC
#   2D vectors of 1-sigma uncertainty in millimeters associated with the PCV
#   correction values.
#
# SIGNAL_GAIN_CORRECTION
#   2D vectors representing the signal gain corrections at regularly spaced
#   azimuthal angle (theta) and zenith angle (phi). The values are calculated or
#   measured at the antenna feed point without considering the radio and receiver
#   noise figure and path loss contribution, in dBi, i.e., decibel over isotropic
#   antenna with the same total power. The signal gain correction is added the
#   signal gain measurement to obtain the corrected value.
#   The azimuthal angle, theta, is defined with respect to the X axis of the
#   Android sensor coordinate system, increasing toward the Y axis. The zenith
#   angle, phi, is defined with respect to the Z axis of the Android Sensor
#   coordinate system, increasing toward the X-Y plane.
#   Each row vector (outer vectors) represents a fixed theta. The first row
#   corresponds to a theta angle of 0 degrees. The last row corresponds to a
#   theta angle of (360 - deltaTheta) degrees, where deltaTheta is the regular
#   spacing between azimuthal angles, i.e., deltaTheta = 360 / (number of rows).
#   The columns (inner vectors) represent fixed zenith angles, beginning at 0
#   degrees and ending at 180 degrees. They are separated by deltaPhi, the regular
#   spacing between zenith angles, i.e., deltaPhi = 180 / (number of columns - 1).
#
# SIGNAL_GAIN_CORRECTION_UNC
#   2D vectors of 1-sigma uncertainty in dBi associated with the signal
#   gain correction values.

ANTENNA_INFO_VECTOR_SIZE = 2

CARRIER_FREQUENCY_0 = 1575.42

PC_OFFSET_0 = 1.2 0.1 3.4 0.2 5.6 0.3

NUMBER_OF_ROWS_0 = 3
NUMBER_OF_COLUMNS_0 = 4

PC_VARIATION_CORRECTION_0_ROW_0 = 11.22 33.44 55.66 77.88
PC_VARIATION_CORRECTION_0_ROW_1 = 10.2 30.4 50.6 70.8
PC_VARIATION_CORRECTION_0_ROW_2 = 12.2 34.4 56.6 78.8

PC_VARIATION_CORRECTION_UNC_0_ROW_0 = 0.1 0.2 0.3 0.4
PC_VARIATION_CORRECTION_UNC_0_ROW_1 = 1.1 1.2 1.3 1.4
PC_VARIATION_CORRECTION_UNC_0_ROW_2 = 2.1 2.2 2.3 2.4

SIGNAL_GAIN_CORRECTION_0_ROW_0 = 9.8 8.7 7.6 6.5
SIGNAL_GAIN_CORRECTION_0_ROW_1 = 5.4 4.3 3.2 2.1
SIGNAL_GAIN_CORRECTION_0_ROW_2 = 1.3 2.4 3.5 4.6

SIGNAL_GAIN_CORRECTION_UNC_0_ROW_0 = 0.11 0.22 0.33 0.44
SIGNAL_GAIN_CORRECTION_UNC_0_ROW_1 = 0.55 0.66 0.77 0.88
SIGNAL_GAIN_CORRECTION_UNC_0_ROW_2 = 0.91 0.92 0.93 0.94


CARRIER_FREQUENCY_1 = 1227.6

PC_OFFSET_1 = 3.4 0.2 5.6 0.3 1.2 0.1

NUMBER_OF_ROWS_1 = 4
NUMBER_OF_COLUMNS_1 = 2

PC_VARIATION_CORRECTION_1_ROW_0 = 55.66 77.88
PC_VARIATION_CORRECTION_1_ROW_1 = 11.22 33.44
PC_VARIATION_CORRECTION_1_ROW_2 = 56.6 78.8
PC_VARIATION_CORRECTION_1_ROW_3 = 12.2 34.4

PC_VARIATION_CORRECTION_UNC_1_ROW_0 = 0.3 0.4
PC_VARIATION_CORRECTION_UNC_1_ROW_1 = 1.1 1.2
PC_VARIATION_CORRECTION_UNC_1_ROW_2 = 2.1 2.2
PC_VARIATION_CORRECTION_UNC_1_ROW_3 = 0.1 0.2

SIGNAL_GAIN_CORRECTION_1_ROW_0 = 7.6 6.5
SIGNAL_GAIN_CORRECTION_1_ROW_1 = 5.4 4.3
SIGNAL_GAIN_CORRECTION_1_ROW_2 = 1.3 2.4
SIGNAL_GAIN_CORRECTION_1_ROW_3 = 9.8 8.7

SIGNAL_GAIN_CORRECTION_UNC_1_ROW_0 = 0.91 0.92
SIGNAL_GAIN_CORRECTION_UNC_1_ROW_1 = 0.55 0.66
SIGNAL_GAIN_CORRECTION_UNC_1_ROW_2 = 0.11 0.22
SIGNAL_GAIN_CORRECTION_UNC_1_ROW_3 = 0.93 0.94
