Introduction
This document defines the latest CSV specification for the Emteq DAB CSV specification.
Please observe the #Format/Version when parsing CSV data.
The specification is actively being updated and changes can be identified in the chapter Format Revisions.
Rules
Formatting
#
prefix on comment-lines (See Meta-Data Comments),
separated data for all areas of document#Format/Version,CSV1.0.0
as the first line of the file- Unix line ending
LF
(MS-DOSCR+LF
prior to CSV1.0.7) - Comment lines may appear at any time
- CSV Header-row shall always be present on the first non-comment line
- CSV Data-row shall contain the same number of delimited fields
- Last line shall always include line ending characters
Field-Naming
- Data is named using ‘Path like' syntax.
- First character of module is upper-case i.e.
UpperCamelCase/
- First character of member field is lower-case i.e.
.lowerCamelCase
- Path syntax uses
/
class-module scopes
e.g.Module/Class
orModule/Class/Subclass
etc. - Path syntax uses
.
for referencing member field
e.g.Module/Class.firstMember
- Path syntax uses
[]
postfix for Array of data
e.g.Module/Class.valueArray[],0,1,2,3,4,5,6,7
- Path syntax uses
{}
postfix for Key-Value data
e.g.Module/Class.valueArray{},valueA,0,valueB,1,valueC,2
Examples
This chapter contains examples for each formatting rule.
- First Line
#Format/Version,CSV1.0.0
- Meta-Data
#Device/Version.serialId,DAB6N0tqTM5OVMgICA4KiEQ/w
- Meta-Data Key-Value
#Imu/Version{},firmware,3.017,bootloader,21,accelerometer,251,magnetometer,50,gyroscope,15
- Meta-Data Array-Value
#Emg/Properties.ids[],RightFrontalis,RightZygomaticus,...,LeftFrontalis
- Header-row
Frame#,Time,Faceplate/FaceState,Faceplate/FitState
- Data-row
123,0.01052,1,1,4,4,0,0,35078,1247797,31721
Data Definitions
Meta Data
This chapter contains detail about all CSV Meta-Data
Comment-lines are used to store Meta-Data
thatdescribes how to use the contained CSV Data
#Format
#Format/Version
Version of the CSV specification which the data file is based upon
e.g. #Format/Version,CSV1.0.3
#Format/Deprecate
Deprecation flag for a CSV class means that the data is not intended to be supported in future specification or has been replaced.
Please observe the #Format/Version when parsing CSV data. Developers should prepare to migrate away from use of deprecated classes as they will be removed in a future/next revision of the specification.
e.g. #Format/Deprecate,Imu/*
indicates the all of Imu/
types are planned for removal.
See the change-log and respective class specific data documentation for details
#File
#File/Generator
Application that generated this CSV file as a Name and Version pair
e.g. #File/Generator,dab2csv,v0.4.0
#File/Normalised
Generator setting for whether all measurement data is to be normalised'.
e.g. #File/Normalised,YES
When a file is ‘Normalised' the data will have been pre-scaled to the output unit specified in {Measurement}/Properties
Disk-space requirement is significantly increased when converting data to Normalise-CSV format
#File/Source
Source DAB filename from which the CSV was converted from
e.g. #File/Source,recording_2020_01_02_1230.dab
When using dab2csv
this field can only be populated if the filename is provided on the command line. i.e. This field is omitted when stdin
pipe is used.
#Protocol
#Protocol/Version
Binary communications protocol revision that the Emteq DAB device supports. This must be compatible with the tool used to generate the data-file.
e.g. #Protocol/Version,MASK.1.3
Current dab2csv is only backwards-compatible and must be updated to convert more recent protocol revision data.
#Protocol/Log.message
Developer/diagnostic log message with generic content. Some common messages:
AdsMiss & AdsLate
The EMG device failed to read a number of measurements. This can be caused by:
- DAB device busy initialising - can occur near beginning of high-rate data capture and may be resolved in future firmware revisions.
- Host computer is not reading the USB fast enough. This is an issue with the Host-Computer and/or Software. This sort of issues may be fixed with updated Host PC software or closing other apps or removing unnecessary USB devices etc.
#Stream
#Stream/Generator
Creator of measurement data as Name and Value pair
e.g. #Stream/Generator,Dab,v0.6.2
#Stream/Source
#SelfTest
#SelfTest/Begin
Beginning of Emteq DAB power-on-self-test (POST)
#SelfTest/End
Indicates the result of power-on-self-test (POST)
#Firmware
#Firmware/Build.buildTag
The revision of application firmware that is running on the Emteq DAB device that generated this data file.
e.g. #Firmware/Build.buildTag,v0.4.6-0
#Firmware/Bootloader.buildTag
The revision of bootloader firmware that is running on the Emteq DAB device.
e.g. #Firmware/Bootloader.buildTag,v1.8.0
#Device
#Device/Version.serialId
The unique hardware device indicator that identifies the Emteq DAB device embedded inside your Emteq headset.
e.g. #Device/Version.serialId,DABqWeRtYuIoPaSd123/w
This should be included in support communications as provides a means to identify the device that any issues are related too.
#Device/Version.hardware
The hardware revision of the Emteq DAB board this data file was created from.
This information is required when performing firmware updates to ensure that the application is compatible with the device revision.
#Faceplate
#Faceplate/Version.serial
The unique identifier for the flexible-mask faceplate that is attached to the Emteq DAB device.
e.g. #Faceplate/Version.serial,oQwErTyUiO
#Faceplate/Version.hardware
The hardware revision of the flexible-mask faceplate that is attached to the Emteq DAB device.
This may not be populated for early-production devices
#Emg
#Emg/Version.model
Hardware device model which is used for EMG acquisition. The model may have specific measurement characteristics which may be published if/as these are determined by Emteq.
#Emg/Properties.sensorCount
The number of EMG channels that are collected in this data file.
e.g. #Emg/Properties.sensorCount,7
#Emg/Properties.contactMode
Method of skin-contact that is in-use. The current modes are:
- DC - Provides ‘Binary' ON/OFF contact information for each electrode on the mask independently. This data is reported in Emg/ContactStates
- AC - Provides accurate ‘Analog' measurement of skin-contact impedance for each electrode pair on the mask. This data is reported in Emg/Contact with a threshold applied to give Emg/ContactStates
#Emg/Properties.measureHertz
Underlying hardware data-acquisition rate of EMG data.
#Emg/Properties.rawToVoltageDivisor
CSV data is unprocessed by default and a scalar can be applied to produce normalised measurement in the specified unit.
e.g. #Emg/Properties.rawToVoltageDivisor,25165824.0,volt
#File/Normalised of YES indicates the scalar conversion is intrinsically applied to the data
This scalar may be used to convert Emg/Raw, Emg/Filtered, and Emg/Amplitude values as volts
volts = raw / rawToVoltageDivisor
#Emg/Properties.contactToImpedanceDivisor
CSV data is unprocessed by default and a scalar can be applied to produce normalised measurement in the specified unit.
e.g. #Emg/Properties.contactToImpedanceDivisor,0.5,ohm
#File/Normalised of YES indicates the scalar conversion is intrinsically applied to the data
This scalar may be used to convert Emg/Contact to Impedance as Ohms
ohms = contact / contactToImpedanceDivisor
#Emg/Properties.ids[]
Primary-muscle location of each Emg electrode.
Order and assignment of Leads may change based on hardware version or manual electrode positioning (specific hardware versions).
It is highly recommended that:
- Muscle-Ids shall be verified for every data file to ensure the data contains the desired biophysical measurements
- Muscle-Ids shall be referenced when using EMG data that is numeric indexed e.g.
Emg/Raw[0]
is data from the first primary-muscle identifier.
#Emg/Properties.positions[]
Face-location of each Emg electrode.
This data is not yet defined/populated on any current Firmware
#Emg/CalibrationState
Emteq internal information about the Factory-Calibration status of the device
#Emg/Calibration[]
Emteq internal information about the Factory-Calibration status of the device
#Emg/Config/{Raw | Contact | Filtered | Amplitude}.hertz
The output-rate of the respective Emg data.
This applies to all data after this point in the data file but may be overridden by subsequent changes.
As the data-rate may be configured by the application on the Host computer either:
A) Avoid changing the setting during data-capture
B) ensure that the data-rate change is processed when it occurs mid-recording
#Imu
#Imu/
is deprecated as of CSV1.0.5
, removed in CSV1.1.x
#Imu/Properties.accelerationDivisor
See #Accelerometer/Properties.rawDivisor
#Imu/Properties.magnetometerDivisor
See #Magnetometer/Properties.rawDivisor
#Imu/Properties.gyroscopeDivisor
See #Gyroscope/Properties.rawDivisor
#Imu/Properties.accelerometerHertzMax
See #Accelerometer/Properties.hertzMax
#Imu/Properties.magnetometerHertzMax
See #Magnetometer/Properties.hertzMax
#Imu/Properties.gyroscopeHertzMax
See #Gyroscope/Properties.hertzMax
#Imu/Config/Accelerometer.hertz
See #Accelerometer/Config.hertz
#Imu/Config/Magnetometer.hertz
See #Magnetometer/Config.hertz
#Imu/Config/Gyroscope.hertz
#Accelerometer
#Accelerometer/Version.model
Hardware device model.
e.g. #Magnetometer/Version.model,Bno055
The model may have specific measurement characteristics which may be published if/as these are determined by Emteq.
#Accelerometer/Properties.hertzMax
Maximum configurable data-acquisition rate.
v0.6.x firmware does not provide full configurability of IMU data rate.
#Accelerometer/Properties.rawDivisor
CSV data is unprocessed by default and a scalar can be applied to produce normalised measurement in the specified unit.
The scalar divisor used to convert raw Accelerometer values to m/s^2
e.g. mss = accRaw / accelerationDivisor
#Accelerometer/Calibration.source
Origin of sensor-data calibration information.
Source | Value | Condition |
---|---|---|
None | 0 | No calibration source |
Factory | 1 | Calibration is applied from factory |
Staged | 2 | Calibration is determined by initiating a staged procedure being performed e.g. Accelerometer places stable on all 6-sides. |
Online | 3 | Calibration is determined online at runtime (background process) |
User | 4 | Calibration is determined by user-provided calibration sent to device |
#Accelerometer/Calibration.state
Condition/Maturity state of sensor-data calibration.
Source | Value | Condition |
---|---|---|
None | 0 | Indicates data as not calibrated, ‘potential' significant Bias or Offset @note is Source==None then user or factory calibration must be set (emteq internal) |
Minimal | 1 | Indicates data calibration has begun, reduced Bias or Offset |
Basic | 2 | Indicates data calibration is nearing maturity, significant confidence in removal of Offset or Bias |
Mature | 3 | Indicates data as fully calibrated, highest confidence in removal of Offset or Bias |
#Accelerometer/Calibration
Emteq internal information about the Calibration data for the device.
#Accelerometer/Config.hertz
The output-rate of the measurement data.
This applies to all data after this point in the data file but may be overridden by subsequent changes.
#Gyroscope
#Gyroscope/Version.model
Hardware device model.
e.g. #Gyroscope/Version.model,Bno055
The model may have specific measurement characteristics which may be published if/as these are determined by Emteq.
#Gyroscope/Properties.hertzMax
Maximum configurable data-acquisition rate.
v0.6.x firmware does not provide full configurability of IMU data rate.
#Gyroscope/Properties.rawDivisor
CSV data is unprocessed by default and a scalar can be applied to produce normalised measurement in the specified unit.
The scalar divisor used to convert raw Gyroscope values to degrees/s
e.g. degPerSecond= gyroRaw / gyroscopeDivisor
#Gyroscope/Calibration.source
Origin of sensor-data calibration information.
See #Accelerometer/Calibration.source for details of the source enumeration
#Gyroscope/Calibration.state
Condition/Maturity state of sensor-data calibration.
See #Accelerometer/Calibration.state for details of the 0-3 scale
#Gyroscope/Calibration
Emteq internal information about the Calibration data for the device.
#Gyroscope/Config.hertz
The output-rate of the measurement data.
This applies to all data after this point in the data file but may be overridden by subsequent changes.
#Magnetometer
#Magnetometer/Version.model
Hardware device model.
e.g. #Magnetometer/Version.model,Bno055
The model may have specific measurement characteristics which may be published if/as these are determined by Emteq.
#Magnetometer/Properties.hertzMax
Maximum configurable data-acquisition rate.
v0.6.x firmware does not provide full configurability of IMU data rate.
#Magnetometer/Properties.rawDivisor
CSV data is unprocessed by default and a scalar can be applied to produce normalised measurement in the specified unit.
The scalar divisor used to convert raw Magnetometer values to microTesla
microTesla = magRaw / magnetometerDivisor
#Magnetometer/Calibration.source
Origin of sensor-data calibration information.
See #Accelerometer/Calibration.source for details of the source enumeration
#Magnetometer/Calibration.state
Condition/Maturity state of sensor-data calibration.
See #Accelerometer/Calibration.state for details of the 0-3 scale
#Magnetometer/Calibration
Emteq internal information about the Calibration data for the device.
#Magnetometer/Config.hertz
The output-rate of the measurement data.
This applies to all data after this point in the data file but may be overridden by subsequent changes.
#Time
#Time/Seconds.referenceOffset
Data-time offset that may be added to Time
values to give a J2000 time value as Seconds since 00:00:00 01-01-2000 (J.2000 Epoch).
J2000 Timestamp can be converted to Unix-Timestamp by adding 946684800
e.g. unixTime = referenceOffset + 946684800
When #Time/Epoch is J2000
this offset will be 0.0
Conversion to Unix Timestamp may overflow if using 32-bit data types so overflow must be taken into consideration.
#Time/Seconds.unixOffset
Data-time offset that may be added to Time
values to give a Unix time value as Seconds since 00:00:00 01-01-1970 (Unix Epoch). e.g. unixTime = time + unixOffset
When #Time/Epoch is Unix
this offset will be 0.0
#Time/Epoch
The ‘Epoch' that is used for the Time field. The Epoch specifies the arbitrary fixed date from which all values are relative to.
Session
= Time at the start of the file is used as the Epoch.Time
field will count up from 0.0Unix
[default] = Unix Epoch will be used.Time
will be seconds since 00:00:00 01-01-1970J2000
= J2000 Epoch will be used.Time
will be seconds since 00:00:00 01-01-2000
Prior to CSV1.1.1
the epoch was Session
time. Since Dab2Csv v0.7.4
this can be confiugred while defaulting to Unix when not specified.
Irrespective of which Epoch is selected, #Time/Seconds.unixOffset can be used to adjust time to absolute Unix values.
Data-time at which the data recording began specified as Seconds since 00:00:00 01-01-1970 (Unix Epoch).
#Powerline
#Powerline/Config
{Documentation incomplete} [Introduced in v0.5.0]
Field Data
Frame#
Row index for human readable data references.
The Frame#
will start at 1 and increment +1 for each data record row
Frame#
may not map directly to Time, in general a fixed rate can be assumed but gaps in data can/do occur under certain criteria (See ‘AdsMiss & AdsLate’)
Time
Relative Time in Seconds at which data was measured in the device hardware.
This may be converted to J2000 or Unix time values, the offset values to apply are available from #Time/Seconds.referenceOffset or #Time/Seconds.unixOffset respectively.
The configured Epoch can is also specified in #Time/Epoch.
Since CSV1.1.1 the Epoch defaults to `Unix`, previously the `Session` Epoch was used for all CSV data files.
Faceplate
Faceplate/FaceState
Discrete OFF>ON face information indicating when the device is detected as being worn by a user.
State | Value | Condition |
---|---|---|
Error | -1 | Fit detection failed e.g. No-Face-Plate |
Off | 0 | No face contact detected |
On | 1 | Face contact detected |
Faceplate/FitState
Abstract continuous measurement of Mask ‘Fit' with higher values representing the ideal state of system performance/quality.
Average
should a minimum threshold to start an session. Lower-levels than this shows degradation in fit while higher values indicate good preferential fit.
State | Value | Condition |
---|---|---|
Failure | -1 | Fit detection failure e.g. No-Face-Plate or Sensor failure |
None | 0 | Not on-face |
Measuring | 1 | Fit detection failed e.g. No-Face-Plate |
Failing | 2 .. 3 | Minimal to detect face i.e. 3-4 pairs any contact |
Failing | 4 .. 5 | Minimal to detect face i.e. 5-6 pairs any contact |
Below-Average | 6 .. 7 | Basic function i.e. 3 pairs settled contact, 5-7 pairs full contact |
Average | 8 | General function i.e. 5 pairs settled contact, 7 pairs full contact |
Very-Good | 9 | Good on all sensors i.e. 7 pairs settled contact |
Excellent | 10 | Optimal on all sensors i.e. 7 pairs settled contact + Excellent impedance |
Perfect | 11 | Ideal sensor Impedance. Not possible on user-face. |
Faceplate/FitState.any#
Supplementary data counting number of electrodes which have any Contact on either electrode of the pair.
Removed as of #CSV1.1.0. See Emg/ContactStates
Faceplate/FitState.both#
Supplementary data counting the number of electrode-pairs which are both in contact.
Removed as of #CSV1.1.0. See Emg/ContactStates
Faceplate/FitState.settled#
Supplementary data counting the number of electrode pairs with settled contact.
Removed as of #CSV1.1.0. See Emg/ContactStates
Emg
Order and assignment of Leads may change based on hardware version or manual electrode positioning (specific hardware versions).
Please see #Emg/Properties.ids[] prior to reading EMG data.
Emg/ContactStates[0..6]
Discrete (OFF>ON>STABLE>SETTLED) contact information for each pair of EMG electrodes.
The fidelity of this signal depends on #Emg/Properties.contactMode as follows:
- contactMode is DC this provides per-electrode contact state
- contactMode is AC this provides per-pair electrode contact state (Derived from Emg/Contact)
There is no ContactState
for the reference electrodes on the Emteq MASK in currently released firmware.
[Faceplate/FitState](#faceplatefitstate) provides an simplified abstraction to determine EMG contact overall.
Binary Representation
The ContactState is a 8-bit value split into two nibbles (half-a-byte i.e 4-bits), one for the ‘Positive', and one for the Negative electrode contact respectively.
Emg/ContactStates [8-bits] | |
---|---|
NegativeContact [4-bits] | PositiveContact [4-bits] |
Each electrode contact can be one of the following states:
State | Binary-Nibble | Condition |
---|---|---|
Off | 0000 | Lifted - No skin contact |
On | 0001 | Contact - Initial, possibly intermittent skin contact |
Stable | 1000 | Not likely to change; firmly established |
Fault | 1110 | Fault-state - Indicates a faulty contact |
Settled | 1111 | Stable with Saturated filters indicating higher confidence in measurements Emg/Filtered and Emg/Amplitude |
Emg/Contact[0..6]
Impedance measurement of electrode-to-skin contact when #Emg/Properties.contactMode is AC mode.
The value may be converted to Ohms and to do so refer to the chapter on #Emg/Properties.contactToImpedanceDivisor
Emg/Raw[0..6]
Raw Analog signal from the EMG measurement device representing the device data in a bit-precise unmodified form i.e. No filtering stages have been performed
- All other EMG measurements are derived.
- Measurement rate is 2KHz for AC and 1KHz for DC contact-modes
The value may be converted to Volts and to do so refer to the chapter on #Emg/Properties.rawToVoltageDivisor
Emg/RawLift[0..6]
Supplementary data for Emteq Internal. This represents the AC contact mode signal (see #Emg/Properties.contactMode) and may be removed in future revision.
The value may be converted to Volts and to do so refer to the chapter on #Emg/Properties.rawToVoltageDivisor
Emg/Filtered[0..6]
Filtered EMG data to contain only in-band EMG measurements in the frequency range 100-450Hz
- 50Hz signal removed
- AC-Lift 500Hz signal removed
- Low frequency drift and movement-artifacts removed (*)
- High frequency noise removed
The value may be converted to Volts and to do so refer to the chapter on #Emg/Properties.rawToVoltageDivisor
Movement artifacts may occur in-band so are not suppressed as of <=v0.5 firmware and <=v9.3.8 hardware.
Emg/Amplitude[0..6]
Amplitude of the muscle EMG in-band signal acquired by a moving-window RMS over Emg/Filtered
The value may be converted to Volts and to do so refer to the chapter on #Emg/Properties.rawToVoltageDivisor
HeartRate
HeartRate/Average
Average beats-per-minute (BPM) of the cardiac cycle as measured from the Photoplethysmographic (PPG) sensor on the user's forehead.
This is updated at 1Hz in all firmware versions <= 0.5
Ppg
Ppg/Raw.ppg
Raw Photoplethysmographic (PPG) sensor reading which detects variation in blood volume within the skin of the user's forehead.
See HeartRate/Average where BPM is of direct interest
Ppg/Raw.proximity
Raw proximity sensor reading (see notes below)
As of <= v0.5 firmware the Proximity function output is not implemented. The Raw sensor will measure ambient incident light.
Faceplate/FaceState, Faceplate/FitState, and for granular information the Emg/ContactStates are more reliable measures of mask being worn.
Powerline
Powerline/Frequency
{Documentation incomplete} [Introduced in v0.5.0]
Imu
#Imu/
is deprecated as of CSV1.0.5
, removed in CSV1.1.x
Imu/Accelerometer.{x | y | z}
See #Accelerometer/Raw.{x | y | z}
Imu/Magnetometer.{x | y | z}
See #Magnetometer/Raw.{x | y | z}
Imu/Gyroscope.{x | y | z}
See #Gyroscope/Raw.{x | y | z}
Accelerometer/Raw.{x | y | z}
IMU sensor reading of linear-acceleration for the X, Y, and Z axes.
The orientation of X, Y, and Z axis are not defined by the Emteq system and must be calibrated for a user or session.
The value may be converted to m/s^2 and to do so refer to the chapter on #Accelerometer/Properties.rawDivisor
Magnetometer/Raw.{x | y | z}
IMU sensor reading of magnetic-field strength on the X, Y, and Z axes which can be used to derive absolute orientation or compensate for Gyroscopic drift.
The orientation of X, Y, and Z axis are not defined by the Emteq system and must be calibrated for a user or session.
The value may be converted to micro-Tesla and to do so refer to the chapter on #Magnemeter/Properties.rawDivisor
Gyroscope/Raw.{x | y | z}
IMU sensor reading of angular-velocity on the X, Y, and Z axes.
The orientation of X, Y, and Z axis are not defined by the Emteq system and must be calibrated for a user or session.
The value may be converted to degrees/s and to do so refer to the chapter on #Gyroscope/Properties.rawDivisor
Online Documentation
The latest version of the emteqPRO CSV specification document can be accessed from the flowing link:
https://support.emteqlabs.com/data/CSV.html
Format Revisions
Refer to #Format/Version field for identifying the revision of the CSV specification that a file uses.
CSV1.0.1
- Fixed CSV heading #Imu/Accelerometer for
.Xx
to.x
CSV1.0.2
- Added #Time/Seconds.referenceOffset which represents the time recording starts as Seconds since 01-01-2000 (J.2000 Epoch)
CSV1.0.3
- Added #Emg/Calibration[].liftCurrent which represents the calibrated AC lift current bias-offset for each EMG channel.
- Added #Firmware/Bootloader.buildTag which contains the version of Bootloader the device has programmed
CSV1.0.4
- #Imu/Properties.accelerometerHertzMax [Introduced in v0.5.0]
- #Imu/Properties.magnetometerHertzMax [Introduced in v0.5.0]
- #Imu/Properties.gyroscopeHertzMax [Introduced in v0.5.0]
- #Imu/Config/Accelerometer.hertz [Introduced in v0.5.0]
- #Imu/Config/Magnetometer.hertz [Introduced in v0.5.0]
- #Imu/Config/Gyroscope.hertz [Introduced in v0.5.0]
- #Powerline/Config {Documentation incomplete} [Introduced in v0.5.0]
- Powerline/Frequency {Documentation incomplete} [Introduced in v0.5.0]
CSV1.0.5
- #Imu deprecated for removal by CSV1.1x
- Added #File/Normalised
- Added #File/Source
- Added #Format/Deprecate
- Added #Accelerometer
- Added #Magnetometer
- Added #Gyroscope
- Added #Pressure {Documentation incomplete}
- Added ‘unit' as second data element of
*/Properties.*Divisor
fields.
CSV1.0.6
- Added #Stream/Generator
- Added #Stream/Stream
CSV1.0.7
- Correct
[]
position in#Emg/Calibration.liftCurrent[]
- Add
FLX
prefix onfaceplate/Version.serial
- Line-endings as
LF
(/n) instead ofCR+LF
to reduce file size and standardize Linux compatibility
CSV1.0.8
Internal, see #CSV1.1.0
CSV1.1.0
- Added #Time/Seconds.unixOffset (Previewed as CSV1.0.8)
- Removed deprecation warning for obsolete
Imu/*
(Present since CSV1.0.5) Imu/*
comment fields removed (Deprecated since CSV1.0.5)Imu/*
field headings renamed to their respectiveAccelerometer/Raw
,Magnetometer/Raw
, andGyroscope/Raw
(Rename raised since CSV1.0.5)- Removed
Faceplate/FitState.any#
,Faceplate/FitState.both#
, andFaceplate/FitState.settled#
where Emg/ContactStates shall be used instead - Fixed
CSV1.1.0
Emg/ContactState
should be Emg/ContactStates (with ‘s') to be in-line global schema
CSV1.1.1
- Added #Time/Epoch meta data