AeroEdge does not hand you a number from a black box. One method produces your CdA, a second corroborates it, and a pitot sensor feeds both better data. Every input stays on screen and overridable. Here is what runs under the hood.
The Chung method. Your power implies an elevation profile; the CdA that makes a closed loop sit flat is the number AeroEdge reports.
Martin 1998, solved per lap. It corroborates the VE result. If it diverges by more than 0.010 m², AeroEdge raises a divergence flag.
A pitot aerometer measures apparent airspeed and yaw, feeding measured wind into both models above. It is better input, not a third vote.
VE / Chung gives the number. Martin agreeing is corroboration. Martin diverging by more than 0.010 m² is a flag worth investigating, a model-agreement signal about your protocol, not a second answer of equal weight and not a source of measurement uncertainty.
Integrate the power balance over distance and you get a virtual elevation: the altitude profile your power and speed imply. Pick a CdA too high and it climbs away; drop it toward the true value and the baseline tilts back to level. The CdA that flattens the trend is your answer.
A valid segment closes. VE is only meaningful on a closed loop or an out-and-back, where you finish at the same elevation you started. On a closed loop the virtual elevation has to return to its origin: the CdA that makes the loop close is the one that is physically right. An open one-way segment never closes, so it yields no defensible CdA.
The per-lap ripple never disappears (the rider rises and falls through the bankings). What earns the number is the baseline going flat, not the ripple.
The validated Martin power model accounts for every term that turns watts into motion, solved lap by lap. It runs on the same ride as an independent route to CdA. Built on different assumptions, when it lands on the VE number you have corroboration.
VE vs Martin greater than 0.010 m² raises an amber flag. This is a model-agreement signal: investigate the protocol (segment, calibration, wind), do not average the two and do not read it as an uncertainty band.
A pitot tube measures apparent airspeed directly, same as the others.
Pitot wind probe, apparent airspeed and yaw, every second.
AeroPortal pitot probe, apparent air ready to use.
No pitot at all. Power balance runs on real station wind and air density.
rider_factor and wind_cal are solved from the rider's own out-and-back validation runs, using the headwind symmetry of the two directions. Every coefficient is on screen and overridable.
Read from the AeroCoach tyre table and corrected for temperature. A measured, looked-up input, not folded into the fit where it could absorb aero error.
Taken from the drivetrain spec-card table for your setup. Explicit and visible, not a hidden assumed constant.
Sourced from station or Open-Meteo data for your ride. Rho scales the entire aero term, so it is measured for the day, never guessed.
The honesty band is not a guess. It is derived from the run-to-run scatter of your repeated efforts on the day: the spread of CdA across identical runs is the noise floor. A setup change smaller than that scatter cannot be told apart from noise, so AeroEdge labels it in noise rather than reporting it as a gain.
That is the whole discipline: report the measured CdA with the band that earned it, and never print a precision the day's data cannot defend.
A rider tests a new front wheel on a quiet out-and-back road, 1.2 km each way. A Notio pitot sensor logs apparent wind and speed at 1 Hz, with rider_factor already calibrated from an earlier session. Wind sits under 2 m/s for both legs: steady enough that neither leg fights a gust the other doesn't.
Two segments qualify: 96 s out, 104 s back, both inside ±1.5% gradient and both closing to within a couple of metres of elevation. Their bearings sit 179° apart, opposite directions on the same stretch of road, so AeroEdge pairs them into one out-and-back run: paired, sensor-fed, calibrated. That combination earns the top tier AeroEdge reports, high confidence.
The CdA that flattens the trace is 0.223 m². The band around it, ±0.006 m², comes from the same sub-segment method as the laps table: split each leg into quarters, solve CdA on each quarter, and the scatter between them is the honesty band.
Martin's power balance over the same two legs lands at 0.226 m², a gap of 0.003 m². The combined band, VE's 0.006 m² and Martin's own tighter 0.004 m² added in quadrature, is 0.007 m². The gap sits inside it. Methods agree.
On a flat 40 km TT at 280 W, that CdA is worth 55:03 (43.6 km/h). That's the exact line AeroEdge prints under your own result.
A CdA is only worth printing if the ride can defend it. When it can't, AeroEdge says so instead of guessing. The same honesty checks run on every ride, calibration, and setup comparison.
A gusty day or a wind reading that hasn't settled breaks the still-air assumption VE depends on. The trace won't flatten, so AeroEdge either marks the whole-ride fallback very-low confidence or lets VE and Martin land far enough apart to raise a divergence flag. Either way, you see the problem instead of a clean number that isn't.
Every window in the ride is checked against the gates a solver needs to trust: gradient inside ±1.5%, speed steady, at least 90 seconds, elevation closing within a few metres. If nothing clears all of them, there is no run to report. You get your power numbers, not a guess dressed up as one.
VE and Martin reach CdA from different physics on the same ride. When the gap between them is bigger than their combined 90% band, AeroEdge marks the result 'check this' instead of picking whichever number you'd rather see.
Compare two runs and the gap has to beat the day's own repeatability, the spread across your repeated efforts, before it counts as real. A smaller gap gets labelled 'in noise' and greyed out, not printed as if the change worked.
The full theory of aero testing, protocol and analysis, lives in the AeroEdge Academy course.