Switch to unified view

a b/4-Models/autoECG-tensorflow-keras/ecg_simulation.py
1
#!/usr/bin/env python
2
# coding: utf-8
3
4
# In[5]:
5
6
7
import neurokit2 as nk
8
import numpy as np
9
import pandas as pd
10
import parameters as para
11
12
13
# In[26]:
14
15
16
def simulation(normal_N,abnormal_N, save_params = False):
17
    normal_data = []
18
    normal_params = []
19
    print('Creating normal dataset')
20
    for i in range(normal_N):
21
        ti = np.random.normal(para.mu_t_1, para.sigma_t_1)
22
        ai = np.random.normal(para.mu_a_1, para.sigma_a_1)
23
        bi = np.random.normal(para.mu_b_1, para.sigma_b_1)
24
        hr = np.random.normal(para.mu_hr_1, para.sigma_hr_1)
25
        noise = np.random.uniform(low=para.min_noise_1, high=para.max_noise_1)
26
        ecgs, _ = nk.ecg_simulate(duration=para.duration*2, sampling_rate=para.sampling_rate, noise=noise, Anoise=para.Anoise, heart_rate=hr, gamma=para.gamma, ti=ti, ai=ai, bi=bi)
27
        ecgs = np.array(ecgs)
28
        start_i = np.random.randint(len(ecgs[0])//4, len(ecgs[0])//2)
29
        normal_data.append(ecgs[:,start_i:start_i+para.sampling_rate*para.duration])
30
        normal_params.append({'ti':ti, 'ai':ai, 'bi':bi, 'hr':hr, 'noise':noise, 'gamma': para.gamma})
31
32
    abnormal_data = []
33
    abnormal_params = []
34
    print('Creating abnormal dataset')
35
    for i in range(abnormal_N):
36
        ti = np.random.normal(para.mu_t_2, para.sigma_t_2)
37
        ai = np.random.normal(para.mu_a_2, para.sigma_a_2)
38
        bi = np.random.normal(para.mu_b_2, para.sigma_b_2)
39
        hr = np.random.normal(para.mu_hr_2, para.sigma_hr_2)
40
        noise = np.random.uniform(low=para.min_noise_2, high=para.max_noise_2)
41
        ecgs, _ = nk.ecg_simulate(duration=para.duration*2, sampling_rate=para.sampling_rate, noise=noise, Anoise=para.Anoise, heart_rate=hr, gamma=para.gamma, ti=ti, ai=ai, bi=bi)
42
        ecgs = np.array(ecgs)
43
        start_i = np.random.randint(len(ecgs[0])//4, len(ecgs[0])//2)
44
        abnormal_data.append(ecgs[:,start_i:start_i+para.sampling_rate*para.duration])
45
        abnormal_params.append({'ti':ti, 'ai':ai, 'bi':bi, 'hr':hr, 'noise':noise, 'gamma': para.gamma})
46
47
    labels = np.array([0]*len(normal_data) + [1]*len(abnormal_data))
48
    permutation = np.random.permutation(len(labels))
49
    data = np.array(normal_data+abnormal_data)
50
    data_params = np.array(normal_params+abnormal_params)
51
    labels = labels[permutation]
52
    data = data[permutation]
53
    data_params = data_params[permutation]
54
55
    np.save('sim_ecg_data', data) # save ECG data
56
    np.save('sim_ecg_labels', labels) # save label
57
    if (save_params):
58
        np.save('sim_ecg_params',data_params) # save parameters for each ecg sample (12,2500)
59