tOLIet: Single-lead Thigh-based Electrocardiography Using Polimeric Dry Electrodes 1.0.0

File: <base>/Script/read_ecg_data.py (2,312 bytes)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
from biosppy import utils
import pandas as pd


def read_ecg(file,result):
    
    """ Preprocesses an ECG signal.

    Parameters
    ----------
    file : numpy.ndarray
        Raw ECG signal.
    result : numpy.ndarray
        Subject data extracted from the DataSet.csv file    
        
    Returns
    -------
    ID : numpy.ndarray 
    Age : numpy.ndarray 
    Weight:  numpy.ndarray 
    Height:numpy.ndarray 
    Gender:numpy.ndarray 
    Observations field:numpy.ndarray 
    A1 : numpy.ndarray 
        ECG signal extracted from sensor A1 (with flat electrode texture).
    A2 : numpy.ndarray 
        ECG signal extracted from sensor A2 (with sinusoidal electrode texture).   
    A3 : numpy.ndarray 
        ECG signal extracted from sensor A2 (with pyramidal electrode texture).
    A4 : numpy.ndarray 
        ECG signal extracted from sensor A4 (with trapezoidal electrode texture).
    """
    
    def convert_raw_mV(raw):
        sig=list(map(int,(raw)))     
        sig=np.subtract(1024, sig)
        sig=(np.divide(sig,1024.)-0.5)*(33/11)#Unit -mV
        return sig
    
    with open(file, "r") as f:
       aux = f.readlines()     
       
    signal = np.loadtxt(file)
     
    lista1=[str(x) for x in [int(x) for x in signal[:, 5]]] 
    A1=convert_raw_mV(lista1)
    lista2=[str(x) for x in [int(x) for x in signal[:, 6]]]
    A2=convert_raw_mV(lista2)
    lista3=[str(x) for x in [int(x) for x in signal[:, 7]]]
    A3=convert_raw_mV(lista3)
    lista4=[str(x) for x in [int(x) for x in signal[:, 8]]]
    A4=convert_raw_mV(lista4)
   
    args = (
        result[0][0],result[0][1],result[0][2],result[0][3],result[0][4],result[0][5],A1,A2,A3,A4)
    names = (
        "ID",
        "Age",
        "Weight ",
        "Height",
        "Gender",
        "Observations_field",
        "A1",
        "A2",
        "A3",
        "A4"
    )
    return utils.ReturnTuple(args, names)
     
if __name__ == "__main__":

    data_ecg=[]
    folder='ECG_EXP'
    df = pd.read_csv('DataSet.csv', sep=';')
    
    ind_files=utils.walktree(r''+folder+'', r'\.txt$');
    
    for i in ind_files:
        
        result = df[df['ID'].astype(str) == (utils.fileparts(i)[1])].values
        data_ecg.append(read_ecg(i,result))