Mark's answer is a great way of doing this. In addition, you might consider looking at the ischange function:
tf = ischange(jointAngle, 'SamplePoints', time, 'MaxNumChanges', 9);
plot(time, jointAngle, time(tf), jointAngle(tf), '*r')
This doesn't give you exactly the same results, as it basically finds the middle points of the rising and falling edges. But if all you need is to analyze the widths relative to each other, then it might also work.
To make it more robust, you could instead use the Threshold option from ischange:
tf = ischange(jointAngle, 'SamplePoints', time, 'Threshold', 1e5);
It's a bit harder to intuitively guess that the value for Threshold should be, but if you find a good one that works, it will (hopefully) work across multiple traces.