interp1 and Index exceeds the number of array elements (0)

Hello,
Would you please assist me with the following program
for i=1:length(T_HCRM)-2
for j=1:phaz
comX1(i,:)=interp1([1:length(comXS(T_HCRM(i):T_TORM(i)))],comXS(T_HCRM(i):T_TORM(i)),[1:(length(comXS(T_HCRM(i):T_TORM(i)))-1)/(phaz-1):length(comXS(T_HCRM(i):T_TORM(i)))],'cubic');
end
end
I always receive this error message: Index exceeds the number of array elements (0). Error in interp1 (line 153) extrapMask = Xq < X(1) | Xq > X(end);
The mentioned lines are part of a program and has to normalize comXS which is a matrix of one column and 1911 rows to equal sections of 100 frames. Somebody else who is not available provided the program on a database for students but everybody has to change it according to his project.
As I understood from help of MATLAB, the 3 parts of the interp1 function (I mean parts separated by commas) have to have the same lengths. While the first two parts of the interp1 function (parts before the 1st ( length(comXS(T_HCRM(i):T_TORM(i))) ) and the 2nd comma (comXS(T_HCRM(i):T_TORM(i)) )) have equal length AND different part of the 3rd part have equal length, I do not understand why the total length of the 3rd part is 532! I mean length of length (comXS(T_HCRM(i):T_TORM(i))) is 537 and length of comXS(T_HCRM(i):T_TORM(i)) is 537. These parts agait are used in the 3rd part (part located between 2nd comma and 3rd comma). But surprizingly, total length of the 3rd part " length(comXS(T_HCRM(i):T_TORM(i)))-1)/(phaz-1):length(comXS(T_HCRM(i):T_TORM(i))) ".
As you are professionals, maybe the way that I asked you my question is not the best way, but believe me, after spending several hours to find a solution, I am really confused and frustrated with this issue. I hope your knowledge and experience assist me. I am a beginner.
Thank you so much,

 Accepted Answer

Sometimes it is easier to use temporary variables to make things clearer.
for i=1:length(T_HCRM)-2
idx = T_HCRM(i):T_TORM(i);
L = length(idx);
assert(L>0, sprintf('T_TORM(%d) = %f is before T_HCRM(%d) = %f', i, T_TORM(i), i, T_HCRM(i)));
dx = (L-1)/(phaz-1);
for j = 1:phaz
comX1(i,:) = interp1(1:L, comXS(idx), 1:dx:L, 'cubic');
end
end
Now as you look at this, you should ask yourself why you are looping over j but never using j inside the loop.
You should also ask yourself whether it guaranteed that T_HCRM(i):T_TORM(i) will always be the same length -- because if it is not, then some of the rows of comX1 would want to be different lengths than others.
In order to do the assignment of multiple rows, you need to guarantee that each row will be the same length -- and if you can make that guarantee then you should move the calculation of that length outside the loop.
I would suggest that if you are trying to force there to be phaz-1 or phaz entries in length(comXS(T_HCRM(i):T_TORM(i)))-1)/(phaz-1):length(comXS(T_HCRM(i):T_TORM(i))) that you use linspace, such as
L = length(T_HCRM(1):T_TORM(1));
assert(L>0, sprintf('T_TORM(1) = %f is before T_HCRM(1) = %f', T_TORM(1), T_HCRM(1)));
for i=1:length(T_HCRM)-2
idx = T_HCRM(i):T_TORM(i);
comX1(i,:) = interp1(comXS(idx), linspace(1, L, phaz), 'cubic');
end

4 Comments

Dear Walter Roberson,
Thank you so much for your answer. I really appreciate your kind attention. I am afraid to tell you that unfortunately, I got the same error.
Here is the original program with some notes regarding different parts of it. Hopefully, you will be able to solve the issue. I also attached an EXCEL file including the values of required variables that are used in this program.
Have a great time.
phaz=100;
sample=CoM;
sample(:,1)=sample(:,1)+(((sample(1,1)-sample(end,1))/(length(sample)-1))*(1:length(sample)))';
CoM=sample;
comXS=CoM(:,1);
comYS=CoM(:,2);
comZS=CoM(:,3);
LatMal_R_y=movmean(LatMal_R_y,4);
RMal_Min=islocalmin(LatMal_R_y)& LatMal_R_y<.1; % To detect when marker contacts the ground: minimum position of the marker is the time it contacts the ground
R_5Met_y=movmean(R_5Met_y,4);
R5Min=islocalmin(R_5Met_y)& R_5Met_y<.03;% To detect when marker contacts the ground: minimum position of the marker is the time it takes off the ground
jjjT=0;
for i=1:size(R_5Met_y)-1
if (i+2)== size(R_5Met_y)
break
end
if int8(R5Min(i))==1 %islocalmin returns a logical value, int8 is used to convert logical value to an integer value
jjjT=jjjT+1;
T_TORM(jjjT)=i; % To detect when marker takes off the ground
end
end
jjjT=0;
for i=1:size(LatMal_R_y)-1
if (i+2)== size(LatMal_R_y)
break
end
if int8(RMal_Min(i))==1 %islocalmin returns a logical value, int8 is used to convert logical value to an integer value
jjjT=jjjT+1;
T_HCRM(jjjT)=i;
end
end
if ( T_TORM(1) < T_HCRM(1) )
T_TORM = T_TORM(2:end);
end
T_TORM=floor( T_TORM(1:min(length(T_HCRM),length(T_TORM))) );
T_HCRM=floor( T_HCRM(1:min(length(T_HCRM),length(T_TORM))) );
if length (T_HCRM) ~= length (T_TORM) % To provide similar length for both T_HCRM and T_TORM
minLengthR = min(length(T_HCRM), length(T_TORM));
T_HCRM = T_HCRM(1:minLengthR);
T_TORM = T_TORM(1:minLengthR);
end
%Suggested by Walter Roberson
L = length(T_HCRM(1):T_TORM(1));
assert(L>0, sprintf('T_TORM(1) = %f is before T_HCRM(1) = %f', T_TORM(1), T_HCRM(1)));
for i=1:length(T_HCRM)-2
idx = T_HCRM(i):T_TORM(i);
comX1(i,:) = interp1(comXS(idx), linspace(1, L, phaz), 'cubic');
end
% Original program
% for i=1:length(T_HCRM)-2
% for j=1:phaz
%
% comX1(i,:)=interp1([1:length(comXS(T_HCRM(i):T_TORM(i)))],comXS(T_HCRM(i):T_TORM(i)),[1:(length(comXS(T_HCRM(i):T_TORM(i)))-1)/(phaz-1):length(comXS(T_HCRM(i):T_TORM(i)))],'cubic');
% comY1(i,:)=interp1([1:length(comYS(T_HCRM(i):T_TORM(i)))],comYS(T_HCRM(i):T_TORM(i)),[1:(length(comYS(T_HCRM(i):T_TORM(i)))-1)/(phaz-1):length(comYS(T_HCRM(i):T_TORM(i)))],'cubic');
% comZ1(i,:)=interp1([1:length(comZS(T_HCRM(i):T_TORM(i)))],comZS(T_HCRM(i):T_TORM(i)),[1:(length(comZS(T_HCRM(i):T_TORM(i)))-1)/(phaz-1):length(comZS(T_HCRM(i):T_TORM(i)))],'cubic');
%
%
% end
% end
cycl=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]; %Provides with 20 cycles (rows) with 100 columns
comX1_=comX1(cycl,:);
comY1_=comY1(cycl,:);
comZ1_=comZ1(cycl,:);
Unrecognized function or variable 'CoM'.
Error in test (line 2)
sample=CoM;
What is CoM??? Can you at least give us code to get to the error you get? And I don't see anywhere in your program where you read in the Excel workbook.
Unrecognized function or variable 'LatMal_R_y'.
Error in test (line 19)
LatMal_R_y=movmean(LatMal_R_y,4);
Can you make it easy for us to help you instead of hard???
Dear Image Analyst,
Thank you so much for your comment and sorry for the inconvenience. In fact, to get the CoM, it is necessary to run several functions and needs a long process. The CoM is a matrix of 3 columns (CoM(:,1), CoM(:,2), CoM(:,3)) and 1911 rows. Honestly, it is not the original CoM file which is huge. I just selected a small piece of it that I have on my computer at home. The program reads the data on a server located in a biomechanics and human movement analysis lab to calculate and to extract variables (like CoM and LatMal_R_y). I am a student in that lab and unfortunately, I do not know a lot about MATLAB (just a beginner who has to use the help of MATLAB , internet and ask professionals). The only person that was able to help me has been diagnosed as a coronavirus patient and I have to submit my papers and project in a few months. Usually, they do not use MATLAB in that lab. I have to use MATLAB because it is faster than the traditional softwares they use there.
I included the CoM and other variables in the attached EXCEL file. Please kindly open the EXCEL file and find them. Also, I hope the following line helps to read the data from the attached EXCEL file. I used the Help Center of MathWorks to write it.
T = readtable('MATLAB.xlsx','Range','A1:H1912');
R5Min=islocalmin(R_5Met_y)& R_5Met_y<.03;% To detect when marker contacts the ground: minimum position of the marker is the time it takes off the ground
That test is not good enough for your purposes. A number of your R_5Met_y areas descend steeply, then rise very slightly, descend shallowly, then rise steeply. A local min is detected just before the very slight rise, and another just before the steep rise, leading to two local min being found in some of the dips. Meanwhile your other data does not have that property, so you end up with unsychronized peak locations.
T = readtable('MATLAB.xlsx', 'PreserveVariableNames', true);
CoM = T{:,[1 3 5]};
LatMal_R_y = T.LatMal_R_y;
R_5Met_y = T.R_5Met_y;
phaz=100;
sample=CoM;
sample(:,1)=sample(:,1)+(((sample(1,1)-sample(end,1))/(length(sample)-1))*(1:length(sample)))';
CoM=sample;
comXS=CoM(:,1);
comYS=CoM(:,2);
comZS=CoM(:,3);
LatMal_R_y=movmean(LatMal_R_y,4);
RMal_Min=islocalmin(LatMal_R_y, 'MinSeparation', 50) & LatMal_R_y<.1; % To detect when marker contacts the ground: minimum position of the marker is the time it contacts the ground
R_5Met_y=movmean(R_5Met_y,4);
R5Min=islocalmin(R_5Met_y, 'MinSeparation', 50) & R_5Met_y<.03;% To detect when marker contacts the ground: minimum position of the marker is the time it takes off the ground
T_TORM = find(R5Min(1:end-1)).'; %I do not know why you end one shorter)
T_HCRM = find(RMal_Min).';
if ( T_TORM(1) < T_HCRM(1) )
T_TORM = T_TORM(2:end);
end
if length (T_HCRM) ~= length (T_TORM) % To provide similar length for both T_HCRM and T_TORM
minLengthR = min(length(T_HCRM), length(T_TORM));
T_HCRM = T_HCRM(1:minLengthR);
T_TORM = T_TORM(1:minLengthR);
end
N = length(T_HCRM)-2; %I am not sure why you end early
comX1 = zeros(N, phaz);
comY1 = zeros(N, phaz);
comZ1 = zeros(N, phaz);
for i=1:N
idx = T_HCRM(i):T_TORM(i);
L = length(idx);
assert(L>0, sprintf('T_TORM(%d) = %g is before T_HCRM(%d) = %g', i, T_TORM(i), i, T_HCRM(i)));
comX1(i,:) = interp1(comXS(idx), linspace(1, L, phaz), 'pchip');
comY1(i,:) = interp1(comYS(idx), linspace(1, L, phaz), 'pchip');
comZ1(i,:) = interp1(comZS(idx), linspace(1, L, phaz), 'pchip');
end
% Original program
% for i=1:length(T_HCRM)-2
% for j=1:phaz
%
% comX1(i,:)=interp1([1:length(comXS(T_HCRM(i):T_TORM(i)))],comXS(T_HCRM(i):T_TORM(i)),[1:(length(comXS(T_HCRM(i):T_TORM(i)))-1)/(phaz-1):length(comXS(T_HCRM(i):T_TORM(i)))],'cubic');
% comY1(i,:)=interp1([1:length(comYS(T_HCRM(i):T_TORM(i)))],comYS(T_HCRM(i):T_TORM(i)),[1:(length(comYS(T_HCRM(i):T_TORM(i)))-1)/(phaz-1):length(comYS(T_HCRM(i):T_TORM(i)))],'cubic');
% comZ1(i,:)=interp1([1:length(comZS(T_HCRM(i):T_TORM(i)))],comZS(T_HCRM(i):T_TORM(i)),[1:(length(comZS(T_HCRM(i):T_TORM(i)))-1)/(phaz-1):length(comZS(T_HCRM(i):T_TORM(i)))],'cubic');
%
%
% end
% end
cycl=20; %Provides with 20 cycles (rows) with 100 columns
comX1_=comX1(1:cycl,:);
comY1_=comY1(1:cycl,:);
comZ1_=comZ1(1:cycl,:);

Sign in to comment.

More Answers (1)

Dear Walter Roberson
Thank you so much for your favour. To appreciate your kindness, I will add your name to the acknowledgment section of my thesis. Sorry for the delay in providing you with the feedback. As a beginner, I had to spend time to understand why the following issues happened.
------Different age-groups with different patterns of gait have participated in the project. I tried to test the program in different age-groups. Unfortunately, it did not work in some of them. It took me time to find out the reason by comparing the graphs of markers ((LatMal_R_y) and (R_5Met_y)) in different age-groups.
Problem was in the following lines:
RMal_Min=islocalmin(LatMal_R_y, 'MinSeparation', 50) & LatMal_R_y<.1;
R5Min=islocalmin(R_5Met_y, 'MinSeparation', 50) & R_5Met_y<.03;
In fact, the minimum of "R_5Met_y" and "LatMal_R_y" in some groups was not "<.3" and in some of them ".<1". So, I changed them as the following lines to make them appropriate for all groups:
RMal_Min=islocalmin(LatMal_R_y, 'MinSeparation', 50)& LatMal_R_y<min(LatMal_R_y)+.04;
R5Min=islocalmin(R_5Met_y, 'MinSeparation', 50)& R_5Met_y<min(R_5Met_y)+.04;
As a professional, you certainly have a better and more precise suggestion. It is appreciated if you apply your ideas to the program.
----The study also includes walking at different speeds. When I checked the program for subjects who walked at .05 m/s, I received this error message: T_TORM(8) = 736 is before T_HCRM(8) = 746. I added the data of this subject in the second sheet "Healthy_.05" of the attached EXCEL file. It seems that the front marker contacted the ground sooner than the rear marker and took off the ground before the rear marker contacted the ground. I would like to tell you that it is possible in some conditions that such a thing happens. But the condition added to the following line stops the program:
assert(L>0, sprintf('T_TORM(%d) = %g is before T_HCRM(%d) = %g', i, T_TORM(i), i, T_HCRM(i)));
What is the solution? We have to assure that the following line precisely defines the time that the rear marker contacts to the ground (red arrows in fig-1):
LMal_Min=islocalmin(LatMal_L_y, 'MinSeparation', 50)& LatMal_L_y<min(LatMal_L_y)+.04;
Also, we have to assure that the following line precisely defines the time that the front marker takes off the ground (green arrows in fig-2):
R5Min=islocalmin(R_5Met_y, 'MinSeparation', 50)& R_5Met_y<min(R_5Met_y)+.04;
L5Min1=islocalmin(diff([L_5Met_y(1); L_5Met_y]))& L_5Met_y<.03;
R5Min1=islocalmin(diff([R_5Met_y(1); R_5Met_y]))& R_5Met_y<.03;
If we define precisely the points corresponding to the blue and green arrows, the presence of T_TORM sooner than T_HCRM is accepted and even is normal. I mean the condition in this line is not necessarily always true, particularely in pathological situations like patteron of walking after amputation:
assert(L>0, sprintf('T_TORM(%d) = %g is before T_HCRM(%d) = %g', i, T_TORM(i), i, T_HCRM(i)));
It could happen in pathologic gait like the gait of stroke patients as well. That's why I think it is better to find the corresponding points of red and green arrows for both markers. As I mentioned somebody else offered a solution. I thought it is better to have your idea about the solution. Maybe you have a better idea.
Since I saw these issues, I searched a lot and I tried a lot to change the program but I am a beginner and I am not confident. On the other hand, I am not fast enough. As you are a professional, it is easy for you to find a solution.
Thank you so much for your kind attention to my situation,

5 Comments

Your original code had a bunch of places that relied upon
T_HCRM(i):T_TORM(i)
When the order of the markers is reversed from the typical low-speed version (whether due to measurement error or due to unusual gaits) then the result would be an empty vector, and your calculation messes up in that situation.
What should be done in the calculation at the point? For example should the two locations just be exchanged, or should the calculation become different?
Is it possible for one of the parts to be absent some of the time? For example someone on crutches hopping occasionally? If so then what should be done?
I am not clear on what the rules are for where to place the red and green arrows. It does not look to me as if the rule is about local minima or local maxima: it looks to me as if the rule might be that one of them is at the point where the curvature decreases substantially (from steep negative to either positive or much less negative), and that the other one of them is at the point where the curvature starts increasing substantially (from near-ish zero to steep positive.) This is not the same rule as local minima: you had locations that were similar to
\ /
\ /
< >
----v-
the local min would be at the bottom of the v, but the place the curvature starts changing rapidly would be the location after that.
The "LatMal_R" is the marker that is attached to the right heel. The "R_5Met" is the marker that is attached to the most anterior part of the foot. We use the movement of the markers on the vertical coordinate ( "LatMal_R_y" and "R_5Met_y" respectively) to determine "heel contact" and "toe-off" phases of gait. Red arrows of the fig-1 represent "heel contact" when the marker attached on the heel reached its minimum distance with the ground (ground represents by 0 in this figure). Then normally, with the forward movement of the body, the subject puts more weight on the heel. Consequently, the marker moves some millimetres downward. The green arrow of the Fig-1 is the time when the subject takes off the heel. The same thing happens for the marker "R_5Met" which is attached on the anterior part of the foot. Red arrows of the "R_5Met_y" (Fig-2) represent the contact of the forefoot on the ground and green arrows represent take-off of the that marker. Again here, because of the weight of the body, the marker moves some few millimetres downward and the end at the time of take-off of the forefoot (green arrows) its value (on the y coordinate) increases. It is a general explanation regarding the normal movement of the markers of heel and forefoot. So, one factor that impacts the pattern of the movement of the markers is the weight of the subject. Another factor is speed. Also, there are other factors like age and the presence of any pathologic gait. That's why the movement of the y coordinate of the markers is not the same between different subjects.
During walking, we regularly start each step by heel contact and progress it to flat foot and eventually to toe-off. With slow or fast speed, the normal sequence of the movement will change. For example, at faster speeds, subjects sometimes show a pattern of walking which is called "forefoot walking" which means they simply contact only the forefoot on the ground. So, in that condition, there will not be any heel contact ("LatMal_R_y" won't reach its regular minimum and T_HCRM(i) will be an empty vector).
Also, we applied perturbation during gait. Depending on age, weight and presence of any pathology the reaction of different subjects will differ. A young subject can jump forward after a perturbation and lands with both heels on the ground, an old man can take a backward step and puts simultaneously heel and forefoot on the ground and, a stroke patient may step backward and touch the ground with the forefoot.
In the case of your first question, the best way is to define 3 subphases for each step:
1- Heel contact (red arrow of Fig-1) without any contact of the marker of the forefoot on the ground (means a time before the red arrow of the "R_5Met_y").
2- Flat foot: both "LatMal_R_y" and "R_5Met_y" are in a situation between red and green arrows simultaneously.
3- Toe-off: which starts at the point of the green arrow of "R_5Met_y" WITHOUT any contact between the heel and the ground ("LatMal_R_y" is in situation after green arrow and before its peak).
4- According to the explanation of abnormal gait patterns (pathologic or gait of elderly) and particularly in the case of perturbations, it is noticeable that normally people have a forward progression during gait (positive values of the x coordinate of the markers). So, if we define a negative direction for all these subphases (which could be defined as negative values resulted from subtracting of the value of x coordinate of a marker at the step of (i+1) and its value of x coordinate at step (i), the program will easily return the direction of the step. I mean if the value of "LatMal_R_x" is +27 and its value of the next step is +40, so the subject walked forward but if the "LatMal_R_x" is +27 and its value of the next step becomes +18 it means subject took a backward step.
5- You are absolutely right, the original code is for regular gait at a comfortable speed without any challenge. It was done for another project but I have to change it for my own project and since 8 weeks ago that my friend has had symptoms of COVID 19, I am alone and I am a beginner.
6- Based on the varying conditions of pathologic gait a program that is flexible enough to cover theses varying conditions will work. In fact, we want to study what is the reaction of an old person after a strong perturbation on the right side and compare it with the same condition after a strong perturbation on the left side because we do not know it. Maybe he just put the forefoot on the ground or maybe he takes a backward step or even does not move his right foot but take a long backward step with his left foot or...I mean certainly as you are a professional and you have a very excellent knowledge of different functions of MATLAB, it is really easy for you to write such a program.
In the case of your second question, yes it is possible that one of these parts be absent sometimes. We can use the bilateral values of markers of both right and left sides. In standing position, always the markers of right heel, right forefoot, left foorefoot and left heel are on the ground. During walking, we regularly start each step by heel contact and progress it to flat foot and eventually to toe-off. We try to link these markers together to calculate the distance between them WHEN THEY ARE IN CONTACT WITH THE GROUND and we call it Base of Support (BOS). Imagine left foot is in flat foot position (both markers of the left heel and left forefoot are in a situation between red and green arrows) but only right heel is on the ground ( "LatMal_R_y" is in the situation between red arrow and green arrow) AND right toe ("R_5Met_y") is in condition between the green arrow and its peak. In this situation, the BOS is defined as the surface between the markers which are in contact with the ground. Now, imagine the subject moves forward and takes off the left heel but puts the right foot completely on the ground. Now the BOS is defined as the surface between Right heel marker, Right forefoot marker and Left forefoot marker. We always offer the dimensions of the BOS (its length and its width) at each frame BETWEEN MARKERS THAT ARE IN CONTACT WITH THE GROUND. Normally we have to normalize each step (from one heel contact (for example red arrow of the marker of Right heel ("LatMal_R_y") to the heel contact of the opposite foot (red arrow of the marker of the left heel ("LatMal_L_y")) by providing this event in 100 columns and 1 row. It is actually the purpose of the following lines in your program:
for i=1:N
idx = T_HCRM(i):T_TORM(i);
L = length(idx);
assert(L>0, sprintf('T_TORM(%d) = %g is before T_HCRM(%d) = %g', i, T_TORM(i), i, T_HCRM(i)));
comX1(i,:) = interp1(comXS(idx), linspace(1, L, phaz), 'pchip');
comY1(i,:) = interp1(comYS(idx), linspace(1, L, phaz), 'pchip');
comZ1(i,:) = interp1(comZS(idx), linspace(1, L, phaz), 'pchip');
end
T_HCRM is Heel Contact of Right side and T_TORM Toe-Off phase of the Right side. So, using the data of right and left heel markers, it is easy for you to calculate the dimensions of the BOS in a way that any abnormal change due to different conditions does not stop the program. In that way, we monitor constantly the dimensions of the BOS ( the space limited between the markers that are on the ground) to find out after a challenge to gait (like a strong perturbation) when subjects reestablish the normal pattern of the BOS. Of course, when only one foot is on the ground, the dimensions of the BOS are limited to the distance between x coordinates of the two markers of that side (as the length of the BOS)and the distance between the y coordinates of the two markers ( as the width of the BOS)). The CoM is the Center of Mass of the body. In fact, the abovementioned lines calculate the movement of the three coordinates of the CoM during one step and provide us with 100 columns during each step to normalize it. We can have the same thing with the dimensions of BOS.
By the way, today I compared the results achieved by your program with the results provided with the traditional programs in the lab which are not based on MATLAB and your results provided with the same values and curves as the traditional program.
Again, I really appreciate your kind attention to my situation
I forgot to mention that normally a step is defined from one heel contact (between red and green arrows of the heel marker) to the heel contact of the opposite foot (the area between red and green arrows of the opposite heel marker), but if it is not possible to detect the heel contact of one of the feet, we can modify the definition of the step as contact take between one of these markers with the ground (the area between red and green arrows) and any contact between one of the opposite markers and the ground. It is necessary to normalize this modified definition of the step by proving 1 row and 100 columns through the abovementioned lines of your program.
This has gotten too complicated for me. I am working on a lot of different things at the same time, and it would take a lot of analysis for me to figure out what the above explanations mean in practice.
I see why fuzzy logic gait classification has been used by a number of people...
I would consider something like a Finite State Machine that instead of examining indefinitely into the future, has state about current hypotheses of what is happening, and state about predictions of where the feet will go next, and at each step receives one reading from each of the two sensors, and uses the information to change state or refine the predictions about where the feet will go next.
Gait is the sate of continuous imbalance and unpredictable events, particularly pathologic gait.
Thank you for your suggestion.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!