--- A98/drill_smo.c
+++ A99/drill_smo.c
@@ -291,10 +291,16 @@
         if (s->acquisition_samples < 255u) ++s->acquisition_samples;
     }
     s->previous_raw_angle_rad=raw_angle;
-    /* The current observer and BEMF smoother each contribute phase delay. */
-    const float phase_lead = direction *
-        clamp(2.0f*absf_local(s->electrical_speed_rad_s)*
-              c->bemf_filter_tau_s, 0.0f, 0.65f);
+    /* Exact frozen-frequency phase of the two discrete first-order poles:
+     * H(z) proportional to 1/[(1-a z^-1)(1-q z^-1)]. This applies to
+     * the unsaturated injection region, not every physical operating point. */
+    const float a_pole=1.0f/linear_denominator;
+    const float q_pole=1.0f-filter_alpha;
+    float sample_sine,sample_cosine;
+    drill_smo_sincos(s->electrical_speed_rad_s*i->dt_s,&sample_sine,&sample_cosine);
+    const float phase_real=(1.0f-a_pole*sample_cosine)*(1.0f-q_pole*sample_cosine)-a_pole*q_pole*sample_sine*sample_sine;
+    const float phase_imag=sample_sine*(a_pole+q_pole-2.0f*a_pole*q_pole*sample_cosine);
+    const float phase_lead=atan2_cordic(phase_imag,phase_real);
     const float measured_angle = wrap_pi(raw_angle + phase_lead);
     float phase_error = 0.0f;
     if (!s->angle_valid) {
