Short answer: Use a two-point central difference (e.g. GRADIENT in Matlab).
Long answer:
Raymondas is partially right. The simple sample-to-sample difference is the easiest way. Nevertheless, this will significantly increase your signal noise.
Using a Sav-Golay filter is less noisy and seems to be very good in keeping the peak velocity of the saccade undistorted (since the velocity trace is approximately a polynomial function; see e.g. the lecture notes by Schaefer and the paper by Bromba).
However a simpler but also quite efficient method is the two-point central difference (basically just an extension of the s2s difference) since it simultaneously smoothes the data. It has been shown to yield very good (if not the best) results for computing velocity traces (see paper by Bahill).
In general I can recommend reading the paper by Inchingolo who summarizes the processing steps quite well.
Greetings, David
Article What Is a Savitzky-Golay Filter? [Lecture Notes]
Article Application Hints for Savitzky-Golay Digital Smoothing Filters
Article Frequency limitations of the two-point central difference di...
Article On the Identification and Analysis of Saccadic Eye Movements...
I agree with all of the above - the refs are particualrly useful. However, a couple of things to note. If you're using a low temporal resolution eye tracker (say 50-60Hz) you're unlikely to be able to reconstruct the velocity profiles for many saccades usefully. Eyes rarely make single saccades between fixation points, particularly if the required saccade is relatively large (say greater than 10 degrees). So you'll have largish primary saccades, with a variety of smaller correctives. But small saccades have low durations (of the order of a few tens of milliseconds). Low duration + low resolution eye tracker = few samples per saccade. This might not matter depending on exactly what you want to know. But it will lead to widely variable velocites.
Velocity on its own doesn't tell you much becuase of the well known relationship between amplitude and velocity. If you want to claim a difference between conditions, ploat the amp/vel relationship.
i agree with all above, However the first question is what is the information needed for ? Average velocity of a number of saccades? Velocity variability given the same task? The latter can't be calculated without amplitude data .
The answer to the questions partially, but significantly will depend on the specific question or questions.
Your paper was really helpful. I just had one question. Some other papers who talk about saccade detection use gaze points instead of pupil coordinates to calculate the velocity is there a difference between choosing one or the other?
Since your question was answered 3 years ago, I'm guessing you've moved on! Nonetheless, for new visitors, I'd like to offer my suggestions. S-Golay filters are great and they *tend* to maintain Saccade peaks but for a low SR Eye tracker, smaller Saccades will be represented by lesser number of samples.
You'll quickly dissolve yourself in a fight between filter parameters and maintaining Saccade peaks (even with a SG filter).
Hence, I recommend using a 1D bilateral filter. It beautifully maintains Saccade peaks. The trade off with a Bilateral filter is it's range parameter. You need to tweak that to ensure smaller Saccades (
I am a beginner in eye tracking analysis and I tried using these steps [Taking distance between user and screen = 60cm]. I used fixation points calculated from an open source platform. I want to know how to calculate saccade velocity with the use of these fixation points. Please help me if I am wrong and what do I need to do to achieve correct values : 1. For fixation points -> (x1, y1) = (1037.115, 367.1904) at time(t1 = 3.35) and (x2, y2) = (684.5436, 716.046) at time (t2 = 4.45), I used pythagoras theorem and found the value as 495.990 px which changed to 13.12 cm during conversion. This gave the value of theta = arctan(13.12/60) = 12.35 degrees [Assuming a standard distance of 60cm] 2. Now, from my understanding 12.35 degrees is the saccade amplitude (angular distance eye traveled during this fixation movement). So is the saccade velocity = 12.35degrees/(4.45-3.45)seconds = 12.35 degrees/seconds ?
Is my calculation wrong somewhere ? Usually according to many papers saccade velocity begins from 100 degree/seconds. Would you help me point out my mistake and clear my confusion?
Rasa Bhattarai - Well, you're not completely wrong. What you have is the average Saccade velocity between t1 and t2. The average Saccade velocity is different from Peak Saccade velocity, which is the maximum eye movement velocity observed during a Saccade. This link will help you out: https://www.liverpool.ac.uk/~pcknox/teaching/Eymovs/params.htm
In short, to record Saccadic movements, you would need a 45 Hz Eye Tracking at the absolute minimum. Your open source platform seems to be operating at a very low frame rate.
Rasa Bhattari: There is some issue with your timing data. I have not seen saccades with duration of 1000 ms. (4.45-3.45)sec. Saccades have relative short time duration probably 50-60 ms. Time interval between two fixations is not the duration of saccades. It also includes other time components like inter saccadic interval (ISI), RT for the second saccade, and the execution time for 2nd saccade.
Prior to calculating saccadic velocities (average or peak) you need to first detect the onset and offset of saccade using the displacement values (X & Y) given out from your tracker. The time interval between the two is the actual duration of the saccade which will probably be between 40-60 ms (for 10 -15 degree saccade). You need to use this time interval to calculate the saccadic velocity
If your tracker don't have sufficient temporal resolution, measurement of peak velocity will not be accurate.