def derivative_filter(ecg): # Make impulse response h = [-1, -2, 0, 2, 1] h = [x / 8 for x in h] # Apply filter ecg4 = np.convolve(ecg, h) ecg4 = np.roll(ecg4, -6) return normalizer.max_normalization(ecg4)
def moving_window_integration(ecg): # Make impulse response h = np.ones(31) h = np.array([x / 31 for x in h]) # Apply filter ecg6 = np.convolve(ecg, h) ecg6 = np.roll(ecg6, -15) return normalizer.max_normalization(ecg6)
def low_pass_filtering(ecg): # LPF (1-z^-6)^2/(1-z^-1)^2 b = [1, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 1] a = [1, -2, 1] # transfer function of LPF h_LP = lfilter(b, a, np.append([1], np.zeros(12))) ecg2 = np.convolve(ecg, h_LP) # cancel delay ecg2 = np.roll(ecg2, -6) return normalizer.max_normalization(ecg2)
def high_pass_filtering(ecg): # HPF = Allpass-(Lowpass) = z^-16-[(1-z^32)/(1-z^-1)] b = [ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ] a = [1, -1] # impulse response iof HPF h_HP = lfilter(b, a, np.append([1], np.zeros(32))) ecg3 = np.convolve(ecg, h_HP) # cancel delay ecg3 = np.roll(ecg3, -16) return normalizer.max_normalization(ecg3)
def squaring(ecg): ecg5 = np.square(ecg) return normalizer.max_normalization(ecg5)