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):
numericDeriv(filtered)
anddiff(filtered)/diff(time)
but they produce drastically different plots $\endgroup$