|
ACC Sensor - Unit Conversion |
Tags | pre-process☁ACC☁conversion |
The OpenSignals outputted file formats contain raw data, so each sample has a digital unit.
In scientific terms it is recommended the use of specific units, like electric tension (V) or electric current (A). Each sensor that PLUX commercialise has a datasheet where a transfer function is mentioned for unit conversion be done.
The next lines are intended to explain how this conversion can be programmatically done.
In spite of the unit conversion procedure has some common steps applicable to all sensors, the current Jupyter Notebook is dedicated to the unit conversion procedure of signals acquired with Accelerometer sensor.
1 - Importation of the needed packages
# biosignalsnotebooks Python package with useful functions that support and complement the available Notebooks
import biosignalsnotebooks as bsnb
# Function used for creating a numpy array, where a mathematical operation can be applied to each entry in an easy and automatic way. On the other side, linspace, here will be used for generation of a time-axis.
from numpy import array, linspace
2 - Download of the sensor datasheet from our Support Page. ). In this case we are working with ACC, being our file located here.
3 - Extraction of the transfer function from the beginning of the second page
$ACC{(g)}$ - ACC value in g-force (g) | $ADC$ - Value sampled from the acquisition channel | $C_{min}$ - Minimum calibration value | $C_{max}$ - Maximum calibration value |
Quoting the description available on the sensor datasheet:
This sensor requires a calibration to provide reliable measurements. The resulting calibration values ($C_{min}$ and $C_{max}$) which are needed for the transfer function are determined by performing a very slow 360º rotation of the sensor around each axis to force the accelerometer to cross the gravity-imposed −1g and 1g
So, $C_{min}$ and $C_{max}$ are the minimum and maximum RAW values registered on each channel during the calibration procedure.
4 - Loading of data stored in biosignalsnotebooks own signal library
# Data loading
data, header = bsnb.load_signal("https://drive.google.com/open?id=1Tky7YNZ95VkFN3F2rxM6Fwf_x2YTMYmx", get_header=True)
In the following cell, some relevant information is stored inside variables. This relevant information includes the mac-address of the device, channel number and signal acquisition parameters such as resolution and sampling rate.
For a detailed explanation of how to access this info, the
"Signal Loading - Working with File Header"
Notebook should be consulted.
ch_X= "CH1" # Channel (X-axis)
ch_Y = "CH2" # Channel (Y-axis)
ch_Z= "CH3"# Channel (Z-axis)
sr = 1000 # Sampling rate
resolution = 16 # Resolution (number of available bits)
For our specific case (16 bits acquisition), the calibration values ($C_{min}$ and $C_{max}$) are:
c_min = 28000
c_max = 38000
Access to acquired signal samples and storage inside a new variable.
signal_X = data[ch_X]
signal_Y = data[ch_Y]
signal_Z = data[ch_Z]
5 - Final unit conversion (to g ) by applying the transfer function sample by sample
signal_X_ = ((array(signal_X) - c_min) / (c_max - c_min)) * 2 - 1
signal_Y_= ((array(signal_Y) - c_min) / (c_max - c_min)) * 2 - 1
signal_Z_ = ((array(signal_Z) - c_min) / (c_max - c_min)) * 2 - 1
6 - Time axis generation
time = bsnb.generate_time(signal_X_, sr)
Comparison between RAW and mV signal.
Similar Notebooks
, dedicated to the unit conversion of other sensors, are available in the following "conversion" section of
Notebooks Grouped by Tag page