Upload
barbra-simpson
View
214
Download
0
Embed Size (px)
DESCRIPTION
Counts to TA (Calibration) PRT Measurements Accumulation Counts measured Temperature Coefficients Front End Losses L i Noise Diode Injection Temperatures T ND, T CND Non-Linearity Coefficients c 2, c 3 Averaging over Calibration Cycles Phase Imbalance Averaging over subcycles Accumulation Counts (linear) InputOutput External Parameters TA Gains + Offsets TA_hat
Citation preview
Radiometer Calibration:Implementation of Counts to TA Processor Frank Wentz and Thomas Meissner
Aquarius Algorithm Workshop, Santa Rosa, CA, March 9-11, 2010
TA to Counts (Forward Model)
PRT MeasurementsTA
Orbit Simulator
Temperature Coefficients
Front End Losses L i
Noise Diode Injection Temperatures
TND, TCND
Non-Linearity Coefficients c2, c3
Gains + Offsets
Phase Imbalance
TA_hat
Accumulation Counts (linear)
Accumulation Counts (non-linear) Input OutputExternal
Parameters
Counts to TA (Calibration)
PRT MeasurementsAccumulation Counts
measured
Temperature Coefficients
Front End Losses L i
Noise Diode Injection
Temperatures TND, TCND
Non-Linearity Coefficients c2,
c3
Averaging over Calibration Cycles
Phase Imbalance
Averaging over subcycles
Accumulation Counts (linear)
Input OutputExternal Parameters
TA
Gains + Offsets
TA_hat
Subroutines that are called:
call initialize call read_l1a call geolocation
call count_to_TAcall get_ancillary_datacall fd_tb_toacall fd_tbsur_ssscall fd_ta_expected
call write_l2_arrays
L1a to L2 Aquarius Processor
Calibration constants for counts-to-ta process: Subroutine get_prelaunch_calibration_coeffsValues read in from external files: coeff_loss_file and coeff_nl_file
Reference temperatures for front end losses and noise diodesreal(4) Tref_3, Tref_4, Tref_5, Tref_6, Tref_CND, Tref_ND
Coefficients for front end losses and noise diodes (value at reference temperature + gradient)real(4), dimension(2,n_rad) CL1real(4), dimension(2,n_rad) CL2A, CL2B, CL3, CL4, dL4_dT4, CL5, dL5_dT5real(4), dimension(2,n_rad) CCND, dTCND_dT4, dTCND_dT, CND, dTND_dT
Values provided by J. Piepmeyer, 7/7/2009 RAD1 RAD2 RAD3 REF TEMP [C] V H V H V H CL1 1.000 1.000 1.000 1.000 1.000 1.000 CL2A 1.002 1.002 1.002 1.002 1.002 1.002 CL2B 1.002 1.002 1.002 1.002 1.002 1.002 CL3 1.011 1.016 1.010 1.018 1.012 1.013 23.0 CL4 1.078 1.069 1.076 1.075 1.083 1.073 23.0 dL4dT4 120.0 120.0 120.0 120.0 120.0 120.0 ! Multiplied by 1.0E-6 CL5 1.172 1.169 1.161 1.159 1.161 1.161 20.0 dL5dT5 120.0 120.0 120.0 120.0 120.0 120.0 ! Multiplied by 1.0E-6 CCND 510.8 486.4 475.9 521.3 540.2 507.3 21.0 dTCNDdT4 0.031 0.031 0.031 0.031 0.031 0.031 dTCNDdT 0.984 1.129 0.908 0.880 1.049 1.202 CND 661.1 689.1 680.5 708.5 732.9 697.6 21.0 dTNDdT 1.274 1.391 1.259 1.406 1.328 1.418
Phase imbalances of CND network / OMT subsystem [in deg]real(4), parameter :: delta_phi(n_rad)=1.0, delta_phi_f(n_rad)=1.0
Subroutine Initialize
Reference temperatures and coefficients for correcting detector non-linearityreal(4), dimension(4,n_rad) Dnl20, Dnl21, Dnl22, Dnl30, Dnl31, Dnl32, Tref_nl
Values provided by J. Piepmeyer, 7/7/2009
Subroutine Initialize (cont)
Channel 1 2 3 4 5 6 7 8 9 10 11 12
Mean temperature used for center point of modelTref (K) 297.4554076 297.4667647 297.5065396 297.4405472 297.1769784 297.2290539 297.3453129 297.4807418 296.0485938 296.2202132 296.539167 296.8941114
Temperature dependence of second-order coeffi cient (c2)c2,0 -4.37043E-06 -6.20383E-06 -1.00989E-06 -7.0919E-06 -3.31062E-06 -9.15163E-06 -9.95918E-06 -4.13785E-06 -7.40805E-06 -1.73219E-05 -2.62724E-06 -1.12926E-05c2,1 6.91316E-08 4.29645E-08 6.68137E-08 8.18588E-08 5.13062E-08 3.17049E-08 5.48152E-08 5.69667E-08 4.64253E-08 3.68228E-08 7.08903E-08 5.18223E-08c2,2 2.71454E-10 -3.23785E-10 2.44445E-10 3.57603E-10 -8.42341E-10 -4.11789E-10 -1.93762E-10 -2.49847E-10 -2.34789E-10 9.86806E-11 -3.63836E-10 1.06553E-09
Temperature dependence of third-order coeffi cient (c3)c3,0 9.29131E-10 1.14823E-09 6.97826E-10 1.21359E-09 8.65358E-10 1.30908E-09 1.47055E-09 9.06682E-10 1.20934E-09 1.82229E-09 9.62126E-10 1.31571E-09c3,1 3.4078E-13 6.95425E-12 -1.55549E-12 -6.56256E-13 3.42423E-12 1.12441E-11 6.63741E-12 1.96215E-12 6.84328E-12 1.03532E-11 1.40407E-12 2.74856E-12c3,2 -9.03073E-14 9.66804E-14 -7.49064E-14 -9.00946E-14 1.18479E-13 1.76054E-13 9.49687E-14 1.88242E-14 6.04447E-14 4.49092E-14 4.10894E-14 -1.86667E-13
Subroutine Read_L1A
Simply reads in all the L1A variables and arrays for a single orbit.
integer(4), parameter :: max_cyc= 5000 ! max number of block in l1a file = (5872 sec/orbit)*(1.2 overlap)/(1.44 sec/block) + slopinteger(4), parameter :: n_rad=3 ! number of radiometers (i.e., horns) (inner, middle, outer)integer(4), parameter :: n_prt=85 ! number of thermistorsinteger(4), parameter :: n_subcyc=12 ! number of sub cycles per cycleinteger(4), parameter :: npol=4 !number of polarizations (v, h, plus, minus)integer(4), parameter :: n_Sacc=6 ! number of S(short) accum (antenna) integer(4), parameter :: n_Lacc=8 ! number of L(long) accum (calibration)
integer(4) iorbit, n_cycreal(8), dimension (max_cyc) :: time_utc_2000, time_ut1_2000real(8), dimension(3,max_cyc) :: scpos_j2k, scvel_j2k, scrpyinteger(4), dimension (max_cyc) :: iflag_qc
real(4), dimension(n_prt,max_cyc) :: t_prt
! Short accumulation radiometer raw counts ! 6 records for each of the 12 subcycles. ! S1 and S2 are double accumulatons and will be divided by 2 during processing.! Polarization order (last dimension) is 1=V, 2=P, 3=M, 4=Hreal(4), dimension(n_Sacc, n_subcyc, npol, n_rad, max_cyc) :: S_acc_raw ! raw SA counts
! Long accumulation radiometer raw counts! 8 records per cycle. ! L1-L4 are to be divided by 10. L5-L8 are to be divided by 2. The divisions will be performed during processing. real(4), dimension(n_Lacc, npol, n_rad, max_cyc) :: L_acc_raw ! raw LA counts
Subroutine count_to_ta: Major Output
Gains + offsetsreal(4), dimension (n_rad,max_cyc) :: gvv, ghh, ov, oh, gpv, gph, op, gmv, gmh, om, gpU, gmU
TA before front end loss correctionsreal(4), dimension(3,n_rad,max_cyc) :: TA_hat
TA after front end loss correctionsreal(4), dimension(3,n_rad,max_cyc) :: TA
1 = v-pol 2=h-pol 3= 3rd Stokes
Subroutine count_to_ta (cont)Step 1: Compute Zone temperatures from PRT valuescall get_zone_temperatures
Step 2: OOB checkTBD
Step 3: non-linearity correctioncall nl_correction
Step 4: Determine Dicke load reference temperature and CND and ND injection temperaturesdo icyc =1,n_cyc TND( :,:,icyc) = CND + dTND_dT*(TND_P(:,:,icyc) - Tref_ND) TCND(:,:,icyc) = & CCND + dTCND_dT4*( T4(:,:,icyc) - Tref_CND) +dTCND_dT*(TCND_P(:,:,icyc) - Tref_CND) enddo
Step 5: Calculate gains and offsetscall find_cal_VHcall find_cal_PMcall find_cal_U
Step 6: Count to TA before front end loss corrections. RFI filter (TBD). Averaging over subcyclescall find_TA_hat
Step 7: Front end loss correctionscall fe_loss_corr
Subroutine get_zone_temperatures
Mapping between 85 PRT readings and temperature in the various zones
! Reflector temperature (zone 1), average over 8 thermistors, same for each radiometer T1(1,icyc) = sum(t_prt(34:41,icyc))/8.0 T1(2,icyc) = sum(t_prt(34:41,icyc))/8.0 T1(3,icyc) = sum(t_prt(34:41,icyc))/8.0
! zone 2AT2A(1,icyc) = t_prt(1,icyc)T2A(2,icyc) = t_prt(2,icyc)T2A(3,icyc) = t_prt(3,icyc)
! zone 3T3(1,1,icyc) = t_prt(5,icyc) !RAD1 VT3(2,1,icyc) = t_prt(4,icyc) !RAD1 HT3(1,2,icyc) = t_prt(7,icyc) !RAD2 VT3(2,2,icyc) = t_prt(6,icyc) !RAD2 HT3(1,3,icyc) = t_prt(9,icyc) !RAD3 VT3(2,3,icyc) = t_prt(8,icyc) !RAD3 H
! zone 2B = arithmetic average of 2A and 2B ?T2B(1,icyc) = (T2A(1,icyc) + (T3(1,1,icyc)+T3(2,1,icyc))/2.0) /2.0T2B(2,icyc) = (T2A(2,icyc) + (T3(1,2,icyc)+T3(2,2,icyc))/2.0) /2.0T2B(3,icyc) = (T2A(3,icyc) + (T3(1,3,icyc)+T3(2,3,icyc))/2.0) /2.0
Subroutine get_zone_temperatures (cont)
! zone 4T4(1,1,icyc) = t_prt(11,icyc) ! RAD1 VT4(2,1,icyc) = t_prt(10,icyc) ! RAD1 HT4(1,2,icyc) = t_prt(13,icyc) ! RAD2 VT4(2,2,icyc) = t_prt(12,icyc) ! RAD2 HT4(1,3,icyc) = t_prt(15,icyc) ! RAD3 VT4(2,3,icyc) = t_prt(14,icyc) ! RAD3 H
! zone 5T5(1,1,icyc) = t_prt(17,icyc) ! RAD1 VT5(2,1,icyc) = t_prt(16,icyc) ! RAD1 HT5(1,2,icyc) = t_prt(19,icyc) ! RAD2 VT5(2,2,icyc) = t_prt(18,icyc) ! RAD2 HT5(1,3,icyc) = t_prt(21,icyc) ! RAD3 VT5(2,3,icyc) = t_prt(20,icyc) ! RAD3 H
Subroutine get_zone_temperatures (cont)
! Dicke loadT0(1,1,icyc) = (t_prt(24,icyc) + t_prt(25,icyc))/2.0 ! RAD1 VT0(2,1,icyc) = (t_prt(22,icyc) + t_prt(23,icyc))/2.0 ! RAD1 HT0(1,2,icyc) = (t_prt(28,icyc) + t_prt(29,icyc))/2.0 ! RAD2 VT0(2,2,icyc) = (t_prt(26,icyc) + t_prt(27,icyc))/2.0 ! RAD2 HT0(1,3,icyc) = (t_prt(32,icyc) + t_prt(33,icyc))/2.0 ! RAD1 VT0(2,3,icyc) = (t_prt(30,icyc) + t_prt(31,icyc))/2.0 ! RAD1 H
! ND TND_P(1,1,icyc) = (t_prt(72,icyc) + t_prt(74,icyc))/2.0 ! RAD1 VTND_P(2,1,icyc) = (t_prt(73,icyc) + t_prt(75,icyc))/2.0 ! RAD1 HTND_P(1,2,icyc) = (t_prt(77,icyc) + t_prt(79,icyc))/2.0 ! RAD2 VTND_P(2,2,icyc) = (t_prt(79,icyc) + t_prt(80,icyc))/2.0 ! RAD2 HTND_P(1,3,icyc) = (t_prt(82,icyc) + t_prt(84,icyc))/2.0 ! RAD3 VTND_P(2,3,icyc) = (t_prt(83,icyc) + t_prt(85,icyc))/2.0 ! RAD3 H
! CND TCND_P(1,1,icyc) = t_prt(71,icyc) !RAD1TCND_P(2,1,icyc) = t_prt(71,icyc) !RAD1TCND_P(1,2,icyc) = t_prt(76,icyc) !RAD2TCND_P(2,2,icyc) = t_prt(76,icyc) !RAD2TCND_P(1,3,icyc) = t_prt(81,icyc) !RAD3TCND_P(2,3,icyc) = t_prt(81,icyc) !RAD3
! DetectorTdet(1:4,1,icyc) = t_prt(42:45,icyc) ! RAD1 V/P/M/HTdet(1:4,2,icyc) = t_prt(46:49,icyc) ! RAD2 V/P/M/HTdet(1:4,3,icyc) = t_prt(50:53,icyc) ! RAD3 V/P/M/H
Subroutine nl_correction
Difference between measured detector temperature and reference temperaturedelta_t = Tdet - Tref_nl
Calculate non-linearity correction coefficients at detector temperaturec2 = Dnl20 + Dnl21*delta_t + Dnl22(delta_t**2)c3 = Dnl30 + Dnl31*delta_t + Dnl32*(delta_t**2)
Perform non-linearity correctionvave = raw counts from short/long accumulationscorrected counts = vave + c2*(vave**2) + c3*(vave**3)
Gains and Offsets
Subroutine find_cal_VH Output: gvv, ov, ghh, ohLA counts 1 – 4 (V/H w/o and w/i noise diode ND)t_0 = Dicke load temperature. d_t = Injection temperature of ND c_0 = counts w/o NDc_1 = counts w/I NDGain is averaged over 42 cycles = approx 1 min. Offset is averaged over 206 cycles = approx 5 mingain = (c_1-c_0)/d_t offset = c_0-gain*t_0
Subroutine find_cal_PM Output: gpv, gph, gmv, gmh, op, omLA counts 1 – 4For each polarization (P, M) there are 3 constants (gpv, gph, op) and 4 measurements (V/H w/o and w/i ND): The over-determined problem can be solved by a least square fit (see J. Piepmeyer, ATBD)Gain is averaged over 42 cycles = approx 1 min. Offset is averaged over 206 cycles = approx 5 min
Subroutine find_cal_U Output: gpU, gmUSA counts 1 – 5 (w/o correlated noise diode CND) and SA count 6 (w/i CND)TCND = injection temperature of CNDgpv, gmv, gph, gmhL5= Loss factor of zone 5 (see below)delta_phi = phase imbalance of CND Gain is averaged over 42 cycles = approx 1 min
Subroutine find_TA_hat
Counts to TA before front end loss corrections Input: gvv, ghh, gpv, gph, gmv, gmh, gpU, gmU, ov, oh, op, omSA counts 1 – 5 for each polarization
Output: TA_hat = TA before front end loss corrections. 3 components: V, H, 3rd StokesInversion of forward model (see J. Piepmeyer ATBD)1 for each cycle (average over subcycles).
RFI Filtering Algorithm by C. Ruf to be implementedProvided FORTRAN code strongly simplified from algorithm description?
Subroutine fe_loss_corr
Calculate front end loss coefficients in each zone:L1 = CL1(1,irad)L2A(1:2) = CL2A(1:2,irad) L2B(1:2) = CL2B(1:2,irad) L3(1:2) = CL3(1:2,irad) L4(1:2) = CL4(1:2,irad) + dL4_dT4(:,irad)*(T4(1:2,irad,icyc) - Tref_4)L5(1:2) = CL5(1:2,irad) + dL5_dT5(:,irad)*(T5(1:2,irad,icyc) - Tref_5)
J. Piepmeyer ATBD version 9/11/2009:L4(1:2) = CL4(1:2,irad) * [1.0 + dL4_dT4(:,irad)*(T4(1:2,irad,icyc) - Tref_4)]L5(1:2) = CL5(1:2,irad) * [1.0 + dL4_dT5(:,irad)*(T5(1:2,irad,icyc) - Tref_5)]differs from CND and ND formulasneed to check with Jeff
Apply Li to TA_hat in each zone with temperature Ti starting at zone 5 :
For V/H: TA i, corrected = Li * TA i + (Li – 1 ) Ti
Phase imbalance of OMT cable for 3rd Stokes
Impedance mismatch not implementedneed to check with Jeff
Check of Calibration Code
Nominal value for TA Orbit simulator Counts Calibration Code TA
Nominal values for calibration coefficients provided by J. Piepmeyer:gvv=1.00, ghh=1.00, gpv=0.35, gph=0.35, gpU=0.40, gmv=0.35 , gmh=0.35, gmU=-0.40ov = 500.0, oh = 500.0, op = 500.0 om = 500.0
Constant temperature of all radiometer components + no NEDT: retrieved gains + offsets = original gains and offsetsretrieved TA = original TA
Add NEDT in Forward Model
NEDT
Integration time: = 0.009 secBandwidth: B = 25 MHzReceiver noise temperature: T r = 74.6 K
NEDT = (T scene + T r) / (B*)
NEDT (T scene = 300 K) = 0.79 K
Added to each single short accumulation
NEDT (P,M) = NEDT(V,H)/√2
NEDT versus Quantization Error
Large quantization error because of small gain.
MC simulation:Gain = 1.00 = constantTA = 150.49 K = constantAverage over 12 subcyclesQuantization error: 0.49 K
Adding NEDT improves error
Red star: NEDT (140.49 K)/(5*12)
To Be Done / To Be Determined
1. Implement RFI filter by C. RufFORTRAN code is a simple double-mean filter. What happened with all the elaborate static and dynamic auxiliary data?What happened with the time tagging?
2. Clarification of analytic form for temperature correction for L4 and L5 (J. Piepmeyer)?
3. Impedance mismatch in zone 5 (J. Piepmeyer)?