An overview of Modern C3D Files

C3D (Coordinate 3D) files are designed to hold data and associated parameters within a single file that was designed to provide an accurate format for storing a variety of data and their parameters in an efficient manner while allowing the user to understand, examine, and if necessary modify the parameters.

The overall goals for the C3D file format were as follows:

  • Minimize storage requirements
  • Minimize the number of files required to store data and its associated parameters
  • Optimize for speed and efficiency of access
  • Provide a facility for incorporating parameter descriptions
  • Provide the facility for the casual user to display and modify all parameters
  • Provide flexibility to store different kinds of data and their associated parameter

The original C3D format

The C3D file format is designed to store raw data from a 3D data collection environment, each data collection stored as a single trial of raw 3D coordinates and analog samples with a defined parameter section that described each files data properties. All early C3D files included camera contribution data and a 3D calculation residual stored with each 3D coordinate, allowing the quality and accuracy of every recorded 3D data value to be continually monitored and evaluated. Simultaneously, multiple samples of analog data could be sampled during each 3D frame to guarantee temporal synchronization, each analog sample being recorded as the value directly read from an ADC and recorded as raw sample values. Overall the design of the C3D format enables all the data collected to be stored with a minimum of processing, and allows the user to verify the quality of the raw and unprocessed 3D and analog data collected during an experiment.

Current C3D implementations

However, as data collection systems have evolved, many manufacturers have begun processing the raw sampled data before creating the C3D file and created their own additional data values in the file as pseudo-3D points to store processed and calculated data values.  While this does not violate the C3D specification, it does mean that end-users now have to implicitly trust their manufacturer’s data collection and processing efforts because many C3D files these days do not contain any raw data as the manufacturer has removed the original “raw” data from observation.  This means that any errors in data collection, and processing before the C3D file is created, are effectively hidden from the end-user to the manufacturer’s advantage, preventing a quality assessment of the data collection process.
The C3D format was designed to record the analog voltages generated by sensors during each data collection trial.  These sampled voltages are intended to be stored in the C3D file together with individual sensor parameters.
If the sensor was a force plate then the C3D parameters recorded the manufacturer’s calibration matrix, and the force plate orientation information, allowing applications reading the C3D file to calculate the measured force and moments within the 3D calibrated volume from the raw data.  This means that any errors in the force plate parameters that are discovered post-collection can be fixed by correcting the applicable parameters and reopening the C3D file.  By storing all the analog samples from a trial, any user can review the data collection environment and verify that the data collection is functional and accurate.
But many data collection systems now pre-process the analog data and only store the calculated sensor data - this presents a number of problems:

  • If the initial system configuration is incorrect it will be difficult to detect and impossible to correct post-collection.  For example, it is not uncommon to record the force plate location in the laboratory calibration volume with a positive Z axis, matching the laboratory volume without realizing that the force plate is recording an applied force and has an internal mechanical origin located within the force plate.
  • Another common issue results from force plate mounting problems generating crosstalk, signals being generated from external influences as the subject walks towards the plate on the laboratory floor.  When a system only presents force plate data while the subject is over the plate you cannot verify that there are no external influences being recorded.
  • Analog signals are from sensors are recorded by an ADC with a fixed resolution (typically 12, 14 or 16 bits) and a fixed input voltage range (typically ±2.5V, ±5V or ±10V) and when the system only stores processed, pre-scaled data it is easy to lose signal resolution without any indication.

Using the C3D format to store processed data is an option that manufacturers can use without breaking the format but if all that is recorded is the processed data then the manufacturer has created an environment that is difficult to fault-find because it prevents the end-user from evaluating the quality and accuracy of the raw data collected.  If the C3D file stores raw, unprocessed 3D and analog data then anyone can determine how well the system creating the data is functioning, and make corrections to the data collection environment to fix errors and improve the data quality.

It is recommended that the default configuration for C3D file creation is to store minimally processed raw data samples.