How It Works
A short technical document for users who want to understand the math behind the numbers before they trust them.
What this tool does #
MiataDyno estimates wheel horsepower from a CSV log captured by an OBD scanner during an acceleration run. It applies a road-load physics model to the speed and time data in your log and returns a power curve, peak WHP, and an estimated crank HP after typical drivetrain losses.
It is not a chassis dyno. The numbers are estimates derived from physics, not measurements taken with a dynamometer. The output is most reliable when used as a comparison signal. The difference in WHP between two pulls of the same car on the same road tells you whether your mod did anything. The absolute number is useful as a sanity check against published reference values for your generation, but a chassis dyno reading and a MiataDyno reading on the same car will not match exactly, and shouldn't be expected to.
How the math works #
MiataDyno estimates wheel horsepower from a road-load model. It's the same physics any dyno simulation uses. The tool computes the force your engine produces at the wheels by accounting for vehicle mass and acceleration, the rolling resistance of your tires on the road, and the aerodynamic drag of your car at speed. The model is calibrated to the specific NC Miata platform: chassis aerodynamics, drivetrain characteristics, and rotational inertia values are tuned to the NC1 / NC2 / NC3 generations rather than a generic vehicle.
Generic road-load models assume average values for drag coefficient, frontal area, and tire dynamics. That's fine for ballpark estimates but introduces 5-15% error for any specific car. MiataDyno uses values validated against measured NC behavior, which is why the tool only supports NC Miatas. Extending to other platforms means redoing the calibration work, not just changing a config file.
Atmospheric correction #
Engine power varies with air density: cooler, denser air at lower altitude makes more power than hot, thin air at altitude. To compare runs across different conditions, the calculated WHP is normalized to a standard reference using one of two published correction standards.
The default is SAE J1349, which normalizes to 25°C and 99 kPa (the US dyno-shop default). DIN 70020 is also available, which normalizes to 20°C and 1013 mbar (the European default) and reads roughly 3% higher. Pick the standard that matches whichever dyno-shop reading you'd want to compare against.
About the temperature term: the correction uses a default ambient temperature, not the intake-air temp from your CSV. This is deliberate. Real chassis dynos blow fans at the intake to keep IAT close to ambient throughout the pull, so dyno-corrected numbers are essentially "what the engine would make at standard ambient conditions." On a street pull, intake air heat-soaks 20 to 30°C above ambient under the hood. Feeding that heat-soaked IAT into the correction formula would scale the answer up by exactly the heat-soak gain, over-stating the power. Using a default ambient produces a number that's directly comparable to a chassis-dyno reading instead of an artifact of how hot your engine bay was.
This is a known limitation, not a missing feature. A future version will pull real ambient temperature from a weather API based on the timestamp and location of your run, replacing the default. The current behavior is conservative and consistent. The same conditions today will produce the same number tomorrow, which is what matters for comparison.
What your tire size does to the numbers #
Your OBD scanner reports vehicle speed assuming stock tire diameter. If you're running a different tire size than stock, every speed reading is off by the same percentage your tire diameter is off, and because horsepower is proportional to force times velocity, your WHP number is off by the same percentage. MiataDyno corrects for this if you tell it your actual tire size. If you don't, the numbers will be wrong in a predictable direction.
The tool also runs a sanity check comparing your pull's speed-to-RPM ratio against what your configured gear and tire size predict. If they disagree by more than 5%, you'll get a warning before analysis runs. Usually it means the tire size in the configuration doesn't match the tires actually on the car, but it can also surface speedo offsets from a tune.
Validation #
The tool is validated by comparing MiataDyno output against a chassis-dyno reading on the same car. The methodology: same vehicle, same configuration, dyno sheet from a recent session compared against MiataDyno output from a CSV captured during a separate WOT pull on a flat road in similar atmospheric conditions.
| Car | Conditions | Dyno reading | MiataDyno | Δ | Contributor |
|---|---|---|---|---|---|
| NC2 PRHT, stock | Sea level, 13°C ambient | 118-128 WHP (Dynojet range) | ~126 WHP | within range | Danny |
Known limitations #
The tool produces an estimate from a physics model. The model has assumptions, and the assumptions break down in specific situations. These are the known failure modes:
- Forced-induction cars without a barometric pressure PID. When the log doesn't include a baro channel, MiataDyno falls back to estimating atmospheric pressure from manifold pressure at WOT, which works on a naturally-aspirated engine but fails on a boosted one (manifold pressure under boost is far above atmospheric). For these cars, the tool falls back to a default 99.9 kPa and surfaces a warning. Accuracy improves significantly if your scanner can log a barometric pressure PID.
- Pulls with mid-run gear changes. The model assumes a single gear throughout the pull. If you shifted, the speed/RPM relationship breaks at the shift, and the calculated power curve will have a discontinuity. Quality scoring catches the worst of these and flags them, but a clean single-gear pull is always preferred.
- Heat-soaked back-to-back pulls. When you do multiple WOT runs in quick succession, intake air temperature climbs each pull. The tool detects this (any pull's IAT 5°C above the first) and surfaces a heat-soak banner. The corrected math is still consistent, but the underlying engine output is genuinely lower on the hot pulls. Picking your coolest pull as the reference produces the cleanest answer.
- 6AT in Drive mode. The automatic in Drive will choose its own gear and may upshift mid-pull. The tool supports 6AT physics (different drivetrain loss, different final drive), but the cleanest 6AT reading comes from manual mode or a sport-mode gear hold.
- Hilly or windy roads. A 1% grade can add or remove ~5 WHP. A 10 mph headwind shifts the answer noticeably. The road-load model has no way to detect or correct for either. For trustworthy numbers, run on flat ground in calm conditions, ideally doing the same pull in both directions and averaging, which cancels grade and wind effects.
- Single-pull analyses have no σ. The confidence interval (the ± lines on the headline stats) requires at least two clean pulls to compute run-to-run variance. A single-pull analysis still produces a number, but you don't know how reproducible it is. Two or three pulls in the same session is the minimum to get a meaningful confidence band.