Analog Data

You must ensure that all ANALOG:GEN_SCALE and ANALOG:SCALE parameters are set to values that scale the analog data in meaningful ways.  Thus force plate data channels will contain ANALOG:SCALE values that are consistent with the scaling calculations that are required by the force plate TYPE description.  Other analog channels that containing data with known scaling, for example strain gauge signals, or torque, velocity, and angle data from a dynamometer system etc., should have ANALOG:SCALE values that make sense and are described in the ANALOG:LABELS and ANALOG:DESCRIPTIONS entries.

Analog data that does not have fixed, known, scaling values should be scaled in terms of "volts applied to the data collection system ADC input", allowing the data to be viewed and scaled later in sensible terms.  Any post-processing scaling can be applied as a separate value, stored in the C3D parameters, allowing the data to be viewed either in terms of the original "recorded values", or displayed "scaled" by third-party software.

It is recommended that all ANALOG:SCALE values are chosen appropriately so that the analog data values are preserved if the C3D files are converted between integer and floating-point data types.  This means that if the default file storage format is floating-point then all analog data should be scaled to produce numbers within a range of a signed 16-bit integer - specifically −32767 to +32767 when the C3D file is converted to the integer format.  Failure to follow this recommendation can result in analog data values being corrupted if the C3D file is converted from floating-point to integer format unless the conversion operation rescales the analog channels.

An example of a potential pre-scaled floating-point storage problem is that when analog samples are stored as floating point values with the ANALOG:SCALE set to 1 with the ANALOG:OFFSET parameter set to 0, this prevents all users reading the C3D file from determining the original sample values.  For example when the ADC range is set to ±10V then a 4 year old child walking over a force plate may be recorded as weighing 15kg but when the ADC range is set ±5V then the 4 year old will be “measured” as weighing 30kg!  When the analog data is stored as integers this problem can be discovered and resolved by correcting ADC range error stored as a component of the ANALOG:SCALE parameter, but when data is only stored as pre-scaled floating-point values then the problem cannot be diagnosed or fixed.

Storing analog data using the pre-scaled floating-point format offers no significant advantage because when the analog data is sampled by a 16-bit ADC, both floating-point and integer samples have exactly the same resolution.  However the floating-point C3D files will be twice the size of the integer C3D files and scaling the data without recording the scaling operation has the potential to result in inaccurate data.