How it works and how accurate it is

Here is how Vibration Checker turns your phone's motion sensor into a reading, where its labels come from, and how far you can trust the numbers.

Everything below runs in your browser, on your phone. Every sensor tool on the site uses the same code, called the engine.

From sensor to reading

1. Reading the motion sensor

About 60 times a second, the browser hands the page a devicemotion event. Each one holds acceleration in three directions (x, y and z) in m/s², plus a timestamp. Most phones supply acceleration with gravity already removed. When a browser only gives raw values with gravity included, the engine removes gravity itself with a high-pass filter set at 0.3 Hz. Gravity is steady, so the filter drops it and keeps the shaking.

2. Measuring the real sample rate

The real rate varies by phone, browser and battery mode, and the gaps between samples jitter. So the engine measures the rate from the timestamps every time. Then it resamples the data onto an evenly spaced grid, which the frequency math needs.

3. Finding the frequency

The engine takes a block of samples (256 for the live display, 512 for the final result) and applies a Hann window, which fades the edges so the block doesn’t create false frequencies. A fast Fourier transform (FFT) then splits each axis into its frequencies. The three axes are added together, so the result doesn’t depend on how the phone is turned.

The strongest peak above 1 Hz is the main frequency (above 0.5 Hz on the ceiling fan pages, because a fan on low turns only about once a second). At 60 samples a second, a 512-sample block has frequency steps about 0.12 Hz apart. The engine fits a small curve (a parabola) through the top step and its two neighbors to find the peak between steps. RPM is that Hz × 60, rounded to a whole number, so the Hz and RPM on a result always come from the same peak.

The axis with the most energy tells you if the shake is mostly up-down, side-to-side or front-back.

4. Turning acceleration into velocity

Most guidance for machines and buildings uses velocity in mm/s. For each frequency, velocity = acceleration ÷ (2π × frequency). The engine adds these up from 2 Hz to your phone’s highest measurable frequency and reports the RMS, the steady average level. Below 2 Hz, dividing by a small number would blow up sensor noise and tiny tilts, so that part is left out. The ceiling fan pages start at 0.7 Hz instead, because a fan’s wobble is that slow and much stronger than the noise.

Home, floor and building pages use estimated peak velocity: RMS × √2 (about 1.41). That’s exact for a smooth, steady shake.

5. Subtracting the phone’s own noise

Every phone sensor jitters a little, even on a still table. The 2-second “Hold still…” step measures that noise so it can be subtracted. If what’s left is below 1.5 times the noise, you see “No vibration detected.”

The car, motorcycle and ceiling fan tests skip this step, because the engine or fan is already running when the measurement starts (on the fan pages you switch the fan on during the countdown). They use a fixed threshold instead: below about 0.02 m/s² (and, on the fan pages, below about 1.2 mm/s) you see “No vibration detected.”

6. Averaging for the final result

Live numbers update four times a second. When you stop, the engine analyzes the whole run. It slides a 512-sample block along the data, each block overlapping the last by half, and averages them (Welch’s method). That makes the final numbers steadier than the live ones.

The 30 Hz limit and aliasing

A phone that samples 60 times a second can measure up to half that: about 30 Hz, or 1,800 RPM. Your phone’s exact limit is in the result details.

Faster vibration doesn’t vanish. It folds back and shows up as a false, lower frequency, which is called aliasing. A 45 Hz shake sampled 60 times a second looks exactly like 15 Hz. A fridge compressor at 3,000 RPM (50 Hz) can look like 10 Hz. When the reading is strong but has no clear peak, or the peak jumps around, the tool warns: “The main vibration may be faster than your phone can measure.”

Where the labels come from

  • People and buildings pages use estimated peak velocity. The bands come from the Caltrans Transportation and Construction Vibration Guidance Manual (2020), human response to continuous vibration: 0.01, 0.04 and 0.10 in/s, rounded to 0.25, 1.0 and 2.5 mm/s.
  • Machine and appliance pages use RMS velocity and the ISO 10816-1 zones for class I small machines: 0.71, 1.8 and 4.5 mm/s. ISO 10816-1 was replaced by ISO 20816-1, but the classic zones are still widely used as a rough guide. The standard assumes a calibrated sensor on the bearing housing.
  • Ceiling fan pages use RMS velocity on a wobble scale of their own: 2.5, 8 and 16 mm/s. A fan on low sways only about once a second, and for a smooth sway the RMS velocity is π × frequency × sway (from one side to the other) ÷ √2, so at 1.2 Hz about 1 mm of sway already reads close to 2.7 mm/s. The machine zones would call that rough. The fan levels match roughly 1, 3 and 6 mm of sway at the phone, back and forth along one line. Most fans wobble in a circle, which moves in both directions at once, so for them the same levels match a circle about 0.7, 2 and 4 mm across. This is a rule of thumb, not a published standard.

The vibration severity chart and construction vibration limits pages show the full tables.

Honest accuracy limits

  • Phones aren’t calibrated. Two phones on the same machine can disagree. Compare readings from the same phone in the same spot.
  • Mounting matters. A thick case, rug or towel soaks up vibration. A phone that slides or rattles adds its own.
  • Sharp jolts read low. The peak estimate fits steady shaking. A door slam or blast can have a higher true peak.
  • Limited range. Frequency from about 1 to 30 Hz, velocity from 2 Hz up (0.5 Hz and 0.7 Hz on the ceiling fan pages). Each phone model also filters its sensor data in its own way.

A phone reading is a good guide, not a certified measurement. For legal or structural questions, hire a professional with calibrated equipment. The guide how accurate is a phone vibration meter? goes deeper.

Engine test results

The engine is tested with made-up signals whose right answer is known in advance: pure waves, mixed waves, jittery timestamps, pure noise and a wave too fast for the phone. The table below is produced by running the engine’s own tests on every build of this site, so it matches the code the tools run.

16 of 16 tests passed on the latest build (October 1, 2026).

Engine self-test results
Test Expected Result Pass
5 Hz sine, 0.1 m/s² (live, 256-pt FFT) 5.0 ± 0.1 Hz, 300 ± 6 RPM 5.00 Hz, 300 RPM Pass
5 Hz sine, 0.1 m/s² (final, 512-pt Welch) 5.0 ± 0.1 Hz, 300 ± 6 RPM 5.00 Hz, 300 RPM Pass
12.5 Hz sine (live, 256-pt FFT) 12.5 ± 0.15 Hz 12.50 Hz Pass
12.5 Hz sine (final, 512-pt Welch) 12.5 ± 0.15 Hz 12.50 Hz Pass
4 Hz strong + 9 Hz weak sine (live, 256-pt FFT) 4.0 ± 0.1 Hz 4.00 Hz Pass
4 Hz strong + 9 Hz weak sine (final, 512-pt Welch) 4.0 ± 0.1 Hz 4.00 Hz Pass
Velocity, 10 Hz sine at 0.0628 m/s² RMS (live, 256-pt FFT) 1.00 ± 0.05 mm/s RMS 0.998 mm/s RMS Pass
Velocity, 10 Hz sine at 0.0628 m/s² RMS (final, 512-pt Welch) 1.00 ± 0.05 mm/s RMS 0.994 mm/s RMS Pass
5 Hz sine, 0.1 m/s² (final, 512-pt Welch, ±4 ms jitter) 5.0 ± 0.1 Hz, 300 ± 6 RPM 5.00 Hz, 300 RPM Pass
12.5 Hz sine (final, 512-pt Welch, ±4 ms jitter) 12.5 ± 0.15 Hz 12.50 Hz Pass
4 Hz strong + 9 Hz weak sine (final, 512-pt Welch, ±4 ms jitter) 4.0 ± 0.1 Hz 4.00 Hz Pass
Velocity, 10 Hz sine at 0.0628 m/s² RMS (final, 512-pt Welch, ±4 ms jitter) 1.00 ± 0.05 mm/s RMS 0.980 mm/s RMS Pass
Pure sensor noise, after calibration (live, 256-pt FFT) No vibration detected No vibration detected Pass
Pure sensor noise, after calibration (final, 512-pt Welch) No vibration detected No vibration detected Pass
45 Hz sine at ~60 Hz sampling, ±4 ms jitter (live, 256-pt FFT) Low-confidence flag set flag set (peak shows at 15.01 Hz) Pass
45 Hz sine at ~60 Hz sampling, ±4 ms jitter (final, 512-pt Welch) Low-confidence flag set flag set (peak shows at 15.00 Hz) Pass

Last updated .