Contents — find the section you need
Change parameters and verify
Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.
Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.
Background and reading guide
Background Gyroscope angular rate and mean/variance.
Hands-on · Follow the worked examples and checks under the stated conditions.
Browser experiment conditions
Change constant offset, white-noise standard deviation and record duration above. The experiment replays the same saved synthetic CSV (100 Hz, 60,000 samples, seed 7), using y = offset + (saved_y - 0.01) × (std / 0.002). Shorter durations select the beginning of that same record; no new random draw occurs. Block sizes for each 10-second duration step are frozen from the baseline analysis environment to avoid NumPy-version rounding differences. Defaults reproduce the saved results below. These are synthetic data, not hardware measurements or device benchmarks.
The upper chart shows raw samples from the first 10 seconds (endpoint excluded). The lower chart shows non-overlapping Allan deviation on log–log axes, using all selected samples. Mean and sample standard deviation also use all selected samples. Sampling stays at 100 Hz; the noise control is per-sample angular-rate standard deviation, not noise density. The data table's adjacent_pairs series gives counts for each averaging time τ. At least ten blocks are used, but long τ values with few pairs provide weak evidence of long-term stability.
Presets isolate offset changes, doubled noise amplitude and a 10-second record. A constant offset changes the mean and cancels from adjacent-mean differences. No temperature changes, drift, random walk or filtering are added. This browser experiment does not import your own CSV files.
Download the same entrypoint, analysis kernel and input CSV. Place all three files together for optional local reproduction. Browser execution requires no installation; local instructions below are optional.
A nonzero stationary IMU output is not all random noise. Separate average offset, short-term scatter and stability across averaging times. This article analyzes one gyro axis with a CSV tool validated on synthetic data of known properties.
Establish stationary conditions and valid time
Fix the IMU and record warm-up, output rate, filtering, temperature, duration and units. Desk vibration, cable forces or changing temperature invalidate a sensor-noise-only interpretation. Stationary accelerometers include gravity, so do not transfer the gyro's near-zero expectation to acceleration.
Mean angular rate may contain more than bias, including Earth rotation when sensitivity and installation make it relevant. The ADI evaluation guide motivates disturbance-free, temperature-controlled recordings; its device-specific acquisition settings are not universal IMU requirements.
CSV and reproduction
Use columns time_s,gyro_rad_s, in seconds and rad/s. Download the analysis script:
python3 imu_noise.py --synthetic
python3 imu_noise.py stationary.csv
The second line is an alternative invocation for your own file. Synthetic mode was executed with Python 3.12.3, NumPy 1.26.4 and Matplotlib 3.6.3. Inputs need at least 100 finite samples, strictly increasing times and interval deviations no greater than 1% of the median interval. That 1% is this exercise's validation rule, not an IMU specification.
Do not close gaps and pretend sampling was uniform. Split continuous intervals first. Resampling also changes noise through interpolation/filtering and should be documented.
Mean and standard deviation
Synthetic inputs contain 60,000 points over 600 s at 100 Hz, seed 7: a constant 0.01 rad/s offset plus independent Gaussian noise with 0.002 rad/s standard deviation. Results are mean 0.009991 rad/s and sample standard deviation 0.001994 rad/s. Download the input and statistics.
The mean characterizes this interval, not every temperature or power cycle. Standard deviation alone does not adequately separate slow changes from fast noise. Vary the averaging time next.
Allan deviation across averaging times
Split angular rates into K non-overlapping blocks of m samples, with block means ȳ. The implemented statistic is:
Units remain rad/s. For each m, trailing samples that cannot form a complete block are discarded. Differencing adjacent means cancels a constant offset, so Allan deviation alone cannot reveal its magnitude. NIST SP 1065 explains the definition and overlapping variant. Although that reference concerns frequency stability, this code applies the adjacent-mean statistic to gyro angular rates.
Read the synthetic result
For independent white noise, averaging m samples reduces scatter approximately as 1/√m. The plotted theoretical curve is 0.002/√(100τ). Long averaging times have fewer blocks and more uncertain estimates. The Allan CSV includes adjacent_pairs. At least ten blocks are required, but roughly nine adjacent pairs at the end still provide weak evidence.
No bias instability or random walk was added. A falling curve says nothing about long-term stability of a real IMU. Identifying its minimum as bias instability also requires checking the noise model, slope and convention-dependent coefficient.
Record enough conditions to compare
Save model/firmware, ODR, bandwidth, units, temperature range, total duration, missing-data rate, axis, mean, standard deviation and pair counts for each τ. ODR is the sensor's internal output data rate, not host polling frequency. Filtering changes curves even on identical hardware. Continue with sampling and aliasing to understand why faster polling alone creates no new information.
Comments
Please log in to post a comment
No comments yet.