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
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 Arrhythmia Database
(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
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
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-noised XD de la señal de entrada X, obtenida por
umbralamiento de los coeficientes wavelet.
El string TPTR 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 umbralamiento minimax.
Denoising de la señal ECG
SORH ('s' or 'h') define umbralamiento soft 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 Gaussiano
N(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)
Descargar

Diapositiva 1 - Universidad de Mendoza