--- a
+++ b/4-Models/autoECG-tensorflow-keras/ecg_simulation.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+# coding: utf-8
+
+# In[5]:
+
+
+import neurokit2 as nk
+import numpy as np
+import pandas as pd
+import parameters as para
+
+
+# In[26]:
+
+
+def simulation(normal_N,abnormal_N, save_params = False):
+    normal_data = []
+    normal_params = []
+    print('Creating normal dataset')
+    for i in range(normal_N):
+        ti = np.random.normal(para.mu_t_1, para.sigma_t_1)
+        ai = np.random.normal(para.mu_a_1, para.sigma_a_1)
+        bi = np.random.normal(para.mu_b_1, para.sigma_b_1)
+        hr = np.random.normal(para.mu_hr_1, para.sigma_hr_1)
+        noise = np.random.uniform(low=para.min_noise_1, high=para.max_noise_1)
+        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)
+        ecgs = np.array(ecgs)
+        start_i = np.random.randint(len(ecgs[0])//4, len(ecgs[0])//2)
+        normal_data.append(ecgs[:,start_i:start_i+para.sampling_rate*para.duration])
+        normal_params.append({'ti':ti, 'ai':ai, 'bi':bi, 'hr':hr, 'noise':noise, 'gamma': para.gamma})
+
+    abnormal_data = []
+    abnormal_params = []
+    print('Creating abnormal dataset')
+    for i in range(abnormal_N):
+        ti = np.random.normal(para.mu_t_2, para.sigma_t_2)
+        ai = np.random.normal(para.mu_a_2, para.sigma_a_2)
+        bi = np.random.normal(para.mu_b_2, para.sigma_b_2)
+        hr = np.random.normal(para.mu_hr_2, para.sigma_hr_2)
+        noise = np.random.uniform(low=para.min_noise_2, high=para.max_noise_2)
+        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)
+        ecgs = np.array(ecgs)
+        start_i = np.random.randint(len(ecgs[0])//4, len(ecgs[0])//2)
+        abnormal_data.append(ecgs[:,start_i:start_i+para.sampling_rate*para.duration])
+        abnormal_params.append({'ti':ti, 'ai':ai, 'bi':bi, 'hr':hr, 'noise':noise, 'gamma': para.gamma})
+
+    labels = np.array([0]*len(normal_data) + [1]*len(abnormal_data))
+    permutation = np.random.permutation(len(labels))
+    data = np.array(normal_data+abnormal_data)
+    data_params = np.array(normal_params+abnormal_params)
+    labels = labels[permutation]
+    data = data[permutation]
+    data_params = data_params[permutation]
+
+    np.save('sim_ecg_data', data) # save ECG data
+    np.save('sim_ecg_labels', labels) # save label
+    if (save_params):
+        np.save('sim_ecg_params',data_params) # save parameters for each ecg sample (12,2500)
+