270 likes | 427 Views
Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872. Curso “ Experimentación con Bases de Datos de señales cardiológicas. Recursos de Physionet . ” DICTADO POR: dR. Ing. jesús Rubén Azor montoya 2011.
E N D
Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote7505500 MendozaRepública ArgentinaTeléfono 061-201872 Curso “Experimentación con Bases de Datos de señales cardiológicas. Recursos de Physionet. ” DICTADO POR: dR. Ing. jesús Rubén Azor montoya 2011
Filtrado del ruido en las señales ECG • Las señales electrocardiográficas (ECG) pueden estar corrompidas por varios tipos de ruidos. Ejemplos típicos son: • - Interferencia de línea de potencia • - Ruido por contacto de electrodo • - Artifacts (cualquier alteración indeseada en datos introducidos durante su procesamiento digital) • - Contracción muscular. • - Deriva de la línea base • Ruido de instrumentación generado por dispositivos electrónicos • Interferencia de línea de potencia • Consiste en una sinusoide superpuesta de 50-60Hz a la señal del ECG. Las características, que pueden necesitar ser variadas en un modelo de ruido de línea de potencia, de la componente de 50-60Hz incluyen la amplitud y la frecuencia de la señal. La amplitud varía hasta el 50 % del pico de la amplitud del ECG
Filtrado de la señal de alimentación de potencia Se va a utilizar el Filtro Óptimo de Wiener para eliminar la señal de 60 Hz en la señal ECG del registro 202 de la MIT-BIH ArrhythmiaDatabase(http://www.physionet.org/physiobank/database/html/mitdbdir/records.htm) Para obtener los datos, se recurre a la función Matlab específica rdsamp rr=rdsamp('mitdb/202','phys',true); El agregado de 'phys',true es para obtener los datos en unidades físicas (mV). Lo que se obtiene es un arreglo de 650000 filas por tres columnas:
Filtrado de la señal de alimentación de potencia Como se aprecia en la figura, la primera columna indica el instante de toma de la muestra y en la segunda y tercera, dos derivaciones obtenidas de sendos sensores. Como se puede verificar, la frecuencia de muestreo es de 360Hz. Usaremos la primera derivación (segunda columna) y de ese vector, 213 = 8192 muestras. Z=rr(:,2); r=Z(1:2^13); plot(r)
Filtrado de la señal de alimentación de potencia Como se puede ver el ECG es ruidoso y tiene una deriva, aparte de una componente de DC. En el eje de abscisas está el número de muestra y en ordenadas los valores de tensión (en milivoltios) correspondientes a cada muestra. Tomando la Transformada de Fourier de esta señal se puede observar la componente correspondiente a 60 Hz. N=length(r); fs=360; i=1:N/5; plot((i-1)*fs/N,F(i))
Filtrado de la señal de alimentación de potencia Como se puede ver el ECG es ruidoso y tiene una deriva, aparte de una componente de DC. En el eje de abscisas está el número de muestra y en ordenadas los valores de tensión (en milivoltios) correspondientes a cada muestra. Tomando la Transformada de Fourier de esta señal se puede observar la componente correspondiente a 60 Hz. N=length(r); fs=360; F=abs(fft(r));i=1:N/5; plot((i-1)*fs/N,F(i))
Filtrado de la señal de alimentación de potencia Para filtrar la señal, anulando la componente de la alimentación de potencia (60 Hz), se plantea el siguiente combinador lineal. donde x(i) es la señal de entrada, una cosenoide de 60 Hz muestreada a fs=300 Hz; mientras que d(i) es la señal deseada (ECG). El filtro ajustará sus pesos (w0, w1) hasta lograr que la señal de error, e(i), constituya la señal ECG filtrada (en este caso, sin la componente de 60 Hz). Para encontrar los pesos del mejor ajuste (vector óptimo de Wiener) se debe determinar la matriz de autocorrelación de entrada, R, y el vector de correlación cruzada entre la entrada y la salida, P.
Filtrado de la señal de alimentación de potencia d=r; % hace al ECG la señal deseada N=length(r); % define la entrada como una cosenoide de 60 Hz % muestreada a 360 Hz for i=1:N;x(i)=cos(2*pi*(i-1)*60/360);end % Calcula la matriz de autocorrelacion de entrada, R R(1,1)=norm(x)^2/N;R(2,2)=R(1,1); S=0;for i=2:N;S=S+x(i)*x(i-1); end R(1,2)=S/(N-1); R(2,1)=R(1,2); S=0; for i=1:N, S=S+d(i)*x(i); end % Calcula el vector P P(1,1)=S/N; S=0; for i=2:N, S=S+d(i)*x(i-1); end P(1,2)=S/(N-1); % Halla el vector optimo de Weiner W=R^-1*P'; % Obtiene la señal ECG filtrada for i=2:N, e(i)=d(i)-W(1)*x(i)-W(2)*x(i-1); end % Grafica la fft para observar su correcto filtrado E=abs(fft(e)); i=1:length(E)/5; plot((i-1)*360/N,E(i))
Filtrado de la señal de alimentación de potencia Observando la fft de la señal filtrada: E=abs(fft(e)); i=1:length(E)/5; plot((i-1)*360/N,E(i)) Se ve que la componente de 80 Hz ha sido totalmente eliminada.
Wavelets La Transformada Wavelet (WT) es una operación lineal que descompone una señal en componentes que aparecen en diferentes escalas (o resoluciones). Sea y (t) una función de valores reales o complejos en L2(R). La función y (t) se dice que es un wavelet si y sólo si su transformada de Fourier satisface
Wavelets La condición de admisibilidad implica que para que el cociente de (1) sea indeterminado en w=0. Esto significa que los wavelets no deben tener componente continua, esto es: Y por lo tanto La dilatación de y (t) por un factor de escala a > 0(t) es oscilatorio y su área es cero. Sea: La dilatación de y (t) por un factor de escala a > 0
Wavelets Este tipo de transformación satisface la conservación de energía, y la señal original puede ser reconstruida desde la WT. Con el decrecimiento de la escala a, el soporte para el wavelet decrece y la WT se hace más sensible a los componentes de alta frecuencia.
Filtrado de la deriva de la base line La deriva de la base line con la respiración puede ser representada por una componente senoidal a la frecuencia respiratoria que se suma a la señal ECG. La amplitud y la frecuencia de la componente senoidal será variable. Las variaciones pueden ser reproducidas por modulación de amplitud de la ECG mediante una componente senoidal sumada a la base line. Estas componentes pueden influir tanto en la interpretación visual del ECG, como en su análisis. Como este ruido son variaciones de baja frecuencia de la línea de base, podría pensarse que con un filtro pasa-alto se soluciona dicho problema. Pero esto podría influir en el diagnóstico del ECG, ya que afectaría a las componentes de baja frecuencia, como es el caso del segmento ST. El contenido en frecuencias de estas perturbaciones suele rondar los 0.5 Hz.
Filtrado de la deriva de la base line Para este filtrado se utilizan las funciones wavedec y waverec.
Filtrado de la deriva de la base line El principio del filtrado es descomponer la señal hasta un cierto nivel, y luego reconstruir la señal para remover las bajas frecuencias. Para nuestro análisis se utiliza una descomposición hasta el nivel 8, lo que corresponde hasta alcanzar una frecuencia de aproximadamente 1.4 Hz. En el gráfico que sigue, queda explicito el árbol correspondiente a los niveles considerados. La frecuencia inicial es igual a la frecuencia de muestreo, que en nuestro caso es de 360 Hz.
Filtrado de la deriva de la base line Este algoritmo se hizo usando las etapas de abajo: % Se obtiene la señal ECG de Physionet r = rdsamp('mitdb/106', 'maxt', ':60'); r1=r(:,2);B=r1(1:2^13); plot(B)
Filtrado de la deriva de la base line % Descomposición wavelet de nivel 8 mediante Daubechies 6 [C,L] = wavedec(B,8,'db6'); % Se eliminan los Coeficientes Aproximación del ultimo nivel for i=1:L(1);C(i)=0; end % Se recompone la señal X = WAVEREC(C,L,'db6'); % Se grafica i=1:2^13;plot(i,B(i),i,X(i)+2)
Denoising de la señal ECG La teoría wavelet ha probado su habilidad en descomponer una señal y ruido en el dominio wavelet. Recientemente, investigadores desde la comunidad de procesamiento biomédico de señal han aplicado la teoría wavelet en compresión de señal, extracción de características y denoising. El procesamiento de señal basado en wavelet ofrece claras ventajas sobre las técnicas convencionales. Estos potenciales inherentes de la WT han sido desarrollados en gran escala para compresión y recuperación de datos médicos. La capacidad de compresión de datos convierte a los wavelets en muy útiles en el ECG, esto es debido a la razón que estos requieren enorme cantidad de memoria para ser almacenados. Por ejemplo, una señal ECG muestreada a 1 kHz requiere en promedio 100 MB por día.
Denoising de la señal ECG Para la aplicación de telemedicina en tiempo real se necesita la compresión de datos de la señal ECG para que sea exitosa y eficiente la transmisión de la misma en su tránsito a un centro de diagnóstico remoto. En un latido ECG la parte más importantes es el breve complejo QRS. El intervalo RR (tiempo entre sucesivos picos de la onda R) de la señal ECG es un parámetro patológico importante ya que provee la tasa cardíaca instantánea. También, la información pertinente a la detección del pico R, el intervalo QT, la naturaleza de las ondas S y T son considerados como importantes parámetros de diagnóstico. Actualmente. los expertos están usando la base de datos Physionet para evaluar el comportamiento de los algoritmos de procesamiento de señal. Aunque la base de datos ayuda al usuario, en la práctica puede haber posibilidad de variaciones en los resultados debido al ruido sobrelapado con las señales de ECG.
Denoising de la señal ECG Por lo expuesto, resulta de gran importancia la atenuación “inteligente” de los ruidos contenidos en la señal. Por “inteligente” se quiere indicar que se elimine el ruido en alguna medida que no ponga en peligro las características destacadas de la señal que servirán, en última instancia, para determinar los parámetros adecuados para diagnósticos automatizados. Coeficientes Wavelet y umbralización La energía de una señal ECG está principalmente distribuida en las ondas P y T y el segmento QRS. Cuando la señal se contamina de ruido térmico, éste se modela como un ruido randómico (aleatorio) cuya energía está distribuida en una amplia gama de frecuencias.
Denoising de la señal ECG Matlab permite realizar este filtrado en forma eficiente mediante la función wdwn. Wden: Supresión de Ruido automático 1-D usando wavelets. Sintaxis: [XD,CXD,LXD] = wden(X,TPTR,SORH,SCAL,N,'wname') Descripción: wden realiza un proceso de de-noising automático de una señal 1-D usando wavelets. Retorna una versión de-noisedXD de la señal de entrada X, obtenida por umbralamiento de los coeficientes wavelet. El stringTPTR contiene las reglas de selección de umbral: 'rigrsure' usa el principio de Riego Insesgado de Stein. 'heursure' es una variante heuristica de la primera opción. 'sqtwolog' utiliza el umbral universal [sqrt(2*log(n))]. 'minimaxi' para umbralamientominimax.
Denoising de la señal ECG SORH ('s' or 'h') define umbralamientosoft o hard SCAL define reescalamiento multiplicativo de umbral: 'one' sin reescalamiento. 'sln' para reescalamiento usando una única estimación del nivel de ruido basado en coeficientes de primer nivel. 'mln' para reescalamiento hecho usando estimación nivel-dependiente del nivel de ruido. La descomposición wavelet es realizada al nivel N y 'wname' es un string conteniendo el nombre de wavelet ortogonal deseado. El modelo subyacente para la señal ruidosa es básicamente de la siguiente forma: En el modelo más simple, se supone que e(n) es un ruido blanco GaussianoN(0,1) con un nivel de ruido s determinado.
Denoising de la señal ECG Finalmente para eliminar el ruido: % Se obtiene la señal ECG de Physionet r = rdsamp('mitdb/106', 'maxt', ':60'); r1=r(:,2);X=r1(1:2^10); xd = wden(X,'heursure','s','one',2,'db6'); i=1:1000;plot(i,xd(i),i,X(i)+2)