You are on page 1of 10

PRCTICA 1: FILTRADO DE SEALES ECG

Introduccin Un trazo normal de un ciclo cardaco consta de una onda P, un complejo QRS y una onda T. Adems, en ms de un 50% de los casos tambin es posible que sea visible una pequea onda U. El voltaje de la lnea base del ECG tambin es conocido como lnea isoelctrica o lnea basal. Normalmente, la lnea isoelctrica es la porcin de trazo que sigue a la onda T y precede a la siguiente onda P. En la prctica, la seal electrocardiogrfica capturada es tan dbil que se encuentra muy contaminada con un zumbido de 50 Hz acoplado como interferencia y procedente de la red elctrica, no resultando totalmente eliminado por el amplificador diferencial de instrumentacin. Adems, la seal resulta mezclada con diversos artefactos de baja frecuencia generados como consecuencia de la respiracin del paciente y otras causas, que suelen estar comprendidos entre DC y 0.5 Hz. Por ltimo, aparece tambin una cierta cantidad de ruido blanco que se genera en el propio sistema amplificador.

Objetivos Se expone un ejemplo de filtrado completo de una seal ECG, que incluye un filtro notch para eliminar la interferencia de red de 50 Hz, un filtro paso alto que atena las variaciones de la lnea base provocadas por los artefactos de muy baja frecuencia,

Dpto. Electrnica. U.A.

Laboratorio de Instrumentacin Biomdica

seguido por un filtrado paso bajo que suaviza la seal al atenuar el ruido de alta frecuencia. Como ampliacin se propone disear otro tipo y tcnicas de filtrado para contrastar resultados con los aqu propuestos.

Proceso de trabajo Lectura y visualizacin del registro original El registro de la seal electrocardiogrfica se encuentra en el fichero llamado ecg1ms.dat, que contiene 33707 muestras float convertidas a ASCII y que podemos abrir con el bloc de notas para observar su contenido. Contiene dos columnas: la primera indica el nmero de muestra y la segunda el voltaje. La velocidad de muestreo con la que se obtuvo la seal fue de 1000 muestras por segundo. Una vez en Matlab y en el directorio donde se encuentran todos los ficheros de esta prctica, podemos cargar el registro de la seal ECG mediante el siguiente comando: >> load ecg1ms.dat; Antes de filtrar esta seal conviene que echemos un vistazo a la misma mediante un ploteo. Podemos observar lo fuertemente contaminada con ruido, especialmente zumbido de 50 Hz, que se encuentra la seal. >>figure(1) >>plot(ecg1ms(:,2)) >>title('Seal ECG capturada'); La seal anterior fue convertida con un ADC de 12 bits de resolucin y preamplificada con una ganancia de K=1000. La resolucin del ADC es dada por: ADCres = (Vhigh Vlow) / 212 = 0.002 volts con Vlow = -4.096 volts y Vhigh=4.096 volts. Por lo tanto, para reconstruir la seal original la ecuacin es:

ECGsal(n) =

ECGent(n) ADCres + Vlow K

El cdigo Matlab sera: figure(2) Fs=1000; %Frecuencia de muestreo 1000Hz Ts=1/Fs; % Suponemos que el ADC convierte a enteros sin signo digitos=12; Dpto. Electrnica. U.A. Laboratorio de Instrumentacin Biomdica

Vlow=-4.096; Vhigh=+4.096; ADCres=(Vhigh-Vlow)/(2^digitos); fprintf('La resolucin del ADC es %8.2f \n', ADCres); K=1000; %Ganancia del preamplificador % Reconstruimos la seal original ecg=( ecg1ms(:,2).*ADCres+Vlow)./K; % Las muestras estn espaciadas por una cantidad Ts en segundos tmax=( ecg1ms(end,1)- ecg1ms(1,1))*Ts tsec=0:Ts:tmax; figure(3) subplot(2,1,1) % Seal formateada ecgformat=ecg(1:length(tsec)); ecgformat=ecg.*1e3; grid on plot(tsec,ecgformat); xlabel('Tiempo (segundos)'); ylabel(' ECG mV'); title('Seal original') subplot(2,1,2) fftPlot(tsec,ecg); grid on; title('FFT monolateral'); La funcin que calcula la FFT monolateral toma como parmetros el tramo de tiempo y la seal a transformar. Para la FFT monolateral slo son necesarios la mitad de los coeficientes (son simtricos) y hay que escalarlos por un factor de (nmero de muestras)/2. Como resultado, plotea la magnitud de los coeficientes FFT. function [fss,halfASpect]=fftPlot(tsec,ecg) % Calcula la FFT de la seal muestreada fftSpect=fft(ecg); % el nmero de muestras es: nsamp=length(tsec); % Como los coeficientes de la FFT son simtricos, tomamos slo la mitad de ellos hindex=ceil(nsamp/2); halfSpect=zeros(1,hindex); halfSpect(1:hindex)=(nsamp/2)*fftSpect(1:hindex); % Los intervalos de frecuencia estn espaciados por deltaF % La FFT considera la seal como peridica. En nuestro caso la seal dura % tsec(end), aproximadamente 32 segundos deltaFs=1/tsec(end); fss=0:deltaFs:(hindex-1)*deltaFs; halfASpect=abs(halfSpect); plot(fss,halfASpect); xlabel('Frecuencia (Hz)');

Dpto. Electrnica. U.A.

Laboratorio de Instrumentacin Biomdica

ylabel('Magnitud FFT'); end El resultado obtenido lo vemos a continuacin:

Observando el espectro podemos apreciar que predomina una componente continua y un zumbido de 50 Hz que, a pesar de ser atenuado por el amplificador de instrumentacin, no pudo ser completamente eliminado. Existen, asimismo, otra serie de interferencias de origen diverso. Resulta importante mencionar las componentes prximas a 0.05 Hz, y que proceden del efecto capacitivo entre el electrodo y la piel.

Diseo del filtro FIR para eliminar la DC y el zumbido de 50 Hz

Primero procesaremos la seal mediante un filtro notch para eliminar la componente de 50Hz. Consultar en Matlab el funcionamiento de las funciones fir1 y filter, y luego comentar el significado de los parmetros aqu usados. El cdigo Matlab correspondiente es: clc figure(4) % Diseamos el filtro notch de 50 Hz y filtramos la seal % Frecuencia de Nyquist fsHalf=Fs/2; wl=48/fsHalf; wh=51/fsHalf; stop50=fir1(1536,[wl wh],'stop'); ecgno50=filter(stop50,1,ecg);

Dpto. Electrnica. U.A.

Laboratorio de Instrumentacin Biomdica

subplot(2,1,1) plot(tsec,ecgno50.*1e3,'r'); title('ECG sin zumbido de 50 Hz'); xlabel('Tiempo (segundos)'); ylabel('mV'); grid on subplot(2,1,2) fftPlot(tsec,ecgno50); title('FFT de la seal filtrada') grid on; fprintf('La componente de 50 Hz es atenuada %f veces \n',122.9);

En la siguiente figura vemos la seal y su espectro sin la componente de 50 Hz. El orden del filtro se eligi por prueba y error, comenzando por un orden bajo de 64 y subiendo hasta un orden de 1536 donde la componente de 50 Hz en el espectro FFT se redujo suficientemente (atenuada hasta 122.9 veces). Si el orden suba de 2000, aparte del coste computacional, la respuesta de fase se haca no lineal, distorsionando la forma de onda de salida. Se pide que el alumno obtenga con Matlab las respuestas (amplitud y fase) del filtro notch aqu empleado y el de otro de orden 2048. Para ello, usar el comando freqz.

******* VOY POR AQU ***************

Para eliminar la componente DC y las variaciones de la linea base, necesitamos un filtro paso alto. Se eligi una frecuencia de corte de 1 Hz y un orden de 2000, consiguiendo una atenuacin de 271.88 veces en la componente continua. El procedimiento es similar al descrito para el filtro notch:

Dpto. Electrnica. U.A.

Laboratorio de Instrumentacin Biomdica

clc figure(5) % Diseo del filtro paso bajo y filtrado de la seal % Frecuencia de Nyquist fsHalf=Fs/2; wcutt=1/fsHalf; highpass=fir1(2000,wcutt,'high'); ecgnoDC=filter(highpass,1,ecgno50); subplot(2,1,1) plot(tsec,ecgnoDC.*1e3,'r'); title('ECG sin componente DC'); xlabel('Tiempo (segundos)'); ylabel('mV'); grid on subplot(2,1,2) [fss,coeff]=fftPlot(tsec,ecgnoDC); title('FFT de la seal filtrada') grid on; fprintf('La componente DC es atenuada %f veces \n',coeff(1));

Aplicar un zoom a la seal anterior y estudiar detenidamente la forma de onda de un ciclo P-QRS-T. Verificar que la morfologa de la seal no ha sido distorsionada. Obtener con Matlab, igual que en el filtro anterior, la respuesta (amplitud y fase) del filtro aqu empleado (usar freqz(highpass)). Filtrar la seal con un filtro paso bajo adecuado para reducir el ruido restante sin distorsionar demasiado la seal til. Fijar una frecuencia de corte igual o superior a 100 Hz. Adicionalmente, se propone que el alumno realice el filtrado aqu descrito, pero mediante filtros IIR para reducir drsticamente el orden de los filtros empleados. La

Dpto. Electrnica. U.A.

Laboratorio de Instrumentacin Biomdica

respuesta de fase obtenida podra ser no lineal y distorsionar la forma de onda en algn sentido. Obtener las grficas correspondientes y comentar conclusiones. Tambin se puede optar por otro enfoque diferente, borrando los coeficientes no deseados de la FFT de la seal original y reconstruyndola mediante una IFFT.

Dpto. Electrnica. U.A.

Laboratorio de Instrumentacin Biomdica

ANEXO: APLICACIN DE LA TRANSFORMADA WAVELET AL FILTRADO DE SEALES ECG

Introduccin

El anlisis wavelet utiliza formas de onda de duracin finita, oscilantes, de media cero y que tienden a ser irregulares y asimtricas. Estas son las funciones de enventanado denominadas wavelets madre. La seal a analizar se descompone a base de versiones desplazadas y dilatadas de la wavelet madre o wavelet analizante que hayamos decidido emplear, y todo ello por medio de un proceso de correlacin entre la seal a descomponer y las mencionadas versiones de la wavelet madre (ver introduccin terica en el fichero aparte Anexo.doc).

Objetivos

Se expone un ejemplo de filtrado Wavelet de las variaciones de la lnea base en una seal ECG. Las mencionadas variaciones de la lnea base estn provocadas fundamentalmente por los artefactos que la respiracin provoca en las seales ECG registradas y, por tanto, su componente frecuencial es bastante inferior a la de la seal que nos interesa. El proceso a seguir, en definitiva, consiste en la aplicacin de un filtrado paso alto con una frecuencia de corte inferior muy reducida. Como ampliacin se propone sumar una interferencia en forma de tono a la seal ECG, para posteriormente eliminarla mediante un filtrado wavelet sencillo.

Proceso de trabajo Filtrado de la linea basal

El registro de la seal electrocardiogrfica se encuentra en el fichero llamado ecg500.dat, que contiene 10.000 muestras float convertidas a ASCII y que podemos abrir con el bloc de notas para observar su contenido. La velocidad de muestreo con la que se obtuvo la seal fue de 500 muestras por segundo. Una vez en Matlab y en el directorio donde se encuentran todos los ficheros de esta prctica, podemos cargar el registro de la seal ECG mediante el siguiente comando: >> load ecg500.dat; Antes de filtrar esta seal conviene que echemos un vistazo a la ayuda del script lineabase y veamos cmo funciona y los parmetros que admite. Para ello: help lineabase

Dpto. Electrnica. U.A.

Laboratorio de Instrumentacin Biomdica

Se recomienda comenzar a probar con la wavelet db7 y con varios niveles de descomposicin para determinar subjetivamente cul es el ms adecuado para eliminar las variaciones de la lnea base, sin distorsionar la seal ECG. Una vez filtrada la seal de la forma ms eficiente, probaremos con otros tipos de wavelets y diferentes niveles de descomposicin para observar los diferentes resultados que podemos obtener. Finalmente, se propone modificar el script lineabase, de modo que las escalas de tiempo de las diferentes grficas visualizadas estn etiquetadas en milisegundos, en vez de en nmero de muestra.

Suma de interferencia en forma de tono y posterior eliminacin de la misma

Aunque la forma ms adecuada de eliminar un tono interferente a una seal no es precisamente mediante la DWT, proponemos un ejercicio para familiarizarse con ms detalles relativos a la misma. Como ampliacin, se propone sumar un tono interferente de 23 Hz y 1 Vpp al ECG original y aplicar una DWT a un nivel adecuado a la seal resultante. Luego, se recomienda reconstruir y visualizar la ltima aproximacin y varios detalles. Tngase presente que la seal ECG se muestre a fs = 500 Hz, con lo cual la mxima frecuencia registrada es de 250 Hz, segn el teorema de Nyquist. Por cada nivel de descomposicin wavelet que realizamos se aplica un filtrado paso alto y paso bajo de media banda para obtener el detalle Dn y la aproximacin An, respectivamente. De este modo, para cada uno de los detalles obtenidos existe una frecuencia de corte inferior fci y otra superior fcs que determinan el espectro de frecuencias contenido en cada detalle. As, para el primer detalle:
fci=fs/4 fcs=fs/2

Para el detalle de orden n el valor de ambas frecuencias es:


fci=fs/2n+1 fcs=fs/2n

Seal f = 0 fs/2

A1 f = 0 fs/4

D1 f = fs/4 fs/2

A2 f = 0 fs/8 Dpto. Electrnica. U.A.

D2 f = fs/8 fs/4 Laboratorio de Instrumentacin Biomdica

Partiendo de estas premisas, deducir qu nivel de descomposicin ser el ms adecuado para obtener con la mxima amplitud el tono de 23 Hz en el detalle Dn correspondiente. Aplicar dicho nivel de descomposicin a la seal contaminada con el tono y visualizar las seales resultantes de la ltima aproximacin An, junto a los tres ltimos detalles. Sacar las conclusiones pertinentes.

Dpto. Electrnica. U.A.

Laboratorio de Instrumentacin Biomdica

You might also like