コード例 #1
0
def vop_seg_derivada(tiempo_ecg, ecg, tiempo_pulso1, pulso1, tiempo_pulso2, pulso2, distancia):
    #~~~~~~~~~~~~~~~~~~~~~~~~~Senales ECG ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    coef_num = 51
    f_cut = 0.034 #  Frecuencia de corte 60 Hz
    coef = signal.firwin(coef_num, f_cut, window='hamming',nyq=1800)
    f_ecg = window_filtering.Filter(ecg, coef_num, coef);

    # Identificación de puntos de la Onda ECG:
    pos_ecg = maximos_ecg(f_ecg)

    #~~~~~~~~~~~~~~~~~~~~Senal de pulso 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    coef_num = 15
    f_cut = 0.01875
    coef = signal.firwin(coef_num, f_cut, window='hamming',nyq=900)
    f_pulso1 = window_filtering.Filter(pulso1, coef_num, coef);
    # Identificación de los puntos de la onda de pulso1
    pos_pulso1 = seg_derivada_maxima(tiempo_pulso1, f_pulso1, tiempo_ecg[pos_ecg])

    #~~~~~~~~~~~~~~~~~~~~Senal de pulso 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    f_pulso2 = window_filtering.Filter(pulso2, coef_num, coef);
    # Identificación de los puntos de la onda de pulso1
    pos_pulso2 = seg_derivada_maxima(tiempo_pulso2, f_pulso2, tiempo_ecg[pos_ecg])

    # Cálculo del tiempo de tránsito:
    tt = transit_time(tiempo_ecg[pos_ecg], tiempo_pulso1[pos_pulso1], tiempo_pulso2[pos_pulso2])


    vop = []
    for k in tt:
        vop.append(distancia / k)
    vop = np.array(vop)
    return f_ecg, f_pulso1, f_pulso2, pos_ecg, pos_pulso1, pos_pulso2, vop
コード例 #2
0
    def firFilter(self, cutoff=50, numtaps=31, pass_zero=True, fs=1800):
        """"This module process the signal with a low pass fir filter (hamming window).

        :param  cutoff      Cut off frequency in Hz.
        :param  numtaps     Number of coeficients of the fir filter
        :param  pass_zero   Should be always True for being a low pass filter
        :param  fs          Sampling frecuency in Hz.

        """

        # Calculating nyquist frequency, also know as folding frequency:
        nyq = int(fs / 2)

        # Scaling the cutoff frequency to the nyquist frequency:
        if type(cutoff) == type([]):
            cutoff = [(float(c) / nyq) for c in cutoff]
        else:
            cutoff = cutoff / float(nyq)

        # Fir coeficient generation:
        ventana = signal.firwin(numtaps=numtaps,
                                cutoff=cutoff,
                                pass_zero=pass_zero,
                                nyq=1)

        # Sinal filtering:
        self.ecg = window_filtering.Filter(self.ecg, numtaps, ventana)
        return self
コード例 #3
0
def seg_derivada_maxima(tiempos_original, original, tiempos_ecg):
    # Procesando la señal de pulso a una frecuencia de 20 Hz
    coef_num = 15
    f_cut = 0.0111
    delay = (coef_num - 1)/2
    deriv_p = signal.firwin(coef_num, f_cut, window='hamming',nyq=1800)
    f_orig = window_filtering.Filter(original, coef_num, deriv_p);

    #~~~~~~~~~~~~~~~~~~~~~Primera derivada~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # Se deriva la señal para obtener la primera derivada:
    pri_deriv = np.diff(original)
    coef_num = 21
    f_cut = 0.1
    deriv_p = signal.firwin(coef_num, f_cut, window='hamming',nyq=800)
    f_pri_deriv = window_filtering.Filter(pri_deriv, coef_num, deriv_p);

    #~~~~~~~~~~~~~~~~~~~~~Segunda derivada~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    seg_deriv = np.diff(f_pri_deriv)
    f_seg_deriv = window_filtering.Filter(seg_deriv, coef_num, deriv_p);

    ## Identificación de los puntos de la onda de pulso2:
    posPuntMaxP1 = maximos_num(tiempos_original, f_seg_deriv, tiempos_ecg)

    #return posPuntMaxP1, puntMaxP1, f_orig, pri_deriv, f_pri_deriv

    puntMaxP1 = f_seg_deriv[posPuntMaxP1]

    rangTol = 0.3
    valMin = np.median(puntMaxP1) * (1 - rangTol)
    valMax = np.median(puntMaxP1) * (rangTol + 1)
    # Ubicando los puntos que no están en el rango de tolerancia:
    eliPuntos = np.where( (puntMaxP1 <= valMin) | (puntMaxP1 >= valMax) )
    # Eliminando puntos y sus posiciones fuera del rango:
    puntMaxP1 = np.delete(puntMaxP1, eliPuntos)
    posPuntMaxP1 = np.delete(posPuntMaxP1, eliPuntos)

    intPosPuntosMax = []

    for x in posPuntMaxP1:
        intPosPuntosMax.append(int(x))

    return intPosPuntosMax
コード例 #4
0
 def __firFilter(self, signal1, numtaps, cutoff, pass_zero, nyq):
     ventana = signal.firwin(numtaps=numtaps,
                             cutoff=cutoff,
                             pass_zero=pass_zero,
                             nyq=nyq)
     return window_filtering.Filter(signal1, numtaps, ventana)