Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Nuestro objetivo es llevar a cabo un filtro que permita el paso a las frecuencias mayores que la
Baseline Wander, la cual se encuentra alrededor de los 0,5Hz y 1Hz.
Con el fin de entender perfectamente el funcionamiento del filtro, lo implementaremos de 3
formas distintas:
La función FIR1 nos implementa un filtro de respuesta finita al impulso, con una serie de coe-
ficientes necesarios. La principal desventaja de este filtrado reside en el número de muestras
necesarias para llevar a cabo su función:
Tal y como se vio en clase de teoría, es posible implementar el funcionamiento del filtro FIR a
partir del método de las ventanas, es decir, considerando las frecuencias en las que sí quiero es-
tudiar el sistema y las frecuencias en las que no. Para ello creamos una función cuyo cometido
es calcular el sistema:
Uso de la función y su comparación con los demás, para observar que la implementación de un
filtro IIR, aunque aumenta el coste computacional por darle la "vuelta" dos veces a la secuencia,
el número de coeficientes necesarios para filtrar la secuencia disminuye drásticamente. En
nuestro caso en particular, trabajaremos con simplemente 5 coeficientes:
1.4 Gráficas
• En la primera figura (1) observaremos la comparación entre el filtro Butterworth (en verde)
y la implementación del filtro FIR para 4 coeficientes distintos. Como podemos observar,
el filtro de Butterworth tiene una efectividad a la hora de eliminar frecuencias bajas muy
parecida a la del filtro FIR con 1884 coeficientes, habiendo usado 5 únicamente. Además,
gracias a la doble implementación del filtro IIR, la fase se mantiene nula, no como en el
caso del FIR.
• En esta siguiente figura (2) vemos la implementación del filtro manual con ventana de
Hamming para el suavizado. Tal y como vemos en la parte izquierda, tenemos la fre-
cuencia de corte a los 0.5Hz, mientras que a la derecha podemos ver cómo a los 0.3Hz
aproximadamente se produce el corte.
En esta sección compararemos las diferencias entre los filtros implementados en MatLab para
casos FIR (filter) y para casos IIR (filtfilt). En el segundo caso, como el propio nombre deja entr-
ever, se hace la inversión doble de la secuencia por ser un sistema IIR. Como comprobaremos
más tarde, esto tiene un efecto de retardo debido al coste computacional, pero sin la necesidad
de grandes cantidades de coeficientes.
En la imagen 3 vemos la comparación de ambas señales, la original en azul y la filtrada en
rojo. Tendremos un retraso debido a la frecuencia usada en el filtro. El código que implementa
la función detallada es el siguiente:
Vamos a "ensuciar" la ECG original con un ruido aleatorio senoidal con una frecuencia de 50Hz,
con el fin de simular el ruido de la línea eléctrica sobre la captación de la señal cardíaca. Sin
embargo, esta vez vamos a usar un método distinto para el filtrado (fórmula de la imagen 7).
Según se indica en la práctica, lo mejor es usar una función de transferencia con un par de
Figure 7: Extracto de apuntes teóricos del profesor J.M. Gorriz, respecto a la implementación
del filtro notch.
ceros conjugados cuyos polos se encuentren en la circunferencia unidad. Por otro lado, es
muy complicado diseñar un filtro LIT sin introducir oscilaciones indeseadas (efecto ringing), el
cual observaremos al aplicar el filtro ranura (notch) (ver en 8):
Este filtro corrige de forma muy precisa el error de ruido senoidal introducido, simulando el
de la red. Se puede ver al principio de cada secuencia el elemento "ringing" (ver detalle en 9),
debido a las oscilaciones por armónicos.
Listing 6: Adición de ruido a la ECG original y posterior filtrado con resonador de polos.
1 ecg_sample = ecg(1:1500);
2 t_50 = (0:length(ecg_sample)-1)/Fs;
3 noise_50_inv = 0.1*sin(2*pi.*t_50.*Fc50);
4 noise_50 = noise_50_inv’;
5
6 ecg_add50 = ecg_sample + noise_50;
7
8 wo = 2*pi*Fc50/Fs;
9 b_50 = [1 -2*cos(wo) 1];
10 a_50 = [1 -2*0.97*cos(wo) 0.97^2];
11 y_50 =filter(b_50,a_50,ecg_add50);
A partir de la función "ecg.m" vamos a llevar a cabo el estudio mostrado en la imagen (10).
Nuestro objetivo es hallar la señal del feto sin la señal de la madre. Para ello realizaremos
una simulación que seguirá los siguientes pasos:
• 4. Una vez tengamos la señal de la madre filtrada con la ruidosa del feto, tendríamos la
señal simulada total correspondiente al conjunto de todas las señales captadas.
• 5. A esta señal se le aplicará el filtro adaptativo LMS. Este filtro realiza una comparación
entre las señales de entrada, sacando por el step la señal del feto ruidosa filtrada (véase
16), extirpando la señal materna con ruido.
Listing 11: Uso del filtro adaptativo de tipo LMS para determinar la señal del feto.
1 adap = dsp.LMSFilter(’Length’,15,’StepSize’,0.00007);
2 ...
3 ECGmn_fr = step(Om) + step(Omn);
4 ECGntotal_fr = step(Hd,ECGmn_fr) + step(Of) + step(Ofn);
5 ...
6 [~,ECGntotal_sinmadre] = step(adap,ECGmn_fr,ECGntotal_fr);