← Eggert Gudmundsson Projects

Thermal sensor · IR window characterization

Window Calibration

Reference sweeps with an IR window glued to the front of an AMG8854M01, differenced against the no-window baseline at matched scene temperature. The window effect is real and scene-dependent, but neither run isolates transmission: the window sits at whatever air temperature surrounds it, not at the die temperature.

Part
Panasonic AMG8854M01 (35.6° FOV)
Device ID
cali.EGG68 (nRF9151)
Window
IR window, glued to the sensor face
Target
1 in steel block, 3M black tape, insulated
Reference
PT1000 / Agilent 34401A — unmoved since the no-window run
Standoff
5.5 cm → 35 mm FOV footprint
Scene sweep
4.9 → 22.9 °C (PT1000)
Die temp
25.2 – 26.7 °C
Frames
238  /  ~1 per minute, 2026-08-31/09-01 UTC
Baseline
no-window warm-up, 2026-08-29, 173 frames

Summary

An IR window glued to the sensor face shifts the apparent temperature by a scene-dependent amount: from +0.4 °C when the scene is near 5 °C to −1.1 °C when the scene is near 21 °C, crossing zero at a scene temperature of about 9.5 °C. A pure transmission loss cannot do this: with the window colder than nothing in view, it would pull every reading in this range upward. The window was not at die temperature. Backing the window temperature out of the radiometric model puts it near 10–14 °C for the whole run — roughly the cold air pool in the chimney, and 12–15 °C below the die. A single warm-up sweep therefore returns only the compound quantity (1−τ)·a ≈ 0.13, where a is the unknown window-to-die coupling, not the transmission τ itself. Isolating τ needs the window temperature measured directly.

Window effect, cold scene

+0.4 °C

scene ~5 °C

Window effect, warm scene

−1.1 °C

scene ~21 °C

Sign change

9.5 °C

scene temperature

Compound coefficient

0.13

(1−τ)·a — not τ

The setup

Identical to the no-window warm-up: the same 1 in steel block, cooled and left to warm back to ambient over four hours in an insulated chimney; the same PT1000 on the same spot of the tape, not moved since that run, so the scene temperature is a shared reference between the two datasets. The only change is an IR window bonded to the front of the sensor. The comparison is frame-by-frame at matched PT1000 temperature — the contrasted-scene differencing approach of the thermography standards, run over a continuous warm-up rather than two fixed points [4][6]:

Δ(T) = GEwindow(T) − GEno window(T)

The no-window reading is modelled as a cubic in scene temperature fitted to the 2026-08-29 run. The sensor's dependence on its own die temperature is negligible over the range the die covered (about 0.005 °C per °C), so the roughly 1 °C difference in die temperature between the two nights does not affect the comparison.

The first six windowed frames are dropped. Frames 0–1 read Δ = +1.2 and +1.6 °C with the die still falling from 25.9 to 25.2 °C — the settling transient from replacing the chimney over the block before logging started. It is gone by frame 6.

The net window effect

Panel a overlays the apparent-temperature error with and without the window. Without the window the array mean sits a near-constant 2.5 °C above the PT1000. With the window that offset is scene dependent: larger at the cold end, and it crosses and goes negative as the scene warms. Panel b is the difference — the window's own contribution:

Δ = −0.111·Tscene + 1.05 °C   (equivalently Δ ≈ 0.13·(Tdie − Tscene))

Left: apparent temperature error versus scene temperature, with and without the window. Right: the difference between the two, versus scene temperature, crossing zero near 9.5 C.
n = 232 windowed frames after the settling drop, matched to the no-window model. Residual about the line 0.15 °C rms.
scene binnΔ meandie mean
5–8 °C13+0.37 °C25.3 °C
8–11 °C21+0.11 °C25.4 °C
11–14 °C26−0.40 °C25.4 °C
14–17 °C35−0.79 °C25.5 °C
17–20 °C50−1.08 °C26.1 °C

Why this is not the transmission

The radiometric model for a window in the path, under the assumption that the window and the surrounding environment share one temperature, is [4]

Tapparent = τ·Tscene + (1−τ)·Twindow

so the window's contribution is Δ = (1−τ)·(Twindow − Tscene). The measured Δ is positive at cold scenes and negative at warm scenes, which means Twindow lies between the cold and warm ends of the scene sweep — not up at the die. Solving the model for the window temperature at three assumed transmission values:

τ assumedimplied Twindowdie
0.8510 – 16 °C25.5 °C
0.9010 – 14 °C25.5 °C
0.955 – 15 °C25.5 °C
Die temperature, scene temperature, and the window temperature implied by the model for three transmission values, all versus scene temperature. The implied window temperature sits in a shaded 9 to 14 C band, far below the die.
The die held 25.2–26.7 °C. The window temperature implied by the model sits near 10–14 °C regardless of the transmission assumed.

The sensor and its glued window are recessed about 8 mm into a 5.5 cm insulated well, looking down a cold air column onto a cold block. The window is convectively coupled to that column, not conductively locked to the die. It ran cold and roughly flat near the air-pool temperature while the block warmed underneath it.

Because Twindow is unknown and itself set by the rig, the warm-up sweep is degenerate — the same degeneracy noted for thermography windows, where the transmittance correction becomes indeterminate as the window and target temperatures converge [5]. Writing Twindow = a·Tdie + (1−a)·Tscene gives Δ = (1−τ)·a·(Tdie − Tscene), and the fit returns only the product:

(1−τ)·a ≈ 0.13

The single number τ ≈ 0.89 that appears if the window temperature is forced constant is a coincidental fit, not a measurement, and is not used.

Per-pixel

The compound coefficient (1−τ)·a fitted per pixel: mean 0.131, standard deviation 0.044, range 0.04–0.20. It has spatial structure — low along the top-left rows and columns, higher along the bottom and right edges. The gradient is diagonal, not radial, so it is more consistent with the window sitting at a slight tilt, or with a temperature gradient across the window, than with angle-dependent transmission — though oblique rays through a window are known to carry a pixel-dependent transmittance [4]. It carries the same unknown-window-temperature caveat as the array figure and is reported as qualitative.

8x8 heatmap of the per-pixel compound window coefficient, showing a diagonal gradient from about 0.04 at top-left to about 0.20 at bottom-right.
Row-major index = row·8 + col, matching the published pixels[] array.
0.040.050.050.060.120.180.180.20
0.040.040.040.040.120.160.180.19
0.080.070.090.080.130.130.160.18
0.150.110.060.090.120.130.150.16
0.170.130.110.100.120.120.160.15
0.160.130.130.120.130.130.150.15
0.160.160.150.140.160.130.150.15
0.180.180.180.180.190.180.190.17

Re-test — raising the window out of the cold pool

The first run left the window sitting in the chimney's cold air column. A second run (2026-09-02) repeated the warm-up with the sensor and window raised 35 mm, clear of that pool, to test whether the window would then track the die. Same block, same PT1000, same 2026-08-29 no-window baseline; standoff now ~9 cm, so the analysis is restricted to the central 4×4 pixels (the footprint barely covers the block at that height).

Left: central 4x4 apparent-temperature error versus scene for three runs - no window, window in the cold pool, window elevated. Right: the window effect versus the no-window baseline for the cold-pool and elevated runs, two lines of different slope crossing zero at scene 7 C and scene 18 C respectively.
Central 4×4. The elevated run (red) reads well above the others at cold scenes and converges with no-window near scene 20 °C.
runslope vs Tscenezero-crossingΔ @ scene 5Δ @ scene 20
window in cold pool (5.5 cm)−0.10scene 7 °C+0.2 °C−1.3 °C
window elevated (9 cm)−0.29scene 18 °C+3.9 °C−0.5 °C

Since Δ = 0 when Twindow = Tscene, the zero-crossing is the window temperature. It moved from ~7 °C (the cold pool) to ~18 °C (room air) — not to the ~26 °C die. Raising the sensor swapped one air bath for another. The window follows whatever air surrounds it; the slope also steepened, because fully exposed above the chimney it couples to ambient harder than when it was recessed.

Two 8x8 heatmaps of the per-pixel window effect for the elevated run: cold end scene 3 to 6 C showing values from about +2.7 in the centre rising to +7 at the top-right corner, and warm end scene 17 to 20 C near zero across the array.
Cold end: the effect is common-mode (the cleanest pixel is +2.7 °C), with a diagonal gradient from residual tilt or the outer pixels grazing the warm chimney rim. Warm end: converged with no-window.

Caveats: there is no no-window run at 9 cm to subtract the standoff change, and the per-pixel gradient suggests ~1 °C of the cold-end excess is geometry rather than window. The common-mode signal and the zero-crossing shift (7 → 18 °C) are not explained by geometry. Both runs point the same way: the bench cannot put the window at die temperature. A powered sensor runs its die above the room, and an exposed window sees the room. “Window = die” is a property of the deployment thermal design — a sealed metal enclosure at one temperature, or a deliberate conductive tie and a convective barrier — not something reproducible on the bench.

What this means for the product

The deployment sensor will also have a window bonded to it, so a window term is unavoidable. Two things follow from this run:

  • The window bias is not a constant. Over a 15 °C scene span it moves by about 1.5 °C and changes sign. A fixed offset does not correct it.
  • The correction needs the window temperature, not just the transmission. Assuming the window follows the die — the working assumption going into this run — is wrong for a recessed sensor looking at a scene well below its body temperature. How wrong depends on the mechanical design: a window flush with the enclosure wall, in contact with the enclosure, will couple closer to the die than this bench chimney does. That has to be measured in the product mechanics.

Until the window temperature is instrumented, the usable empirical result is the compound slope: Δ ≈ 0.13·(Tdie − Tscene), valid for this sensor in this rig.

The window in an accuracy and cost budget

Once transmission is accounted for, the window's remaining effect on the reported object temperature is set by two numbers: (1−τ), and the gap between the window's own temperature and the scene it is imaging. The figure below plots the error a changing, uncompensated window temperature produces, for four target temperatures, at the best-estimate transmission τ = 0.89.

Two panels. Left: object-temperature error versus window temperature for targets at 5, 10, 15 and 20 C, four parallel lines of slope 0.11, each crossing zero at its own target temperature, with a shaded plus/minus 1 C band. Right: residual error versus window-temperature departure from an assumed value, a single line of slope 0.125, reaching plus/minus 1 C at plus/minus 8 C of drift.
a. No window compensation: error = (1−τ)·(Twin − Ttarget). Each target reads true only when the window sits at that target's temperature; the error grows 0.11 °C for every °C the window departs from it. b. Compensating to a fixed assumed window temperature re-centres the zero but barely changes the slope ((1−τ)/τ = 0.125 °C/°C): a window that drifts ±8 °C from the assumed value still costs ±1 °C, whatever the target.

Neither static approach removes the sensitivity to a moving window. A fixed assumption — whether “no correction” or “correct to a nominal value” — is exact at one window temperature and drifts at ~0.11 °C per °C either side of it. Only a live window-temperature input flattens the slope.

Against a 1 °C object-temperature budget, the design levers are:

  • A higher-transmission window. Every error in the figure scales with (1−τ). An anti-reflection-coated window at τ ≈ 0.95 halves them against the 0.89 measured here; an uncoated window at τ ≈ 0.7 nearly triples them. This is the single highest-leverage choice and it is a bill-of-materials line item.
  • Design the window to sit at die temperature. This does not by itself shrink the error — a cold scene under a warm enclosure still leaves a large window-to-scene gap. Its value is that it lets the existing die thermistor stand in as the window temperature, so the correction in panel b runs off a sensor already on the board with no added part. It requires a short conduction path from window to enclosure wall, a small recess, and shade from direct sun, and it has to be confirmed on the real mechanics — this bench run, with the window in a cold air column, is the counter-example.
  • Measure the window temperature. A thermistor on the window frame — a few cents and one ADC channel — drives panel b's slope to near zero and makes the correction exact to the sensor's own noise, across the full scene and ambient range. It is the only option that holds accuracy when the enclosure can be sun-loaded well above a cold scene.
  • Widen the target. At ±2 °C, a coated uncompensated window (τ ≈ 0.95, slope 0.05 °C/°C) stays in budget for any window temperature within ~40 °C of the target, and no window instrumentation is needed.

Recommendation. A coated window and a frame thermistor. The coating is where the accuracy is won or lost; the thermistor is the cheap insurance that keeps a sun-loaded or fast-changing window from spending the whole error budget. Designing the window onto the die thermally is worthwhile only if it removes the thermistor — and only after the product mechanics show the window actually tracks the die to within a few degrees.

Next run

Two runs have now shown the window sitting at the local air temperature, not the die. The blocking step is confirmed: a temperature probe on the window itself.

  • Bond a PT1000 (or fine thermocouple) to the window edge and log it with the die. Then τ = 1 − Δ / (Twindow − Tscene) is available per frame, and τ separates from the window-temperature term cleanly. Every warm-up without this yields only the compound (1−τ)·a.
  • Or hold the scene at a fixed temperature and sweep the sensor assembly temperature instead, so the die and window move together against a static scene.
  • Repeat once the product enclosure exists, with the window mounted as it will ship, to get the coupling for the real geometry — and to check whether the sealed metal enclosure does hold the window at die temperature where the bench cannot.
  • A fixed central pixel subset and better centring / tilt control at the longer standoff, to remove the residual per-pixel gradient.

Method & caveats

  • Part: Panasonic AMG8854M01, the low-gain Grid-EYE variant — rated ±3.0 °C typical accuracy, 35.6° field of view [1][2]. Reference-spec §9-1 lists a window in the path as an accuracy-degrading condition requiring user temperature correction [1].
  • The window run hit its 4 h safety cap before the block reached ambient; the PT1000 was still rising at 22.9 °C. The scene range is 4.9–22.9 °C against the no-window baseline's 2.4–21.3 °C; the comparison is restricted to the overlap.
  • The no-window reading is a cubic fit in scene temperature, residual 0.12 °C rms. The die term was fitted and found negligible; it is not carried.
  • Each capture is a 16-frame burst average. The 0.15 °C scatter about the Δ line is between-capture temporal noise plus any slow drift between the two nights.
  • The two runs are on different nights. The scene is a shared physical reference (same PT1000, same spot, unmoved). Room temperature and the sensor's thermal environment are not controlled between runs; this is folded into the scatter.
  • 238 windowed captures from the device read API joined to the PT1000 log on frame RTC, 232 used after the settling drop; 0 corrupt or stale frames in range.

References

  1. Panasonic. Infrared Array Sensor “Grid-EYE” Reference Specifications, AMG88** (document 160205). Radiometric model, temperature accuracy, notice-for-use §9-1.
  2. Panasonic. Infrared Array Sensor Grid-EYE AMG8854M01 (Narrow type), document pana-s-a0011553419-1 (30-Sep-20). 35.6° viewing angle, per-pixel optical properties, dimensions.
  3. Paes, V.F. et al. (2022). Calibration uncertainty of MEMS thermopile imagers for quantitative temperature measurement. Infrared Physics & Technology 120. ScienceDirect.
  4. Danjoux, R. Window and External Optics Transmittance. Infrared Training Center Technical Publication 60 (T560472_A). PDF. Radiance model for a window in the path, the contrasted-scene ratio method for τw, and the pixel-dependent transmittance of oblique rays.
  5. Madding, R.P. (2004). IR Window Transmittance Temperature Dependence. InfraMation 2004 Proceedings, Infrared Training Center / FLIR Systems (ITC 104 A). PDF. Band-averaged τ depends on window and target temperature; the correction is indeterminate when the two are equal.
  6. ASTM E1897-14(2022). Standard Practice for Measuring and Compensating for Transmittance of an Attenuating Medium Using Infrared Imaging Radiometers. ASTM International.

Further reading is collected under Literature.

Data: cold-pool run warmup_window_20260831_234510.csv (frame id 4223–4460, n = 238); elevated run warmup_window_elev_20260901_225017.csv (frame id 5781–6021, n = 238); baseline warmup_20260829_212910.csv (frame id 1786–1987, n = 173); device thermal read API. Published 2026-09-01, re-test added 2026-09-02.