bookshelf
Imager Calibration Coefficients last updated 17 August 2006

This note describes the calibration equations and coefficients for the GOES-8 Imager, based on my experience, on memos by Mike Weinreb and Joy Johnson at NOAA-NESDIS, and on follow-up notes from "Mr. Calibration", Mike Weinreb (mweinreb@nesdis.noaa.gov).

SOCC now keeps NOAA's GOES calibration advice on-line, so you should regard their values as authoritative.

NOAA also provides on-line calibration information for all their satellite imagers, including AVHRR.

I also try to keep up a personal summary of calibration and validation issues.

There are five GOES-I/M Imager channels and six operational products defined by NOAA. To make your own products, you can download raw data files in "counts", but then you need to convert the raw data to radiances or brightness temperatures. The following sections decribe how to do that.

Imager Visible Calibration Formulas

To convert a GOES-I/M visible Imager "count" value (10-bit digital voltage, range 0-1023) to radiance in Watt/(m^2-sr-um), apply the following formula to each detector:

        Radiance = (m * counts) + b

     Factory-determined values for the m and b coefficients
for the visible detectors on GOES-8 are:
 DETECTOR           m            b
     1         0.5528077      -15.4116
     2         0.5501873      -15.3044
     3         0.5539745      -15.3890
     4         0.5508329      -15.2684
     5         0.5509455      -15.3111
     6         0.5521899      -15.2730
     7         0.5504590      -15.3534
     8         0.5507281      -15.3300

     Factory-determined values for the m and b coefficients 
for the visible detectors on GOES-9 are:
 DETECTOR           m            b
     1         0.5549535      -16.2215
     2         0.5576797      -16.3072
     3         0.5492361      -16.2326
     4         0.5636544      -16.7857
     5         0.5575209      -16.4841
     6         0.5513512      -16.1666
     7         0.5560950      -16.1049
     8         0.5604082      -16.6743

These factory values for the zero-point, b, are a little off because the factory at ITT in Fort Wayne, Indiana, is not as dark as outer space.

The m and b values are fractional floating-point numbers, while the raw counts are 10-bit integers. As a side-effect of mixing integers with fractions, you never get a visible pixel that is exactly zero radiance.

NOAA/NESDIS now normalizes the data from the visible-channel detectors of the GOES-8 Imager so that all the data appear to originate from logical detector #6. This is done to minimize the line-to-line variation ("striping") in the images. The implication for users is that they should apply the GOES-8 calibration coefficients for detector #6 (physical detector #2) to the data from ALL visible detectors. The cal coeffs for detectors #1-5 and #7-8 should not be used as long as NOAA-NESDIS normalizes GOES-8 to detector #6. For GOES-9, NOAA-NESDIS will normalize to logical detector #7 (physical #3).

For GOES-8 visible
        m = 0.5521899  and b = -15.2730    (normalized to detector #6)

For GOES-9 visible
        m = 0.5560950  and b = -16.1049    (normalized to detector #7)

                Radiance = m*counts + b

To dynamically normalize the visible channels, line-by-line, to the actual observed space-count values, use the calibration formula:

        Radiance = m * (counts - counts_in_space)

   Values of counts_in_space are available in the GVAR 
 "Imager Spacelook Calibration Statistics and Data" block 11's. 
In the spring of 1996, NOAA-NESDIS changed the content of the visible data in the GVAR. Instead of sending out scene counts, they send out scene counts minus space counts, plus 29. The "plus 29" guarantees that the overall image brightnesses won't fall by approximately 29 counts when we make the change; also, that the signal from space won't be negative.

To convert a GOES-I/M visible Imager radiance (Watts/etc.) to albedo (a fractional value between zero and one), apply the following formula to every detector:

        Albedo = c * Radiance            (converts W/(m^2-sr-um) to albedo)

    For GOES-8:  c = 1.92979E-03
    For GOES-9:  c = 1.94180E-03

These are all pre-launch values. Post-launch is something else, since the optics undergo unmonitored changes during launch and flight. In fact, post-launch comparisons between the visible brightness of the same places at the same times from GOES-8 and GOES-9 show that GOES-8 is about 15% fainter than GOES-9. Mike Weinreb of NOAA-NESDIS says:

"In July 1995, for a given scene, GOES-8 measured an approximately 15% lower radiance (derived from the pre-launch cal coefficients) than did GOES-9. I can send you an informal memo on that if you're interested. I would suggest that you multiply the GOES-8 calibration slopes (radiance/count) in GVAR by about 1.15. (You can see that without an on-board calibration, the vis channels are not really radiometers, unfortunately, i.e., their calibration is qualitative, not quantitative.) "
PDF iconFinally, you can read the Radiance to Reflectance tutorial by Ken Knapp of CSU about the GOES-8 Imager Visible Channel.

Imager Infrared Calibration Formulas

To convert a GOES-I/M infrared Imager "count" value (digital voltage) to radiance (ergs/etc.), apply the following formula:
        Radiance = [counts - ScalingBias]/ScalingGain
where
   CHANNEL      2               3               4               5
   ScalingGain  227.3889        38.8383         5.2285          5.0273
   ScalingBias  68.2167         29.1287         15.6854         15.3332

The biases are fractional floating-point numbers, while the raw counts are 10-bit integers (range 0-1023). So, count-minus-bias differences always have a fractional part, and you never get a pixel that is exactly zero radiance to worry about when computing the brightness temperature from the inverse of the Plank Function. You will get negative radiances, however, due to random noise and calibration errors.

To convert to brightness temperatures, use the inverse Plank function with the wavenumber for the channel (Nu). The inverse Plank function for brightness temperature is:

        Btemp = [c2*Nu]/ln{1+[(c1*Nu^3)/Radiance]}
 where (in cgs units):
        c1 = 2hc^2 = 1.191066E-5        radiance/(cm^-1)^3
        c2 = hc/k  = 1.438833           K/(cm^-1)
        Nu is in wavenumbers            (cm^-1)
        Rad is in radiance              erg/(cm^2 sec sterradian cm^-1)
        Btemp is in Kelvin              K
Notes: There are approximately 100 cgs radiance units (aka exitance) for a 300 K scene at 10 microns (Lambda = 1E-5 meter = 1E-3 cm, Nu = waves-per-centimeter = 1,000 cm-1). Some forms of the Plank function include the integral over solid angle, in which case c1 has another factor of pi. NOAA uses this form.

NOAA suggests additional factors, a and b, to create a "scene temperature", compensating for the small shift in effective wavenumber with scene brightness.

	Tscene = a + (b * Btemp)

   for GOES-8
CHANNEL  DETECTOR   SIDE   Nu (cm^-1)           a           b (K)
   2        1         1     2556.65         -0.575836     1.00152
   2        2         1     2557.15         -0.580028     1.00152
   3        1         1     1481.85         -0.588961     1.00143
   4        1         1      934.25         -0.313687     1.00126
   4        2         1      934.35         -0.296247     1.00122
   5        1         1      837.05         -0.420806     1.00117
   5        2         1      836.15         -0.341538     1.00102
   
   2        1         2     2558.55         -0.578505     1.00154
   2        2         2     2559.05         -0.579519     1.00154
   3        1         2     1482.65         -0.607246     1.00138
   4        1         2      935.35         -0.344946     1.00128
   4        2         2      934.75         -0.316590     1.00127
   5        1         2      836.95         -0.456146     1.00123
   5        2         2      836.75         -0.413154     1.00116


   for GOES-9
CHANNEL  DETECTOR   SIDE   Nu (cm^-1)           a           b (K)
   2        1         1     2555.15         -0.580725     1.000955
   2        2         1     2555.15         -0.580725     1.000955
   3        1         1     1481.75         -0.489100     1.001092
   4        1         1      934.55         -0.377608     1.001284
   4        2         1      934.25         -0.358734     1.001264
   5        1         1      833.95         -0.288899     1.000914
   5        2         1      834.05         -0.296517     1.000926
   
   2        1         2     
   2        2         2     
   3        1         2     
   4        1         2      
   4        2         2      
   5        1         2      
   5        2         2      

Note that the effective wavenumber (Nu) and scene temperature factors are slightly different for the upper and lower detectors for IR channels 2, 4 and 5, and are also different for the two redundant sides. Unfortunately, the detector/side information can get lost before you get the data, and so these scene temperature corrections can't be applied.

For GOES-K (GOES-10), NOAA preferred to issue look-up tables (LUTs) that convert 1024 possible digital counts for each IR channel to correcponding radiance, brightness temperature, and "mode A" (8-bit count) values, listed separately for side 1 and for side 2 electronics.

Spectral Filter Functions

The relative spectral response of each channel-detector-side on the Imager is measured at the factor by ITT before launch. The results have been tabulated by Mike Wienreb at NOAA-NESDIS and kindly provided here for GOES-8 and GOES-9. The syntax is clearly wavenumber (cm-1) and response in two columns, but the labelling of the detector-side combinations is obscure.

Known Calibration Errors

GOES-10's Imager's 11 micron channel shows significant frame-to-frame, spacelook-to-spacelook, and detector-to-detector flicker. In October 1998, NOAA switched from using line-by-line calibration to some sort of running average.

GOES-10's Sounder's shortwave upper air channels were miscalibrated before launch, leading to discrepancies of a few degrees with respect to GOES-8 and GOES-9. NESDIS at the University of Wisconsin is applying fudge factors to bring them back in-line.

The visible channel on GOES-9 is about 16% (+-2%) more sensitive than GOES-8's, according to tests conducted by Mike Weinreb at NOAA-NESDIS in July 1995.

Upper/lower IR detector pairs inevitably show small differences, and images will appear slightly striped, especially in channel 5. The longwave IR detectors have "1/f noise", an unavoidable increase in drifts at low frequencies (below 100 Hz, in our case), which cause additional detector-to-detector differences.

Sunlight inevitably gets into the Imager's aperture near sub-satellite midnight, confounding the internal calibation system, especially in the shortwave window, channel 2 at 3.9 microns. NOAA/NESDIS may time-interpolate the calibration coefficients between the hours before and after midnidnight, since this is better than using sun-contaminated coefficients.

There is a problem with the infrared emissivity of the scan mirror being angle-dependent. Consequently, outer space appears brighter on one side of the Earth than the other by a few dozen counts, especially in channels 4 and 5. After April 1995, this mirror emissivity effect is minimized by pre-processing software before the data is broadcast in GVAR.

The detector patch temperature of the Imager is raised from 94K to 101K from May to August. Because the patch is on the north face of the satellite, it runs warmer in the summertime, making the radiometric data noisier when the CONUS scenes are hotter, to minimize the imapct on S/N.

On 9 May 1995, Imager calibration was modified to include the filtering of calibration slopes in the infrared channels. This is intended to reduce image-to-image variations in brightness and east-west striping. As a side-effect, discontinuities are introduced when the spacelook is switched from east space to/from west space twice per day.

NOAA Calibration Memos

Date: Fri, 1 Mar 1996 11:45:25 +0500
From: mweinreb@nesdis.noaa.gov (Mike Weinreb)
Subject: GOES Calibration Weekly

GOES-9

Since February 27, the output of detector 6 of the Imager's visible channel
has been running between three and seven counts (out of 1024) higher than
normal for several hours just before the daily eclipse outages.  This causes
east-west "pinstriping" in the high-resolution images.  A similar
malfunction occurred during the eclipse period last fall.  The
"relativization" algorithm, which will become operational with the Sensor
Processing System rehost in mid-March, should get rid of the pinstripes.

The striping in images from channel 4 of the Imager has become more severe.
Until recently it had been much less obtrusive than the striping from the
GOES-8 Imager.  Now, however, it is almost as bad.  The rms of the GOES-9
striping, approximately 0.06K (at 300K) on November 10, 1995, was
approximately 0.17K on Feb. 22, 1996.  

Topic: GOES-11 Visible Channel Calibration Update
Message Issued: June 21, 2006, 1915 UTC
Satellites Impacted: GOES-11
Products Impacted: GOES-11 Imager Visible Channel
Date/Time of Initial Impact: June 21, 2006  16:00 UTC
-----------------------------------------

Details:

The following information was received from OSO regarding the GOES-11
Visible Channel Calibration:

Dear GOES Visible Channel Users:

GOES-11 replaced GOES-10 as GOES-WEST at 16:00 UTC on June 21. The
following correction is recommended to compensate for its Imager visible
channel degradation:

   R_post = 1.154*R_pre

where R_pre is the reflectance (albedo) one obtains with pre-launch
calibration coefficients, and R_post is the same with post-launch
calibration. Note that R can also be radiance on both sides of the
equation.

For example, in GOES-11 2006_177 (June 20, 2006) 21:00:00 image, at
1:00:48N and 135:00:01W (normal image line 7754 and element 13837), the
raw count is 196. Using pre-launch calibration coefficients, this
represents reflectance of 18.9% (McIDAS). The calibrated reflectance
using post-launch calibration should be:

   R_post = 1.154*18.9% = 21.8%

Please keep in mind that this is an initial assessment of GOES-11 Imager
visible channel calibration for operation on Day 1. The calibration
update, for example, has not been made time-dependent. More analyses
will follow as we collect more data.


--------------------------------------
Contact Information:
Brian Hughes
Satellite Services Division
NOAA/NESDIS/OSDPD
301-763-8051 x106
brian.hughes@noaa.gov
See http://www.ssd.noaa.gov/PS/SATS/messages.html  for this and other
satellite related messages.
See http://www.ssd.noaa.gov  for full GOES scanning schedules.

Visible scene albedo to Mode-A (6-bit) Counts

Visible Mode A is the VISSR 6-bit quasi square-root representation of albedo (radiance). The following equation is an approximate conversion: VISSR six-bit counts = 63*sqrt(GVAR counts/1023) This is not used in current NOAA data processing. See Gary Ellrod at NOAA-NESDIS for more details.

Scene Temperatures to Mode-A (8-bit) Counts

NOAA-NESDIS uses the following two-ramp dog-leg scheme for converting scene temperatures into an unsigned 8-bit integer in the range 0 to 255:
First, clip all scene temperatures to be in the range 163K to 330K
Then
     Mode-A (counts) = 418K - Tscene     (for Tscene between 163K and 242K)
     Mode-A (counts) = 660K - 2*Tscene   (for Tscene between 242K and 330K)
This inverts the intensity -- 330K corresponds to zero counts, while 163K corresponds to 255 counts. It also maps the warmest 88K into the first 176 counts (0.5K/count), and maps the coldest 80K into the last 80 counts (1.0K/count). Consequently, typical scene temperatures between 220K and 300K map into middle-grey levels between 200 and 60 counts, respectively.

MODE-A lookup table             
Tscene (K)      ModeA (count)
330             0
329.5           1
329             2
328.5           3
328             4
327.5           5
327             6
326.5           7
326             8
325.5           9
325             10
324.5           11
324             12
323.5           13
323             14
322.5           15
322             16
321.5           17
321             18
320.5           19
320             20
319.5           21
319             22
318.5           23
318             24
317.5           25
317             26
316.5           27
316             28
315.5           29
315             30
314.5           31
314             32
313.5           33
313             34
312.5           35
312             36
311.5           37
311             38
310.5           39
310             40
309.5           41
309             42
308.5           43
308             44
307.5           45
307             46
306.5           47
306             48
305.5           49
305             50
304.5           51
304             52
303.5           53
303             54
302.5           55
302             56
301.5           57
301             58
300.5           59
300             60
299.5           61
299             62
298.5           63
298             64
297.5           65
297             66
296.5           67
296             68
295.5           69
295             70
294.5           71
294             72
293.5           73
293             74
292.5           75
292             76
291.5           77
291             78
290.5           79
290             80
289.5           81
289             82
288.5           83
288             84
287.5           85
287             86
286.5           87
286             88
285.5           89
285             90
284.5           91
284             92
283.5           93
283             94
282.5           95
282             96
281.5           97
281             98
280.5           99
280             100
279.5           101
279             102
278.5           103
278             104
277.5           105
277             106
276.5           107
276             108
275.5           109
275             110
274.5           111
274             112
273.5           113
273             114
272.5           115
272             116
271.5           117
271             118
270.5           119
270             120
269.5           121
269             122
268.5           123
268             124
267.5           125
267             126
266.5           127
266             128
265.5           129
265             130
264.5           131
264             132
263.5           133
263             134
262.5           135
262             136
261.5           137
261             138
260.5           139
260             140
259.5           141
259             142
258.5           143
258             144
257.5           145
257             146
256.5           147
256             148
255.5           149
255             150
254.5           151
254             152
253.5           153
253             154
252.5           155
252             156
251.5           157
251             158
250.5           159
250             160
249.5           161
249             162
248.5           163
248             164
247.5           165
247             166
246.5           167
246             168
245.5           169
245             170
244.5           171
244             172
243.5           173
243             174
242.5           175
242             176
241             177
240             178
239             179
238             180
237             181
236             182
235             183
234             184
233             185
232             186
231             187
230             188
229             189
228             190
227             191
226             192
225             193
224             194
223             195
222             196
221             197
220             198
219             199
218             200
217             201
216             202
215             203
214             204
213             205
212             206
211             207
210             208
209             209
208             210
207             211
206             212
205             213
204             214
203             215
202             216
201             217
200             218
199             219
198             220
197             221
196             222
195             223
194             224
193             225
192             226
191             227
190             228
189             229
188             230
187             231
186             232
185             233
184             234
183             235
182             236
181             237
180             238
179             239
178             240
177             241
176             242
175             243
174             244
173             245
172             246
171             247
170             248
169             249
168             250
167             251
166             252
165             253
164             254
163             255

STRUCTURED DUMP OF THE CALIBRATION COEFFICIENTS FROM A GVAR STREAM

Imager Constants are ordered by [Channel][Detector][Side]. GVAR index [0] is NOAA Channel 1, etc.. The dump is from GOES-8, in mid-1994. The coefficients are meaningless for the uncalibrated visible detectors in GVAR channel 0.
{
    [0] {
        [0] {
            [0] struct Radiometric {
                Nu = 0.0
                BtGain = 0.0
                BtBias = 0.0
                ScalingGain = 0.0
                ScalingBias = 0.0
                Units = 0
                Table = (nil)
            }
            [1] struct Radiometric {
                Nu = 0.0
                BtGain = 0.0
                BtBias = 0.0
                ScalingGain = 0.0
                ScalingBias = 0.0
                Units = 0
                Table = (nil)
            }
        }
        [1] {
            [0] struct Radiometric {
                Nu = 0.0
                BtGain = 0.0
                BtBias = 0.0
                ScalingGain = 0.0
                ScalingBias = 0.0
                Units = 0
                Table = (nil)
            }
            [1] struct Radiometric {
                Nu = 0.0
                BtGain = 0.0
                BtBias = 0.0
                ScalingGain = 0.0
                ScalingBias = 0.0
                Units = 0
                Table = (nil)
            }
        }
    }
    [1] {
        [0] {
            [0] struct Radiometric {
                Nu = 2556.6500000000001
                BtGain = 1.00152
                BtBias = -0.57583600000000001
                ScalingGain = 227.38890075683594
                ScalingBias = 68.216705322265625
                Units = 2
                Table = 0x102f4150
            }
            [1] struct Radiometric {
                Nu = 2558.5500000000002
                BtGain = 1.0015400000000001
                BtBias = -0.57850500000000005
                ScalingGain = 227.38890075683594
                ScalingBias = 68.216705322265625
                Units = 2
                Table = 0x10434a98
            }
        }
        [1] {
            [0] struct Radiometric {
                Nu = 2557.1500000000001
                BtGain = 1.00152
                BtBias = -0.58002799999999999
                ScalingGain = 227.38890075683594
                ScalingBias = 68.216705322265625
                Units = 2
                Table = (nil)
            }
            [1] struct Radiometric {
                Nu = 2559.0500000000002
                BtGain = 1.0015400000000001
                BtBias = -0.57951900000000001
                ScalingGain = 227.38890075683594
                ScalingBias = 68.216705322265625
                Units = 2
                Table = (nil)
            }
        }
    }
    [2] {
        [0] {
            [0] struct Radiometric {
                Nu = 1418.8499999999999
                BtGain = 1.00143
                BtBias = -0.58896099999999996
                ScalingGain = 38.838302612304688
                ScalingBias = 29.128692626953125
                Units = 2
                Table = 0x104352a0
            }
            [1] struct Radiometric {
                Nu = 0.0
                BtGain = 0.0
                BtBias = 0.0
                ScalingGain = 0.0
                ScalingBias = 0.0
                Units = 0
                Table = (nil)
            }
        }
        [1] {
            [0] struct Radiometric {
                Nu = 1412.6500000000001
                BtGain = 1.0013799999999999
                BtBias = -0.60741999999999996
                ScalingGain = 38.838302612304688
                ScalingBias = 29.128692626953125
                Units = 2
                Table = (nil)
            }
            [1] struct Radiometric {
                Nu = 0.0
                BtGain = 0.0
                BtBias = 0.0
                ScalingGain = 0.0
                ScalingBias = 0.0
                Units = 0
                Table = (nil)
            }
        }
    }
    [3] {
        [0] {
            [0] struct Radiometric {
                Nu = 934.25
                BtGain = 1.00126
                BtBias = -0.31368699999999999
                ScalingGain = 5.2285003662109375
                ScalingBias = 15.685400009155273
                Units = 2
                Table = 0x10071eb0
            }
            [1] struct Radiometric {
                Nu = 935.35000000000002
                BtGain = 1.0012799999999999
                BtBias = -0.34494599999999997
                ScalingGain = 5.2285003662109375
                ScalingBias = 15.685400009155273
                Units = 2
                Table = 0x101b27f8
            }
        }
        [1] {
            [0] struct Radiometric {
                Nu = 934.35000000000002
                BtGain = -0.29624699999999998
                BtBias = 1.00122
                ScalingGain = 5.2285003662109375
                ScalingBias = 15.685400009155273
                Units = 2
                Table = (nil)
            }
            [1] struct Radiometric {
                Nu = 935.75
                BtGain = 1.0012700000000001
                BtBias = -0.31658999999999998
                ScalingGain = 5.2285003662109375
                ScalingBias = 15.685400009155273
                Units = 2
                Table = (nil)
            }
        }
    }
    [4] {
        [0] {
            [0] struct Radiometric {
                Nu = 837.04999999999995
                BtGain = -0.42080600000000001
                BtBias = 1.0011699999999999
                ScalingGain = 5.0272998809814453
                ScalingBias = 15.333200454711914
                Units = 2
                Table = 0x101b3000
            }
            [1] struct Radiometric {
                Nu = 836.95000000000005
                BtGain = -0.456146
                BtBias = 1.0012300000000001
                ScalingGain = 5.0272998809814453
                ScalingBias = 15.333200454711914
                Units = 2
                Table = 0x102f3948
            }
        }
        [1] {
            [0] struct Radiometric {
                Nu = 836.14999999999998
                BtGain = -0.34153800000000001
                BtBias = 1.00102
                ScalingGain = 5.0272998809814453
                ScalingBias = 15.333200454711914
                Units = 2
                Table = (nil)
            }
            [1] struct Radiometric {
                Nu = 836.75
                BtGain = -0.41315400000000002
                BtBias = 1.00116
                ScalingGain = 5.0272998809814453
                ScalingBias = 15.333200454711914
                Units = 2
                Table = (nil)
            }
        }
    }
} 


©COPYRIGHT AND WARRANTY DISCLAIMER NOTICE
This information resource was created by one irresponsible employee of NASA.
It is in the public domain and permission is granted to use, duplicate, modify and redistribute it.
Please give credit for the satellite images to NASA-Goddard Space Flight Center.
NASA and its employees provide absolutely NO WARRANTY OF ANY KIND.

Mail to: Dennis.F.Chesters@nasa.gov