RehabTools
BALANCE · PYTHON WORKSPACE

SeeSway

Runs locally in your browser · Preview 0.2.0

Standing balance analysis · Interface updated 20 Sep 2026

Import balance data, apply a filter and calculate sway measures.

New research preview

Includes displacement measures, Symlet-8 wavelet filtering and DFA. Four wavelet frequency bands are shown. Sample entropy is not included. This implementation has not been validated against the original SeeSway.

1. Choose your data

File format & quick start →

Map the ML and AP displacement columns below (counting from 1). Check units and sampling rate against your acquisition record. Unselected columns are ignored.

Sample rate determines elapsed time and filter frequencies. Use the recorded acquisition rate; this tool does not repair irregular sampling. Plots use cm; numerical results use mm.

Preview first 5 rows
No data selected.

2. Select processing

Compare filtering against the same unfiltered recording below. A shorter path after filtering reflects removed fluctuations, not improved balance.

Python runs in your browser. The analysis code sends no trace data to a server. Runtime libraries download on first use; no account is required.

3. Results

Start with an example

The example runs automatically. For your own file, check the column mapping, sample rate and units before selecting Run analysis.

Methods and interpretation

Resultant path is the sum of Euclidean distances between consecutive ML/AP samples. Mean speed divides that path by elapsed time, defined here as (N − 1) / sample rate. RMS about the mean and about zero are reported separately; sample standard deviation uses N − 1.

Butterworth filtering uses SciPy second-order sections with forward/backward passes and odd-extension padding. This is an explicit new implementation—not a claim to reproduce the original LabVIEW padding or frequency response. The moving average is centred and uses reflected endpoints.

Wavelet filtering

The 2014 ACL reconstruction paper used an undecimated level-3 Symlet-8 approximation at 100 Hz, with a nominal 6.25 Hz upper band. Here, PyWavelets reconstructs the approximation with detail coefficients set to zero. Reflected padding is removed after reconstruction. Boundary handling was not specified in the paper, so numerical equivalence is unverified. At other sample rates, the nominal band changes to sample rate / 16.

Clark et al. (2014): balance after ACL reconstruction ↗

Detrended fluctuation analysis

DFA is a separate method here; the supplied ACL paper discusses it but does not specify a DFA protocol. We integrate the mean-centred, unfiltered displacement, remove a linear trend within each window and fit the log–log relationship between window size and RMS fluctuation. Up to 20 window sizes span the selected range. Both axes are analysed separately.

Alpha describes scaling over that range. Filtering, recording duration and the selected scales can change it. A straight fitted line or high R² does not establish fractality, clinical impairment or a physiological mechanism. Constant traces have no defined exponent.

DFA method reference (PhysioNet) ↗

Original SeeSway paper

Clark RA, Pua YH. SeeSway – A free web-based system for analysing and exploring standing balance data. Computer Methods and Programs in Biomedicine. 2018;159:31–36. doi:10.1016/j.cmpb.2018.02.019.

Read the publication