Esempio n. 1
0
def main():
    ## Run biosppy
    from biosppy import storage
    from biosppy.signals import ecg

    # load raw ECG signal
    signal, mdata = storage.load_txt('./BioSPPy/examples/ecg.txt')

    # process it and plot
    out = ecg.ecg(signal=signal, sampling_rate=1000., show=True)
Esempio n. 2
0
def upload_and_analyze(request):
    user = User.objects.get(username=request.user)
    id_user = user.id
    if request.method == 'POST':
        formulaire = forms.Form(request.POST, request.FILES)
        print(request.FILES['dataset'])
        if formulaire.is_valid():
            data_to_analyze = DataToAnalyze()
            data_to_analyze.user = id_user
            data_to_analyze.dataset = request.FILES['dataset']
            data_to_analyze.save()
            #Faire l'analyse, affichage des graphes et tout le tralala ici
            signal, mdata = storage.load_txt(
                os.path.join(BASE_DIR,
                             'media/' + str(data_to_analyze.dataset)))
            out = ecg.ecg(signal=signal, sampling_rate=1000., show=True)
            #return redirect(home)
    return redirect(home)
Esempio n. 3
0
def test_extract_beats(data_path):
    signal, mdata = load_txt(data_path)
    logging.info("--------------------------------------------------")
    logging.info("载入信号-%s, 长度 = %d " % (data_path, len(signal)))
    fs = 360  # 信号采样率 360 Hz
    logging.info("调用 hamilton_segmenter 进行R波检测 ...")
    tic = time.time()
    rpeaks = ecg.hamilton_segmenter(signal, sampling_rate=fs)
    toc = time.time()
    logging.info("完成. 用时: %f 秒. " % (toc - tic))
    rpeaks = rpeaks[0]

    heart_rate = 60 / (np.mean(np.diff(rpeaks)) / fs)
    # np.diff 计算相邻R峰之间的距离分别有多少个采样点,np.mean求平均后,除以采样率,
    # 将单位转化为秒,然后计算60秒内可以有多少个RR间期作为心率
    logging.info("平均心率: %.3f / 分钟." % (heart_rate))

    win_before = 0.2
    win_after = 0.4
    logging.info("根据R波位置截取心拍, 心拍前窗口:%.3f 秒 ~ 心拍后窗口:%.3f 秒 ..." \
                 % (win_before, win_after))
    tic = time.time()
    beats, rpeaks_beats = ecg.extract_heartbeats(signal, rpeaks, fs,
                                                 win_before, win_after)
    toc = time.time()
    logging.info("完成. 用时: %f 秒." % (toc - tic))
    logging.info("共截取到 %d 个心拍, 每个心拍长度为 %d 个采样点" % \
                 (beats.shape[0], beats.shape[1]))

    plt.figure()
    plt.grid(True)
    for i in range(beats.shape[0]):
        plt.plot(beats[i])
    plt.title(data_path)
    plt.show()
    return
Esempio n. 4
0
from scipy import signal
import numpy as np
from biosppy.signals import ecg
import matplotlib.pyplot as pl
from biosppy import storage
import pandas

y, mdata = storage.load_txt('./values.txt')
x, mdata = storage.load_txt('./tme.txt')
f = signal.resample(x=y, num=80000, t=x)

var = pandas.read_csv('anshul_02.csv')
x = np.array(var['time(milli)'])
y = np.array(var['Volt'])
sig = f[0] * 5
Fs = mdata['sampling_rate']
out = ecg.ecg(signal=sig, sampling_rate=Fs, show=True)

r_peak = out[2]  #stores

print(out[2])

f_dash, Pxx_den = signal.welch(sig)
print(f_dash.shape, Pxx_den.shape)
pl.semilogy(f_dash, Pxx_den)
# pl.ylim([0.5e-3, 1])
# pl.plot(f_dash, Pxx_den)
pl.xlabel('frequency [Hz]')
pl.ylabel('PSD [V**2/Hz]')
pl.show()
Esempio n. 5
0
import numpy as np
import pylab as pl
from biosppy import storage
signal, mdata = storage.load_txt('./ningen.txt')
Fs = mdata['sampling_rate']
N = len(signal)  # number of samples
T = (N - 1) / Fs  # duration
ts = np.linspace(0, T, N, endpoint=False)  # relative timestamps
pl.plot(ts, signal, lw=2)
pl.grid()
pl.show()

from biosppy.signals import ecg
out = ecg.ecg(signal=signal, sampling_rate=Fs, show=True)
Esempio n. 6
0
from biosppy import storage
from biosppy.signals import ecg

import numpy as np

signal, mdata= storage.load_txt('ecg.txt')
out = ecg.ecg(signal = signal, sampling_rate=1000, show=True)
Esempio n. 7
0
        })
    ]

    for i in patients:
        userList.append(dbClient.patients.insert_one(i).inserted_id)

    return userList


path = "./python_src/Files/"
fileDir = os.listdir(path)

ids = setUsers()

count = 0
for i in fileDir:
    for j in os.listdir(path + i + "/"):
        count += 1

        signal, mdata = storage.load_txt(path + i + "/" + j)
        mdata['data'] = signal.tolist()
        mdata["userId"] = ids[count % 2 == 0]
        mdata["title"] = j[0:-4]
        mdata["type"] = i

        print("sended to database by id {}".format(
            dbClient.exams.insert_one(mdata).inserted_id))

    count = 0
    print("folder {} done".format(i))
import numpy as np
from biosppy import storage
from biosppy.signals import ecg
import matplotlib.pyplot as plt
from biosppy.signals import emg

signal, mdata = storage.load_txt('ecgsignal.txt')
#Fs = mdata['sampling_rate']
Fs = int(input('What is the operating frequency?'))
if (Fs > 1500):
    print('Tachycardia')
elif (Fs < 1000):
    print('Bradycardia')
else:
    print('Normal Heart Beat')
N = len(signal)  # number of samples
T = (N - 1) / Fs  # duration
ts = np.linspace(0, T, N, endpoint=False)  # relative timestamps
plt.figure(1)
plt.plot(ts, signal, lw=2)
plt.xlabel('Time(s)')
plt.ylabel('Amplitude')
plt.title('Raw ECG Signal')
plt.grid()
plt.show()

signal, mdata = storage.load_txt('ecgsignal.txt')
out = ecg.ecg(signal=signal, sampling_rate=Fs, show=True)

#EMG Signal coding
signal2, mdata2 = storage.load_txt('emg.txt')
Esempio n. 9
0
import numpy as np
import pylab as pl
from biosppy import storage

signal, mdata = storage.load_txt('./examples/ecg.txt')
Fs = mdata['sampling_rate']
N = len(signal)  # number of samples
T = (N - 1) / Fs  # duration
ts = np.linspace(0, T, N, endpoint=False)  # relative timestamps
pl.plot(ts, signal, lw=2)
pl.grid()
pl.show()
Esempio n. 10
0
import time
import logging
from biosppy.storage import load_txt
from biosppy.signals import ecg
import matplotlib.pyplot as plt

logging.basicConfig(level=logging.DEBUG, 
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

signal_path = "./data/ecg_records_117.txt"
ann_path = "./data/ecg_ann_117.txt"

logging.info("--------------------------------------------------")
signal, _ = load_txt(signal_path)
logging.info("载入信号-%s, 长度 = %d. " % (signal_path, len(signal)))
ann, _ = load_txt(ann_path)
logging.info("载入R峰位置人工标记, 共 %d 个R峰." % (len(ann)))

fs = 360  # 信号采样率 360 Hz
logging.info("调用 hamilton_segmenter 进行R波检测 ...")
tic = time.time()
rpeaks = ecg.hamilton_segmenter(signal, sampling_rate=fs)
toc = time.time()
logging.info("完成. 用时: %f 秒. " % (toc - tic))
rpeaks = rpeaks[0]

logging.info("使用compare_segmentation对比算法结果与人工标记 ...")
tic = time.time()
eval_results = ecg.compare_segmentation(ann, rpeaks, fs, tol=0.02)
Esempio n. 11
0
import json
import numpy as np
from biosppy import storage
from biosppy.signals import ecg


# load raw ECG signal
signal, mdata = storage.load_txt('python_src/Files/1 NSR/100m (3).txt')

rate = mdata['sampling_rate']

out = ecg.ecg(signal=signal, sampling_rate=rate, show=False)


class NDArrayEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.ndarray):
            return obj.tolist()
        return json.JSONEncoder.default(self, obj)


json_str = json.dumps({'test': out["templates"], "time" : out["ts"], "filtered" : out['filtered']}, cls=NDArrayEncoder)

print(json_str)

# f = 1/T
from biosppy import storage
from biosppy.signals import ecg
import numpy as np
from pylab import * 


import matplotlib.pyplot as plt
from scipy.fftpack import fft, ifft

from scipy import signal as sg
from scipy.signal import remez
from scipy.signal import freqz
from scipy.signal import lfilter

signal, mdata = storage.load_txt('ecg.txt')
Fs = mdata['sampling_rate']
N = len(signal)  # number of samples
T = (N - 1) / Fs  # duration
ts = np.linspace(0, T, N, endpoint=False)  # relative timestamps
plt.figure(1)
plt.title('ECG Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.xlim(0,5)
plt.grid()
plt.plot(ts,signal,lw=2)



ftsignal = fft(signal)
ftsignal = abs(ftsignal) ## to get the absolute part of the fft transform
Esempio n. 13
0
def test_rpeaks_simple(data_path):
    signal, mdata = load_txt(data_path)
    logging.info("--------------------------------------------------")
    logging.info("载入信号-%s, 长度 = %d " % (data_path, len(signal)))
    fs = 360  # 信号采样率 360 Hz
    logging.info("调用 christov_segmenter 进行R波检测 ...")
    tic = time.time()
    rpeaks = ecg.christov_segmenter(signal, sampling_rate=fs)
    toc = time.time()
    logging.info("完成. 用时: %f 秒. " % (toc - tic))
    # 以上这种方式返回的rpeaks类型为biosppy.utils.ReturnTuple, biosppy的内置类
    logging.info("直接调用 christov_segmenter 返回类型为 " + str(type(rpeaks)))

    # 得到R波位置序列的方法:
    # 1) 取返回值的第1项:
    logging.info("使用第1种方式取R波位置序列 ... ")
    rpeaks_indices_1 = rpeaks[0]
    logging.info("完成. 结果类型为 " + str(type(rpeaks_indices_1)))
    # 2) 调用ReturnTuple的as_dict()方法,得到Python有序字典(OrderedDict)类型
    logging.info("使用第2种方式取R波位置序列 ... ")
    rpeaks_indices_2 = rpeaks.as_dict()
    #    然后使用说明文档中的参数名(这里是rpeaks)作为key取值。
    rpeaks_indices_2 = rpeaks_indices_2["rpeaks"]
    logging.info("完成. 结果类型为 " + str(type(rpeaks_indices_2)))

    # 检验两种方法得到的结果是否相同:
    check_sum = np.sum(rpeaks_indices_1 == rpeaks_indices_2)
    if check_sum == len(rpeaks_indices_1):
        logging.info("两种取值方式结果相同 ... ")
    else:
        logging.info("两种取值方式结果不同,退出 ...")
        sys.exit(1)

    # 与 christov_segmenter 接口一致的还有 hamilton_segmenter
    logging.info("调用接口一致的 hamilton_segmenter 进行R波检测")
    tic = time.time()
    rpeaks = ecg.hamilton_segmenter(signal, sampling_rate=fs)
    toc = time.time()
    logging.info("完成. 用时: %f 秒. " % (toc - tic))
    rpeaks_indices_3 = rpeaks.as_dict()["rpeaks"]
    # 绘波形图和R波位置
    num_plot_samples = 3600
    logging.info("绘制波形图和检测的R波位置 ...")
    sig_plot = signal[:num_plot_samples]
    rpeaks_plot_1 = rpeaks_indices_1[rpeaks_indices_1 <= num_plot_samples]
    plt.figure()
    plt.plot(sig_plot, "g", label="ECG")
    plt.grid(True)
    plt.plot(rpeaks_plot_1,
             sig_plot[rpeaks_plot_1],
             "ro",
             label="christov_segmenter")
    rpeaks_plot_3 = rpeaks_indices_3[rpeaks_indices_3 <= num_plot_samples]
    plt.plot(rpeaks_plot_3,
             sig_plot[rpeaks_plot_3],
             "b^",
             label="hamilton_segmenter")
    plt.legend()
    plt.title(data_path)
    plt.show()
    logging.info("完成.")
    return