Note
Click here to download the full example code
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#
ear_gait.detect(ear_data_short)
gait_events = ear_gait.event_list
Get temporal gait parameters of gait sequence#
temporal_params = ear_gait.temporal_params
temporal_params
{'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