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)
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)
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
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()
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)
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)
}) ] 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')
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()
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)
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
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