How do I implement a footstep recognition algorithm? One that recognizes the start and end points of each footstep? I have some time series data captured from a person's footsteps/strides (specifically, a person on rollerblades). It came from an IMU sensor placed on a person's boot. Each data point captures acceleration, angular velocity, etc.
Here's a graph of &quot;acceleration in the x direction vs. time&quot; for one foot:

Problem/Goal: I want to write an algorithm to detect all the footsteps in the data, specifically, the start and end times of each footstep. (Start = foot leaves the ground; End = foot touches the ground).
Here's an example below. Each shaded region represents the duration of a footstep (from start to end). Annotated data like this is available for me to use, perhaps in a supervised learning model.


Here are some of the approaches I am considering after searching around. (Feel free to SKIP this section.)

Dynamic sliding window + classifier

This involves somehow sliding a dynamic window over the time series. At each window, run a classification model to determine whether the windowed data is a footstep or not. A dynamic window is necessary because each step varies in length.
From this blog, I know how to create a signal classification model. I can use Fast Fourier Transform or Wavelet Transform to extract features to use in a supervised learning model.

Gradient Boosting Machine

I read this paper that created a model to recognize the start/end points of footsteps...
for turkeys lol. It uses a Gradient Boosting Machine and trained on data where all data points belonging to a &quot;footstep&quot; were annotated (e.g. all shaded areas in the graph above).

Question: Does anyone have any suggestions for how to approach this problem? Or perhaps any comments on whether the approaches above make sense or don't make sense.
Note: My knowledge in Deep Learning is pretty basic, so I am not considering Deep Learning approaches for the sake of time. Perhaps something for the future.
This signal looks pretty clean.  I would stick to time domain feature extraction.  Maybe 1st and 2nd derivative of time domain data.  If you're just counting, you can almost just use the magnitude and see that these steps have the most negative values or acceleration.  You could use the negative peaks to center a search for the edges of the &quot;step&quot;, and to discriminate against the other negative peaks that are in between the steps.