Skip to main content
The Telemetry class provides access to multi-channel time series telemetry data from Formula 1 cars.

Telemetry

DataFrame-like object containing multi-channel telemetry data. Constructor:
Session | None
default:"None"
Instance of Session class (required for full functionality)
str | None
default:"None"
Driver number as string (required for full functionality)
bool
default:"False"
Remove all unknown data channels on initialization

Available Channels

Car Data Channels

  • Speed (float64): Car speed in km/h
  • RPM (float64): Engine RPM
  • nGear (int): Current gear number
  • Throttle (float64): Throttle pedal position (0-100%). Note: 104 sometimes indicates error/unavailable data.
  • Brake (bool): Whether brakes are applied
  • DRS (int): DRS status indicator

Position Data Channels

  • X (float64): X coordinate position (1/10 meter)
  • Y (float64): Y coordinate position (1/10 meter)
  • Z (float64): Z coordinate position (1/10 meter)
  • Status (str): Track status flag - ‘OnTrack’ or ‘OffTrack’

Time Channels

  • Time (timedelta64[ns]): Time elapsed since start of data slice (0 at start)
  • SessionTime (timedelta64[ns]): Time elapsed since session start
  • Date (datetime64[ns]): Full timestamp for this sample

Metadata Channels

  • Source (str): How this sample was created:
    • ‘car’: from original car data API
    • ‘pos’: from original position data API
    • ‘interpolated’: artificially created/interpolated sample

Computed Channels

These channels can be added using the corresponding add_*() methods:
  • Distance (float64): Distance driven since first sample (meters)
  • DifferentialDistance (float64): Distance between samples (meters)
  • RelativeDistance (float64): Relative distance (0.0 to 1.0)
  • DriverAhead (str): Driver number of car ahead
  • DistanceToDriverAhead (float64): Distance to car ahead (meters)
  • TrackStatus (int): Track status number

Class Attributes

TELEMETRY_FREQUENCY

str | int
Defines the frequency used when resampling telemetry data. Either the string ‘original’ (default) or an integer to specify frequency in Hz.

Slicing Methods

slice_by_mask()

Slice telemetry using a boolean array as a mask.
list | pd.Series | np.ndarray
required
Array of boolean values with the same length as self
int
default:"0"
Number of samples used for padding the sliced data
str
default:"'both'"
Where to pad: ‘both’, ‘before’, or ‘after’
Telemetry
Sliced Telemetry object

slice_by_lap()

Slice telemetry to include only data from specific lap(s).
Lap | Laps
required
The lap or laps to slice by
int
default:"0"
Number of samples for padding
str
default:"'both'"
Where to pad: ‘both’, ‘before’, or ‘after’
bool
default:"False"
Add interpolated samples at beginning and end to exactly match time window
Telemetry
Sliced Telemetry object
Requires ‘SessionTime’ column to be present.

slice_by_time()

Slice telemetry to include only data in a specific time frame.
pd.Timedelta
required
Start of the time window
pd.Timedelta
required
End of the time window
int
default:"0"
Number of samples for padding
str
default:"'both'"
Where to pad: ‘both’, ‘before’, or ‘after’
bool
default:"False"
Add interpolated samples at edges
Telemetry
Sliced Telemetry object

Data Manipulation Methods

merge_channels()

Merge telemetry objects containing different channels.
Telemetry | pd.DataFrame
required
Telemetry object to merge with self
int | Literal['original'] | None
default:"None"
Optional frequency override. Either ‘original’ or integer for Hz.
Telemetry
Merged Telemetry object with all channels
The two objects don’t need a common time base. Data will be merged, optionally resampled, and missing values interpolated.

resample_channels()

Resample telemetry data to a different frequency.
str | None
default:"None"
Resampling rule for pandas.Series.resample (e.g., ‘10ms’, ‘100ms’)
pd.Series | None
default:"None"
Alternative: provide a custom Series of new date reference timestamps
Any
Additional parameters passed to pandas.Series.resample
Telemetry
Resampled Telemetry object
Specify either ‘rule’ or ‘new_date_ref’, not both.

fill_missing()

Calculate missing values using interpolation.
Telemetry
Telemetry object with interpolated values
Different interpolation methods are used depending on the channel type (linear for continuous values like Speed, forward-fill for discrete values like nGear).

Adding Computed Channels

add_distance()

Add ‘Distance’ column containing cumulative distance driven.
bool
default:"True"
Drop and recalculate if column already exists
Telemetry
Self with new ‘Distance’ column
Distance is calculated by integration. Integration error accumulates over long distances. Apply only to single laps or few laps at a time.

add_differential_distance()

Add ‘DifferentialDistance’ column with distance between samples.
bool
default:"True"
Drop and recalculate if column already exists
Telemetry
Self with new ‘DifferentialDistance’ column

add_relative_distance()

Add ‘RelativeDistance’ column (0.0 at start, 1.0 at end).
bool
default:"True"
Drop and recalculate if column already exists
Telemetry
Self with new ‘RelativeDistance’ column

add_driver_ahead()

Add ‘DriverAhead’ and ‘DistanceToDriverAhead’ columns.
bool
default:"True"
Drop and recalculate if columns already exist
Telemetry
Self with new columns
Like add_distance(), this should only be applied to single laps or few laps at a time. Cars in the pit lane are not excluded.

add_track_status()

Add ‘TrackStatus’ column with track status for each sample.
bool
default:"True"
Drop and recalculate if column already exists
Telemetry
Self with new ‘TrackStatus’ column

Calculation Methods

calculate_differential_distance()

Calculate distance between samples.
pd.Series
Series with differential distance values in meters

integrate_distance()

Calculate cumulative distance from first sample.
pd.Series
Series with distance values in meters

calculate_driver_ahead()

Calculate driver ahead and distance to driver ahead.
bool
default:"False"
Additionally return the reference telemetry slice used for calculation
tuple
(driver_ahead: np.ndarray, distance: np.ndarray, [optional: reference_telemetry])

Class Methods

register_new_channel()

Register a custom telemetry channel for automatic interpolation.
str
required
Channel/column name
str
required
One of ‘continuous’, ‘discrete’, or ‘excluded’
str | None
default:"None"
Interpolation method (required for continuous signals). See pandas.Series.interpolate for options.
Example:

Complete Usage Example