diff --git a/commons/catalogue/unit.avsc b/commons/catalogue/unit.avsc index 0a4585d3..d55276f4 100644 --- a/commons/catalogue/unit.avsc +++ b/commons/catalogue/unit.avsc @@ -8,6 +8,7 @@ "CALORIES_PER_SEC", "CELSIUS", "DEGREE", + "MILLI_G", "G", "KILO_OHM", "LUX", @@ -21,6 +22,7 @@ "RMSSD_IN_MILLI_SEC", "SECOND", "MICRO_VOLT", + "VOLT", "UNKNOWN" ] } diff --git a/commons/passive/polar/polar_acceleration.avsc b/commons/passive/polar/polar_acceleration.avsc new file mode 100644 index 00000000..3839db43 --- /dev/null +++ b/commons/passive/polar/polar_acceleration.avsc @@ -0,0 +1,14 @@ +{ + "namespace": "org.radarcns.passive.polar", + "type": "record", + "name": "PolarAcceleration", + "doc": "Accelerometer data. Axis specific acceleration data in mG.", + "fields": [ + { "name": "deviceName", "type": "string", "doc": "Polar device name." }, + { "name": "time", "type": "double", "doc": "Device timestamp in UTC (ns)." }, + { "name": "timeReceived", "type": "double", "doc": "Device receiver timestamp in UTC (s)." }, + { "name": "x", "type": "int", "doc": "Acceleration in the x-axis (mG)." }, + { "name": "y", "type": "int", "doc": "Acceleration in the y-axis (mG)." }, + { "name": "z", "type": "int", "doc": "Acceleration in the z-axis (mG)." } + ] +} diff --git a/commons/passive/polar/polar_battery_level.avsc b/commons/passive/polar/polar_battery_level.avsc new file mode 100644 index 00000000..ccb3c3c7 --- /dev/null +++ b/commons/passive/polar/polar_battery_level.avsc @@ -0,0 +1,12 @@ +{ + "namespace": "org.radarcns.passive.polar", + "type": "record", + "name": "PolarBatteryLevel", + "doc": "Device battery level.", + "fields": [ + { "name": "deviceName", "type": "string", "doc": "Polar device name." }, + { "name": "time", "type": "double", "doc": "Device timestamp in UTC (s)." }, + { "name": "timeReceived", "type": "double", "doc": "Device receiver timestamp in UTC (s)." }, + { "name": "batteryLevel", "type": "float", "doc": "Battery level from 0 to 1." } + ] +} diff --git a/commons/passive/polar/polar_ecg.avsc b/commons/passive/polar/polar_ecg.avsc new file mode 100644 index 00000000..3f8f4d96 --- /dev/null +++ b/commons/passive/polar/polar_ecg.avsc @@ -0,0 +1,12 @@ +{ + "namespace": "org.radarcns.passive.polar", + "type": "record", + "name": "PolarEcg", + "doc": "Data from ECG in yV.", + "fields": [ + { "name": "deviceName", "type": "string", "doc": "Polar device name." }, + { "name": "time", "type": "double", "doc": "Device timestamp in UTC (ns)." }, + { "name": "timeReceived", "type": "double", "doc": "Device receiver timestamp in UTC (s)." } , + { "name": "ecgSignal", "type": "int", "doc": "ECG signal (yV)." } + ] +} diff --git a/commons/passive/polar/polar_heart_rate.avsc b/commons/passive/polar/polar_heart_rate.avsc new file mode 100644 index 00000000..1a4466eb --- /dev/null +++ b/commons/passive/polar/polar_heart_rate.avsc @@ -0,0 +1,16 @@ +{ + "namespace": "org.radarcns.passive.polar", + "type": "record", + "name": "PolarHeartRate", + "doc": "Heart rate as beats per minute.", + "fields": [ + { "name": "deviceName", "type": "string", "doc": "Polar device name." }, + { "name": "time", "type": "double", "doc": "Device receiver timestamp in UTC (ns)." }, + { "name": "timeReceived", "type": "double", "doc": "Device receiver timestamp in UTC (s)." }, + { "name": "heartRate", "type": "int", "doc": "Heart rate (bpm)." }, + { "name": "rrsMs", "type": {"type": "array", "items": "int"}, "doc": "Data for rrsMs." }, + { "name": "rrAvailable", "type": "boolean", "doc": "Data for rrAvailable." }, + { "name": "contactStatus", "type": "boolean", "doc": "Data for contactStatus." }, + { "name": "contactStatusSupported", "type": "boolean", "doc": "Data for contactStatusSupported." } + ] +} diff --git a/commons/passive/polar/polar_pp_interval.avsc b/commons/passive/polar/polar_pp_interval.avsc new file mode 100644 index 00000000..8c358b2c --- /dev/null +++ b/commons/passive/polar/polar_pp_interval.avsc @@ -0,0 +1,17 @@ +{ + "namespace": "org.radarcns.passive.polar", + "type": "record", + "name": "PolarPpInterval", + "doc": "PP interval representing cardiac pulse-to-pulse interval extracted from PPG signal.", + "fields": [ + { "name": "deviceName", "type": "string", "doc": "Polar device name." }, + { "name": "time", "type": "double", "doc": "Device timestamp in UTC (s)." }, + { "name": "timeReceived", "type": "double", "doc": "Device receiver timestamp in UTC (s)." }, + { "name": "blockerBit", "type": "boolean", "doc": "Data for blockerBit." }, + { "name": "errorEstimate", "type": "int", "doc": "Data for errorEstimate." }, + { "name": "heartRate", "type": "int", "doc": "Data for errorEstimate." }, + { "name": "ppInterval", "type": "int", "doc": "The duration (s) of the detected inter-beat interval (i.e., the distance in seconds from the previous beat)." }, + { "name": "skinContactStatus", "type": "boolean", "doc": "Data for skinContactStatus." }, + { "name": "skinContactSupported", "type": "boolean", "doc": "Data for skinContactSupported." } + ] +} diff --git a/commons/passive/polar/polar_ppg.avsc b/commons/passive/polar/polar_ppg.avsc new file mode 100644 index 00000000..c65efa6e --- /dev/null +++ b/commons/passive/polar/polar_ppg.avsc @@ -0,0 +1,15 @@ +{ + "namespace": "org.radarcns.passive.polar", + "type": "record", + "name": "PolarPpg", + "doc": "Data from PPG channels.", + "fields": [ + { "name": "deviceName", "type": "string", "doc": "Polar device name." }, + { "name": "time", "type": "double", "doc": "Device timestamp in UTC (ns)." }, + { "name": "timeReceived", "type": "double", "doc": "Device receiver timestamp in UTC (s)." } , + { "name": "ppg0", "type": "int", "doc": "PPG0." }, + { "name": "ppg1", "type": "int", "doc": "PPG1." }, + { "name": "ppg2", "type": "int", "doc": "PPG2." }, + { "name": "ambient", "type": "int", "doc": "Ambient channel representing the background noise caused by other light sources, so it can be used to remove the background noise from ppg channels." } + ] +} diff --git a/specifications/passive/polar-1.0.0.yml b/specifications/passive/polar-1.0.0.yml new file mode 100644 index 00000000..5622ef5c --- /dev/null +++ b/specifications/passive/polar-1.0.0.yml @@ -0,0 +1,48 @@ +#====================================== POLAR H10 or Vantage V3 device =====================================# +vendor: POLAR +model: GENERIC +version: 1.0.0 +app_provider: .polar.PolarProvider +data: + - type: ACCELEROMETER + sample_rate: + frequency: 50 + unit: MILLI_G + processing_state: RAW + topic: android_polar_acceleration + value_schema: .passive.polar.PolarAcceleration + - type: BATTERY + sample_rate: + dynamic: true + unit: PERCENTAGE + processing_state: RAW + topic: android_polar_battery_level + value_schema: .passive.polar.PolarBatteryLevel + - type: ECG + sample_rate: + dynamic: true + unit: VOLT + processing_state: RAW + topic: android_polar_ecg + value_schema: .passive.polar.PolarEcg + - type: PPG + sample_rate: + dynamic: true + unit: UNKNOWN + processing_state: RAW + topic: android_polar_ppg + value_schema: .passive.polar.PolarPpg + - type: HEART_RATE + sample_rate: + frequency: 1 + unit: BEATS_PER_MIN + processing_state: VENDOR + topic: android_polar_heart_rate + value_schema: .passive.polar.PolarHeartRate + - type: PULSE_TO_PULSE_INTERVAL + sample_rate: + dynamic: true + unit: SECOND + processing_state: VENDOR + topic: android_polar_pulse_to_pulse_interval + value_schema: .passive.polar.PolarPpInterval