def plotSignal(file_path, sample_from, sample_to): ''' plots the entire signal of specified file number Args: file_path (str): the location of file that needs to be displayed sample_from (int): start index of sample sample_to (int): end index of sample ''' # make signal for file specified by user signal, fields = getSignalInfo(file_path, sample_from, sample_to) xqrs = getXQRS(signal, fields) # plot waveforms wfdb.plot_items(signal=signal, ann_samp=[ xqrs.qrs_inds], title='Signal ' + file_path + ' from MIT-BIH Arrhythmia Database')
def segmentation(records, typeBeats): Normal = [] for e in records: signals, fields = wfdb.rdsamp(e, channels=[0]) # plot result wfdb.plot_items(signal=signals, fs=fields['fs'], title='') ann = wfdb.rdann(e, 'q1c') good = [typeBeats] ids = np.in1d(ann.symbol, good) imp_beats = ann.sample[ids] beats = (ann.sample) for i in imp_beats: beats = list(beats) j = beats.index(i) if (j != 0 and j != (len(beats) - 1)): x = beats[j - 1] y = beats[j + 1] diff1 = abs(x - beats[j]) // 2 diff2 = abs(y - beats[j]) // 2 Normal.append(signals[beats[j] - diff1:beats[j] + diff2, 0]) return Normal
def read_mit_fig(file): def smooth_line(y, fd): # fd - частота дискретизации W = fftfreq(y.size, 1 / fd) f_signal = rfft(y) cut_f_signal = f_signal.copy() cut_f_signal[(W < 0.25)] = 0 cut_f_signal[(W > 60)] = 0 cut_signal = irfft(cut_f_signal) return cut_signal plt.cla() record = wfdb.rdrecord(file) fig = wfdb.plot_items(signal=smooth_line(record.p_signal[:, 0], record.fs), title='V1', time_units='seconds', fs=record.fs, figsize=(10, 2), return_fig=True) #, ecg_grids='all') return fig
# awesome tutorial: https://www.youtube.com/watch?v=WyjGCEWU4zY&t=317s file = tkinter.filedialog.askopenfilename() file = file[:-4] n_samples = tkinter.simpledialog.askinteger('Number of samples', 'Type in the number of samples you want to be displayed (example: 3000, 6000, 10000 etc.)') #Define ecg record = wfdb.rdrecord(file, sampto=n_samples) ann = wfdb.rdann(file, 'dat', sampto=n_samples) #Filerecord file_record = record.__dict__ #print(file_record) wfdb.plot_items(signal=record.p_signal, title='ECG Signal',ann_samp=[ann.sample, ann.sample], time_units='samples', figsize=(10,4)) #Detect R-Peaks signal_slice = np.ndarray.flatten(record.p_signal[0:n_samples]) smooth_signal = signal.cspline1d(signal_slice, lamb=1000) #smoothing the signal (filtering) #r_peak_index = peakutils.indexes(smooth_signal, thres = 0.45, min_dist = 0.1) # first peak detection option peak_index = signal.find_peaks_cwt(smooth_signal, widths= np.arange(60,80)) # second peak detection option fig, ax = plt.subplots() ax.set_title('Detect R peak') ax.plot(signal_slice) p_min_distance = -20 # marking for p-wave example p_max_distance = -60
from codes.python import ecg_waveform_extractor as waveform import time as system_time from scipy import stats import warnings import termcolor as colored from math import* mit100 = DB2.patient_records[0] t_ecpu = np.asarray(mit100.annotated_t_waves_pos[0:7],dtype=int) wfdb.plot_items(signal = mit100.filtered_MLII[0:2000], ann_samp = [t_ecpu]) pre_rr_interval, post_rr_interval = pre_pos_rr_interval(mit100) rr_ten, rr_fifty, rr_all = rr_average_by_sample(pre_rr_interval, fifty = True) columns = len(mit100.segmented_beat_time[0]) + len(mit100.segmented_beat_1[0]) rows = 0 for patient in DB2.patient_records: rows += len(patient.segmented_beat_time) DBn2 = np.zeros((rows,columns),dtype=object) yn2 = np.zeros((rows,1), dtype=object)
qrs = extract(new_signal, rpeaks, d234, D3, fs, plot='false') rpeak = qrs['rpeak'] q_wave = qrs['q_wave'] s_wave = qrs['s_wave'] qrs_on = qrs['qrs_onset'] qrs_off = qrs['qrs_offset'] ano = wfdb.rdann('/home/han/S.Kom/Database/qtdb/sel100', 'pu0') ano_dictionary = ano.__dict__ ann_label = ano_dictionary['symbol'] ann = ano_dictionary['sample'] kamus = {'nilai': ann, 'label': ann_label} df = pd.DataFrame(kamus) df.to_csv(r'/home/han/S.Kom/Database/dataframe.csv') figure1 = wfdb.plot_items(raw_data, [ann]) #################### BATAS KODINGAN LAMA ######################### #p = p_peak(new_signal, d45, rpeaks, qrs_on, fs) t = t_peak(new_signal, d45, rpeak, qrs_on, qrs_off, fs) tmax = t['index_max45'] batas_kiri = t['kiri'] batas_kanan = t['kanan'] tmin = t['index_min45'] tmula = t['t'] longqt = [] for i in range(len(rpeaks) - 1): data_longqt = bazzet(qrs_on[i], tmin[i], rpeaks[i], rpeaks[i + 1], fs)