# Finding Heelstrike and Toe-off with only Ground Reaction Force Data

14 views (last 30 days)
Tom Ruopp on 21 Apr 2016
Hi all,
Is there anyone out there who has developed a really robust algorithm for detecting heelstrike and toe-off using only Ground Reaction Force (GRF) data?
I have made my own program that uses a threshold of 300 newtons (locates where force drops below and then where it goes above). From there I normalize that data on the y-axis and can use a threshold of 0.05 above the minimum. The issue comes from the use of a split-belt treadmill i.e. two force sensitive treadmill strips side-by-side with one for each leg. This allows for independent speed control.
Anyways, with perfect data the process is pretty simple. The problem is when the data does not drop back below 300N. This sort of thing happens if the person steps over the center line and onto the other belt.
In the attached file, the black vertical lines are the located Heelstrikes and red are Toe-offs. You can see that problems arise when the data is not uniform. Using a threshold is inconsistent between patients and using something like a derivative is really hard when it comes to the noise level at the top and bottom of the force curves.
Any ideas or directions to existing toolboxes would be very much appreciated.
Frederik Mellemkjær on 16 May 2022
Hi Tom,
Is it possible for you to share your program for detecting heelstrike and toeoff? I'm stuck with some data processing and looking at your plot, I think your program could be a great help.
Thanks a lot.
Bh
Frederik

NGR MNFD on 1 Oct 2021
and How can I check the checksum of the force signal binary file? This force signal is measured by a 12-bit adc. I was able to display it through the following method.
fileID1=fopen('control1.let','r');
A= fread(fileID1, [3, 45000], 'uint8')'; % matrix with 3 rows, each 8 bits long, = 2*12bit
fclose(fileID1);
M2H= bitshift(A(:,2), -4);
M1H= bitand(A(:,2), 15);
PRL=bitshift(bitand(A(:,2),8),9); % sign-bit
PRR=bitshift(bitand(A(:,2),128),5); % sign-bit
M( : , 1)= bitshift(M1H,8)+ A(:,1)-PRL;
M( : , 2)= bitshift(M2H,8)+ A(:,3)-PRR;
N1 = reshape(M',[90000,1]); plot(N1);
Can I also check to see if it is correct or not? I do not know what code to use in MATLAB to calculate checksum? Please show me. Thank you.