A fiber Bragg grating reflects one narrow wavelength, set by the grating period Λ and the fiber's effective index neff:
λ_B = 2 · n_eff · Λ
Δλ_B / λ_B = (1 − p_e)·ε + (α_Λ + ξ)·ΔT
Strain shifts λ_B through the fiber's photoelastic coefficient pe; temperature shifts it too, through thermal expansion and the thermo-optic effect. The three gratings here are pre-tuned to slightly different baseline wavelengths (1548 / 1550 / 1552 nm) — standard wavelength-division multiplexing — so all three reflected peaks stay visually separated on one fiber as they shift.
Three gratings are bonded at 120° around the catheter wall, close to the tip. A contact force splits into an axial push (compresses/stretches all three equally) and a bending moment (compresses the grating facing the tissue, stretches the one opposite):
ε_i = ε_axial − ε_bend·cos(θ_i − φ_F), θ = 0°, 120°, 240°
Summing the three readings cancels the bending term and isolates the common-mode signal — axial strain and any temperature drift, which looks identical to it:
ε_axial ≈ mean(Δλ_i) / K_ε (biased by K_T·ΔT unless compensated)
Projecting the three readings onto cos θ and sin θ instead — the same trick a 3-phase power meter uses — cancels the axial and thermal common-mode terms automatically and recovers the bending amplitude and its azimuth directly:
C_x = ⅔Σ Δλ_i·cosθ_i, C_y = ⅔Σ Δλ_i·sinθ_i
ε_bend = √(C_x²+C_y²)/K_ε, φ_F = atan2(−C_y, −C_x)
The spectrum plot shows the three actual reflected peaks shifting in real time as you move the sliders; the calibration plot below it sweeps force at your current angle/azimuth to show the underlying linear relationship the sensor relies on. Toggle thermal compensation off to see the axial channel drift with ambient temperature while the recovered bending force stays correct — this is why real catheter force sensors (e.g. contact-force ablation catheters used in cardiac ablation) carry a dedicated reference grating just to track temperature.