Identifying steps in walking accelerometer I have some recorded walking data from an android phone and want to determine when someones foot hits the ground using the acceleration data. I'm making an assumption here that the person will "bob" vertically as they walk (i.e. when their foot pushes off their body will rise, and as a foot is approaching the ground their body will fall)

Given that, I have taken the $X$-axis acceleration data (which corresponds to the persons vertical axis), removed gravity, and filtered out the noise giving me something like this:



My question is: where in this signal does a foot hit the ground?

I have 3 options:


Would it be all of the valleys in the signal?




This would be correct if I were measuring position information but acceleration is a bit different. I think the marked points are actually the moments of maximum deceleration (or, acceleration towards the ground), so at these times the body is still in motion and not stationary


Would it be the points where acceleration is 0?




0 acceleration would mean the person/device is moving at a constant speed, which I believe would be the case upon foot landing because I'm assuming the speed is 0 and therefore not accelerating. But this would also be true on the "rising" part of the walk cycle - as a person pushes off the ground they will accelerate in +X, but once they reach the peak of the rise they would no longer be accelerating and you would probably see a 0 again


Would it be the 0 acceleration points, but only after a valley?




A valley would, I think, represent point of max acceleration towards the ground (i.e. theyre on the way down), so a 0 acceleration value after a valley would presumably be once theyve stopped accelerating downwards and the foot has landed?

I'm thinking the answer is #3 but wanted to see if my logic is correct, or whether my interpretation of acceleration graphs is completely wrong

EDIT: this data is recorded using a chest harness carrying the phone, so the phone is not on any of the limbs. The main assumption being made is that the torso will move up and down with each step. Also, in the phones coordinate system positive X is pointing towards the persons head

EDIT2: Using a low pass butterworth filter, instead of a bandpass, to eliminate any high frequency noise. The blue vertical lines are where I visually observe the foot hitting the ground so I can use it as a guide (even though it will be off by a few milliseconds):



And here is the filtered signal (red) over the raw signal (black):
It would be simple to make an acquisition of a single step and identify the phases of the step. For that, you shall consider the geometry of your setup, and therefore answer these:


The accelerometer has (or not) a relative speed to the ground equal to ZERO? 
The accelerometer measurement axis is aligned to gravity?


My guess is that, when one foot is on the ground, the accelerometer shall measure only gravity for a short period. Therefore, I would look for segments where the jerk is close to ZERO in the vertical axis, AND the magnitude of it is close to -1g. 

EDIT:
All this new information you have given us, like sensor close to chest, gravity, alignment, etc, demands new dynamic models to represent the measurements you have there. But any model, with respective solution, can have counter-examples to demonstrate that the model is inadequate at all. For example, if the user carries a heavy rucksack, there is a new model to measure the acceleration close to the neck. This is different from the acceleration tied to the feet. That said, the body shall damp the actual acceleration at the feet to a filtered and delayed measurement at the neck. Nevertheless, the readings shall have the same low frequency components as at the feet. This is more less the same I see at your graph, the one with blue lines. The blue lines are as periodic as the low freq. components of the red line, but for a phase. You should consider to review your necessity of precise instant of touch on the floor in accordance with your application.