Temporal Parameter Estimation#

This example illustrates how temporal gait parameters can be calculated using the EarGait. The gait event detection method DiaoAdaptedEventDetection is used for estimating gait events.

Getting some example data#

For this we take some example data that contains regular walking movements.

import pandas as pd

from eargait import EarGait
from eargait.event_detection import DiaoAdaptedEventDetection
from eargait.preprocessing import aling_gravity_and_convert_ear_to_ebf, convert_ear_to_ebf, load
from eargait.utils.example_data import get_mat_example_data_path

# data directory
data_path = get_mat_example_data_path()

Loading the data#

A data session refers to a recording by signia hearing aids. A session can consist of a single *.mat file or two *.mat file, for left and right ear, respectively. The session is loaded using the local path data_path` of the directory, in which the matlab file(s) are stored. For more options regardind loading the data see Load Data by Signia Hearing Aids. example_gait_event_detection

target_sample_rate = 50
session = load(data_path, target_sample_rate_hz=target_sample_rate, skip_calibration=True)
session.info
/home/docs/checkouts/readthedocs.org/user_builds/eargait/checkouts/stable/eargait/preprocessing/load_data_helpers.py:47: UserWarning: Calibration was skipped. Calibration is strongly recommended.
  warnings.warn("Calibration was skipped. Calibration is strongly recommended.")

<signialib.header._ProxyHeader object at 0x7f09a1952040>

Gravity alignment and data transformation into body frame#

Align session to gravity and transform coordinate system into body frame

ear_data = aling_gravity_and_convert_ear_to_ebf(session)

# Alternatively, you can skip the gravity alignment by using the following function:  convert_ear_to_ebf
# ear_data = convert_ear_to_ebf(session)
D11, default

Extract walking interval#

Note: Here prior knowledge about walking sequence within the given data session are applied. load csv file containing walking bouts

rescale_factor = 200 / target_sample_rate
walking_bout_list = pd.read_csv(data_path.parent.joinpath("walking_bout_indices.csv"))
interval = (int(walking_bout_list["start"][0] / rescale_factor), int(walking_bout_list["stop"][0] / rescale_factor))

# alternative if walking bout indices are already known, e.g.
# interval = (14317, 17637)    --> indices need to be replaced based on data

ear_data_short = {}
for side in ear_data.keys():
    ear_data_short[side] = ear_data[side][interval[0] : interval[1]]

Initializing event detection algorithm#

Recommended parameters: apply filter = True <br /> sampling_rate_hz needs to correspond to target_sample_rate_hz <br /> window_length should be equal to sampling_rate_hz

event_detection_algorithm = DiaoAdaptedEventDetection(
    sample_rate_hz=target_sample_rate, window_length=target_sample_rate
)

Initializing Gait Analysis Pipeline#

Recommended parameters: sampling_rate_hz needs to correspond to target_sample_rate_hz <br />

ear_gait = EarGait(target_sample_rate, event_detection_algorithm, None, True)

Detect gait events of gait sequence#

Get temporal gait parameters of gait sequence#

{'right_sensor':       stride_time  stance_time  swing_time           side
s_id
0            1.14         0.72        0.42  contralateral
1            1.16         0.72        0.44    ipsilateral
2            1.14         0.70        0.44  contralateral
3            1.10         0.68        0.42    ipsilateral
4            1.10         0.66        0.44  contralateral
5            1.10         0.68        0.42    ipsilateral
6            1.08         0.66        0.42  contralateral
7            1.10         0.66        0.44    ipsilateral
8            1.10         0.66        0.44  contralateral
9            1.10         0.68        0.42    ipsilateral
10            NaN          NaN         NaN  contralateral
11           2.50          NaN         NaN    ipsilateral
12            NaN          NaN         NaN  contralateral
13            NaN          NaN        0.44  contralateral
14           1.14         0.72        0.42    ipsilateral
15           1.10         0.68        0.42  contralateral
16           1.08         0.66        0.42    ipsilateral
17           1.08         0.66        0.42  contralateral
18           1.10         0.68        0.42    ipsilateral
19           1.10         0.64        0.46  contralateral
20           1.08         0.66        0.42    ipsilateral
21           1.08         0.64        0.44  contralateral
22           1.10         0.68        0.42    ipsilateral
23           1.16         0.70        0.46  contralateral
24            NaN          NaN         NaN    ipsilateral
25            NaN          NaN         NaN  contralateral, 'left_sensor':       stride_time  stance_time  swing_time           side
s_id
0            1.16         0.72        0.44    ipsilateral
1            1.14         0.72        0.42  contralateral
2            1.12         0.70        0.42    ipsilateral
3            1.12         0.70        0.42  contralateral
4            1.10         0.68        0.42    ipsilateral
5            1.10         0.66        0.44  contralateral
6            1.10         0.66        0.44    ipsilateral
7            1.08         0.66        0.42  contralateral
8            1.10         0.66        0.44    ipsilateral
9            1.12         0.70        0.42  contralateral
10            NaN          NaN         NaN    ipsilateral
11           2.50          NaN         NaN  contralateral
12            NaN          NaN         NaN    ipsilateral
13            NaN          NaN        0.44    ipsilateral
14           1.14         0.72        0.42  contralateral
15           1.10         0.68        0.42    ipsilateral
16           1.08         0.66        0.42  contralateral
17           1.08         0.66        0.42    ipsilateral
18           1.08         0.66        0.42  contralateral
19           1.08         0.64        0.44    ipsilateral
20           1.10         0.66        0.44  contralateral
21           1.10         0.66        0.44    ipsilateral
22           1.10         0.68        0.42  contralateral
23           1.14         0.70        0.44    ipsilateral
24            NaN          NaN         NaN  contralateral
25            NaN          NaN         NaN    ipsilateral}

Get average temporal gait parameters#

{'right_sensor':       stride_time  stance_time  swing_time
mean     1.173333     0.677000    0.430476
std      0.305046     0.024516    0.013593, 'left_sensor':       stride_time  stance_time  swing_time
mean     1.173333     0.679000    0.428571
std      0.304850     0.024688    0.010142}

Total running time of the script: ( 0 minutes 13.430 seconds)

Estimated memory usage: 46 MB

Gallery generated by Sphinx-Gallery