FraLab
  • Home
  • People
  • Publications
  • Lab Guide
  • Join the Group
  • Tutorials
  • Blog

On this page

  • Where the glow comes from
  • The problem: SIF is tiny and it hides in reflected sunlight
  • Seeing the filling-in
  • The forward model
  • The retrieval
  • Spectral resolution is what limits us
  • Putting a real canopy underneath
  • What OCO actually does
  • What it looks like from orbit
  • Why we bother

How We Measure a Plant’s Glow from Space

Remote Sensing
Spectroscopy
Photosynthesis
SIF
An interactive tour of how solar-induced chlorophyll fluorescence is retrieved from a spectrum — and why it works at all.
Author

Christian Frankenberg

Published

July 31, 2026

Plants fluoresce. A small part of the light a leaf absorbs is not used for photosynthesis and not turned into heat, but re-emitted at slightly longer wavelengths. This is solar induced chlorophyll fluorescence, SIF, and the remarkable thing is that we can measure it from orbit, with instruments that were built to do something else entirely.

What I want to do here is go through the measurement the way we would actually construct it in a forward model: start with the sun, put an atmosphere in the way, put a canopy at the bottom, and only then add the fluorescence on top. Every step has an interactive figure attached, so you can push the parameters around yourself rather than take my word for it. The equations and the code are folded away in the collapsible sections for those who want them. Also, take some of the illustrations, e.g. the chlorophyll absorbance, as conceptual. Most inputs, e.g. the solar spectra and trace-gas absorptions, are based on actual data and simulations.

This follows the same thread as a book chapter Joe Berry and I wrote a while back: Frankenberg, C. and Berry, J. (2018), Solar Induced Chlorophyll Fluorescence: Origins, Relation to Photosynthesis and Retrieval, in S. Liang (ed.), Comprehensive Remote Sensing, Vol. 3, 143–162, Elsevier. The figures here are rebuilt from scratch as interactive versions and the text is written fresh; the published chapter and its typeset figures remain © Elsevier.

Where the glow comes from

Chlorophyll absorbs very efficiently in the blue and the red, and much less beyond about 700 nm. That drop (the red edge), as well as cell structure, is why leaves look green to us and why they are so bright in the near infrared. A small fraction of what is absorbed (often ~1%) comes back out as fluorescence, in a broad band with two peaks, one in the red around 685 nm and one in the far-red around 740 nm. The original fluorescence emission curve is actually even more peaked at 685 nm, about five times higher than at 740 nm, with only a saddle in between. More about this in a later tutorial.

The two peaks are not equally useful, and the reason is visible in the figure below. The red peak is emitted exactly where chlorophyll still absorbs strongly, so a good part of it gets reabsorbed before it ever leaves the leaf. The far-red peak sits beyond the absorption edge and escapes more or less untouched. Switch the reabsorption on and off to see how much this matters.

The problem: SIF is tiny and it hides in reflected sunlight

If we point a spectrometer at a sunlit field, almost everything we record is reflected sunlight. The fluorescence is in there too, but at the wavelengths we use it contributes only on the order of one to two percent of the signal in the far-red. Brightness alone will never separate the two: a bright pixel can be a bright surface or a glowing one, and we cannot tell which.

What saves us is that the two contributions have completely different spectral shape. The sun does not emit a smooth spectrum. Trace elements in the solar photosphere imprint sharp absorption lines on it, the so-called Fraunhofer lines, and their positions are fixed by physics and identical everywhere on Earth. Reflected sunlight reproduces those lines faithfully, because reflectance is a multiplicative term and multiplying does not change the relative depth of a line. Fluorescence is different: it is an additive source sitting at the bottom of the light path, and it is spectrally smooth, so it adds the same small amount of radiance inside a dark line as it does in the bright continuum next to it.

Inside a deep line, where there is little light to begin with, that small addition is a large fractional change. So SIF fills in the Fraunhofer lines, and the degree of filling-in is what we actually retrieve. Think of a Fraunhofer line as a dark curtain in spectral space. If the sun did not emit light beyond 700 nm we could see fluorescence directly. That is of course not how it works, but the Fraunhofer lines at least give us some darker gaps for free.

Seeing the filling-in

Move the fluorescence slider and watch the line fill up. Then change the surface reflectance with the fluorescence set to zero: the line depth does not move at all. That invariance is the whole reason the method can be trusted, and it is worth convincing yourself of it before going further.

Tip

The retrieved SIF readout recovers the value you dialled in, no matter what you do to the reflectance or the sun angle. That is not a trick of the widget, it is the retrieval working, and the next sections show why.

The forward model

NoteWriting down the measured radiance

Ignoring atmospheric scattering, which is small but not entirely negligible in this wavelength range, a nadir measurement over a Lambertian surface can be written as

\[ L_\lambda \;=\; \frac{L_{\lambda 0}\,\mu_0\,\rho_\lambda\,T_\lambda^{\downarrow}\,T_\lambda^{\uparrow}}{\pi} \;+\; \mathrm{SIF}_\lambda\,T_\lambda^{\uparrow} \]

with \(L_{\lambda 0}\) the solar irradiance spectrum, \(\mu_0\) the cosine of the solar zenith angle, \(\rho_\lambda\) the surface reflectance and \(T_\lambda\) the atmospheric transmission along the light path, separated into down- and upwelling parts.

Two things about this equation matter for the retrieval. First, everything sharp in \(L_\lambda\) is inherited from \(L_{\lambda 0}\) and \(T_\lambda\), because over a window a few nanometres wide \(\rho_\lambda\) varies only slowly. Second, the SIF term is added, not multiplied, and it only sees the upwelling transmission. That asymmetry is what we exploit.

The retrieval

NoteFrom forward model to a linear least-squares fit

Lump the smooth reflected terms into a low-order polynomial \(P(\lambda)=\sum_k a_k \lambda^k\) multiplying the solar reference, and treat SIF as a constant across the window. The forward model then becomes linear in its unknowns:

\[ L(\lambda) \;=\; \Big[\textstyle\sum_k a_k \lambda^k\Big]\,E_0(\lambda) \;+\; F . \]

Stack the wavelengths into vectors and this is just \(L = Kx\), with \(x = [a_0,\dots,a_{n_p},\,F]^\top\) and a design matrix whose columns are \(E_0\!\cdot\!\lambda^k\) plus a column of ones for the additive SIF term. Solve by least squares and read off the last coefficient.

The two-point version, which is what the widget’s readout computes, makes the same point with less machinery. Sample the radiance in a line core, \(L_0\), and in the nearby continuum, \(L_c\), and let \(d = E_0(\text{core})/E_0(\text{continuum})\) be the true depth ratio of the line, known from a high resolution solar reference. The reflected part scales by \(d\) at the core, the additive \(F\) does not, so

\[ L_c = R_c + F,\qquad L_0 = d\,R_c + F \;\;\Longrightarrow\;\; F = \frac{L_0 - d\,L_c}{1-d}. \]

Note that \(R_c\) drops out entirely: reflectance and sun angle never enter the answer. This is the algebraic version of the invariance you just played with above.

# Minimal linear SIF retrieval (data-driven Fraunhofer approach).
# Reflectance/continuum modeled as polynomial × solar reference; SIF additive.
using LinearAlgebra, Statistics

"""
    retrieve_sif(λ, L, E0; poly_order=2) -> (sif, coeffs)

λ  : wavelengths (nm) in the retrieval window
L  : measured radiance on that grid
E0 : high-resolution solar reference, interpolated to the same grid
"""
function retrieve_sif(λ, L, E0; poly_order = 2)
    λn = (λ .- mean(λ)) ./ (maximum(λ) - minimum(λ))      # normalize for conditioning
    # columns: E0·λⁿ  (smooth reflectance × solar structure)  +  ones (additive SIF)
    K = hcat((E0 .* λn.^k for k in 0:poly_order)..., ones(length(λ)))
    x = K \ L                                             # least squares
    return x[end], x                                     # SIF is the additive term
end

# --- tiny self-test: build a synthetic scene, then recover the injected SIF ---
λ  = collect(756.0:0.005:759.0)
E0 = 1 .- 0.62 .*exp.(-((λ .- 757.35)./0.055).^2) .-
          0.30 .*exp.(-((λ .- 758.25)./0.045).^2)         # solar reference w/ Fraunhofer lines
ρπT = 120 .* (1 .+ 0.02 .*(λ .- 757.5))                    # smooth reflected continuum
F_true = 1.8                                              # injected SIF
L  = ρπT .* E0 .+ F_true                                  # "measured" radiance

sif, _ = retrieve_sif(λ, L, E0)
@info "retrieved SIF" sif F_true                          # ≈ 1.8
ImportantWhat a real fit has to add on top of this

The snippet above is the right idea and it is genuinely what the method rests on, but nobody retrieves SIF operationally with that few unknowns. In real life we fit a good deal more.

Two additions matter enough to name. The first is a Doppler shift: the Earth’s motion relative to the Sun moves the whole solar spectrum by a small fraction of a spectral sample, and since the retrieval works by comparing measured line depths against a reference, a mis-registered solar spectrum can alias into our SIF fit. So the shift (and usually a stretch) is fitted along with everything else. The second is telluric O₂: the 771 nm microwindow sits close enough to the O₂ A-band that oxygen absorption lands right on top of the solar structure, and it has to be in the forward model rather than absorbed into the polynomial.

Both of these force a change in how the forward model is evaluated. A shifted solar spectrum and an O₂ transmittance have to be built line-by-line at high resolution and convolved with the instrument line shape only at the very end — you cannot apply them on the instrument’s own grid, because convolution and absorption do not commute. Getting that order wrong is a classic source of bias.

There is more beyond those: a wavelength-dependent instrument line shape, zero level offsets, detector nonlinearity, and the rotational Raman correction discussed below. None of it changes the picture the dozen lines above give you, which is exactly why that version is worth reading first.

Spectral resolution is what limits us

So far we have quietly assumed that we can see a Fraunhofer line at its true depth. No instrument can. Every spectrometer convolves the spectrum with its own instrument line shape, usually well approximated by a Gaussian, and we quote the width as the full width at half maximum, with \(\mathrm{FWHM} = 2\sqrt{2\ln 2}\,\sigma \approx 2.355\,\sigma\). A solar line only a few picometres wide therefore comes back much shallower and broader than it really is.

Before looking at what that costs, it is worth being precise about which part of the signal actually matters. Write the ratio of the spectrum with fluorescence to the one without:

\[ \frac{I_0 + F}{I_0} \;=\; 1 \;+\; \frac{F}{I_0(\lambda)} \;=\; \underbrace{1 + F}_{\text{flat offset}} \;+\; \underbrace{F\left(\frac{1}{I_0(\lambda)} - 1\right)}_{\text{what we retrieve}} \]

(with the solar spectrum normalised so the continuum is 1). The first term is a constant lift of the whole curve. It scales with SIF, but it is completely degenerate with anything else that multiplies the spectrum — surface reflectance, aerosol, a calibration error — so on its own it tells us nothing. Everything we can actually retrieve sits in the second term, which is non-zero only where the solar line is deep.

That distinction is the whole story of spectral resolution. The flat offset does not care what instrument you use. The second term does: as the instrument line shape smears the solar line, the core rises back towards the continuum, \(1/I_0\) shrinks, and the retrievable part collapses, even though nothing about the fluorescence has changed. Drag the resolution below from 0.07 nm out to 0.5 nm and watch the kept vs native readout, which compares the retrievable in-filling at your chosen resolution against what it would be at the solar spectrum’s own resolution. Then press subtract the flat offset to throw away the degenerate part and see only the structure a retrieval can work with.

The window shown is the OCO-2 SIF region, with the two fitting microwindows near 758.6 and 770 nm shaded. This is also why an instrument built for precise CO₂ spectroscopy turned out to be so well suited to a measurement nobody had planned for: it already had the resolution.

Tip

The solar spectrum here is the disk-integrated transmittance computed from Geoff Toon’s solar line list, not a low resolution measurement, and the convolution happens live in your browser so the slider stays responsive.

NoteWhy we do not just build the finest spectrometer we can

Taken on its own the figure above argues for ever narrower resolution, and that would be the wrong lesson. Resolution is not free.

The light entering a grating spectrometer is spread across detector pixels. Make the resolution finer and each pixel receives photons from a narrower slice of the spectrum, so it receives fewer of them. Shot noise grows as the square root of the signal, so the signal-to-noise ratio per pixel gets worse as you sharpen. Worse still, readout noise is a fixed cost per pixel no matter how little light landed on it — so at high resolution, where the per-pixel signal is small, readout noise starts to dominate. And with a detector of finite size, finer sampling buys resolution at the cost of coverage: a narrower window, and therefore fewer solar lines to fit.

So the in-filling contrast is only one side of the tradeoff. What matters is how precisely SIF comes out once noise is folded in, and that has an optimum rather than a limit: sharpen past it and you lose more to noise than you gain in contrast. Where the optimum sits depends on the detector, the readout noise, the integration time and how much continuum the fit needs. This is the sort of trade that mission design spends its time on. For the OCO missions this tradeoff was never performed for SIF, since SIF was not part of the original mission plan.

Putting a real canopy underneath

Up to now the surface has been a single number, i.e. spectrally flat. A real canopy is not. Its reflectance climbs steeply between 700 and 750 nm, the red-edge feature, and how steep and how deep that edge is depends on chlorophyll content and on how many leaves there are.

This is what decides which of the two fluorescence peaks we can actually use. The figure below is built from PROSPECT-PRO leaf optics run through 4SAIL, with the incoming light constructed as a Planck continuum times the solar Fraunhofer transmittance times line-by-line O₂ and H₂O absorption, so the O₂-A band at 760 nm and the O₂-B band at 688 nm are where they really are. Build yourself a canopy and watch the two readouts at 685 and 740 nm.

The fourth panel makes the same point as the resolution figure, but across the whole window: it is the ratio of the spectrum with fluorescence to the one without. Two very different features live in it. The broad hump around 685 nm is just SIF sitting on a very dark red background — real, and large, but hopelessly tangled up with anything else that changes broadband reflectance. The sharp structure in the O₂ bands and the Fraunhofer lines can only be produced by an additive source at the surface, and that is what a retrieval keys on. The toggle strips the broadband part away so the usable structure is visible on its own.

Push chlorophyll and leaf area up and the fraction of red fluorescence that escapes the canopy collapses, from around 90% to under 20%, while the far-red peak barely notices. On top of that, the far-red lands on the bright near-infrared shoulder right next to the deep O₂-A band, which is exactly where we want sharp absorption features to fill in. The red peak sits on a dark background where the relative signal is actually larger, which sounds attractive until you remember that the escape fraction there depends strongly on canopy structure, and that is precisely what we do not want mixed into a photosynthesis proxy.

What OCO actually does

The real retrieval is the same idea done carefully. OCO-2 and OCO-3 fit SIF in narrow microwindows near 757 and 771 nm, in the continuum region of the O₂ A-band, which is full of solar Fraunhofer lines and placed to avoid the strong oxygen absorption itself. The fit runs over hundreds of wavelengths at once with the measured instrument line shape applied to the solar reference, rather than the two-point cartoon above.

A few things separate a research retrieval from something you would put in an operational product:

  • The instrument line shape has to be right. The solar reference is convolved with the measured ILS before it is compared to anything, and getting this wrong shows up directly as a SIF bias.
  • Rotational Raman scattering. Molecular scattering redistributes photons in wavelength and fills in Fraunhofer lines on its own, which is a rather good imitation of what we are trying to measure. It introduces both additive and multiplicative bias, and correcting it explicitly is one of the main accuracy improvements planned for the operational OCO SIF pipeline.
  • Gridding and cross-sensor harmonisation. Individual soundings are sparse, so anything useful is a gridded composite, ideally harmonised with TROPOMI and others so the records can actually be compared across platforms.

The OCO instruments are extremely stable by design, and that stability is why their SIF product is still a reference standard even though fluorescence was never a baseline goal of the mission.

What it looks like from orbit

Everything above has been one spectrum at a time. Here is what happens when you do it for a year: every OCO-2 sounding over land in 2021, gridded to 1°×1° and averaged, weighted by how many soundings fell in each cell.

It is worth pausing on what this map is not. No land cover map went into it, no vegetation index, no model. Every pixel is just the degree to which solar Fraunhofer lines came back filled in, converted to a radiance. That the Amazon, the Congo, the maritime continent, the North China Plain and the Corn Belt fall out of it anyway is the whole argument for the method.

Why we bother

At large scales the relationship between space-based SIF and gross primary production, the rate at which the land biosphere fixes carbon, is close to linear and surprisingly insensitive to biome. That is what turns a spectroscopic curiosity into a carbon cycle instrument: a measurement that is robust against how bright the scene is becomes something close to a direct global map of photosynthesis.

NoteFurther reading and next steps
  • Every figure here is a standalone HTML file with no dependencies, so the same widgets can be embedded elsewhere, including on the OCO mission site.
  • A natural companion to this page is the SIF to GPP relationship, and how SIF enters flux inversions as a direct constraint on photosynthetic uptake.

Caltech

 
  • Google Scholar