File size: 1,705 Bytes
ff522d1
 
 
 
e2c21d9
 
ff522d1
 
 
 
 
 
e2c21d9
 
ff522d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import numpy as np
from scipy.signal import resample
from baseline_wander_removal import bw_remover
import pywt
# import matplotlib.pyplot as plt
import codecs

def normalize(sig):
    return 2*((sig-np.min(sig))/(np.max(sig)-np.min(sig)))

def prepare_all_leads(path):
    if path.endswith(".txt"):
        filecp = codecs.open(path, "r", encoding="base64")
        sig = np.loadtxt(filecp, delimiter=',', unpack=True, encoding=None)
    elif path.endswith(".npy"):
        sig = np.load(path, allow_pickle=True)
        x = pywt.wavedec(sig[0], 'db6', level=2)[0]
        y = pywt.wavedec(sig[1], 'db6', level=2)[0]
        z = pywt.wavedec(sig[2], 'db6', level=2)[0]
        # visualize_sig([x, y, z])
        return x[None, :], y[None, :], z[None, :]
    # return sig
    freq = sig.shape[1] // 60
    sig[0] = bw_remover(freq, sig[0])
    sig[1] = bw_remover(freq, sig[1])
    sig[2] = bw_remover(freq, sig[2])

    # visualize_sig(sig)
    sig_length = freq*2
    total_samples = sig[0].shape[0] // sig_length

    lead_1 = []
    lead_2 = []
    lead_3 = []
    for i in range(total_samples):
        x = sig[0][i*sig_length:(i+1)*sig_length]
        x = pywt.wavedec(x, 'db6', level=1)[0]
        x = resample(x, 259)
        x = normalize(x)
        lead_1.append(x)

        y = sig[1][i*sig_length:(i+1)*sig_length]
        y = pywt.wavedec(y, 'db6', level=1)[0]
        y = resample(y, 259)
        y = normalize(y)
        lead_2.append(y)

        z = sig[2][i*sig_length:(i+1)*sig_length]
        z = pywt.wavedec(z, 'db6', level=1)[0]
        z = resample(z, 259)
        z = normalize(z)
        lead_3.append(z)
    
    return np.asarray(lead_1), np.asarray(lead_2), np.asarray(lead_3)