Está en la página 1de 5

RT CPSI-UTN # 2004-1: Algoritmos de estimación del período respiratorio 3

Algoritmos de estimación
del período respiratorio
Mariano Llamedo Soria, Alejandro Panelli, Julián S. Bruno
Centro de Procesamiento de Señales e Imágenes (CPSI), UTN-FRBA

Resumen - Este reporte técnico presentará una conocidas al momento de escribir este trabajo. El obje-
forma de medir el período respiratorio medio y su tivo del mismo es presentar una forma concreta de lle-
desvío estándar por medio de herramientas de soft- gar a un resultado, partiendo de un problema práctico
ware y procesamiento digital de señales. El objetivo con datos reales.
del mismo es presentar una forma concreta de llegar
a un resultado, partiendo de un problema práctico
con datos reales.
II. Material y Métodos
Palabras Clave - Š Período respiratorio Š Filtrado
digital Se trabajó sobre una señal temporal tomada del diá-
metro interpleural de los pulmones a partir de una dis-
tancia media, es decir, la variación en la sección inter-
na de la pared de los pulmones. A esta señal la llamare-
I. Introducción mos respiración torácica. La misma indica en sus suce-
sivos máximos o mínimos la frecuencia respiratoria del
Este reporte técnico presentará una forma de medir el animal. Su forma se muestra en la figura 1.
período respiratorio medio y su desvío estándar por Como puede observarse en su representación, dicha
medio de herramientas de software ampliamente difun- señal presenta un ruido de alta frecuencia superpuesto
didas como el lenguaje R 1 o Matlab 2. Se aplicarán en la señal de respiración. El mismo puede ser fácil-
dichos algoritmos en registros de mediciones realizadas mente distinguible ya que la señal de respiración, pre-
sobre ovejas anestesiadas. El algoritmo presenta una senta la mayor parte de su energía en la banda de 1 a 4
primer parte de pre-procesamiento de la señal medida Hz. Para los fines de este trabajo, es conveniente reali-
(mediante filtros digitales, y extracción de zonas espu- zar un filtrado de la señal para eliminar el ruido de alta
rias), una segunda parte previa al algoritmo de detec- frecuencia, el cual será un inconveniente a la hora de
ción (filtros derivadores, detección de pendientes signi- detectar los máximos de la señal. Para tal fin utilizare-
ficativas), el algoritmo de detección propiamente dicho mos un filtro pasa bajos con las siguientes característi-
y finalmente un análisis estadístico de la información cas:
para retirar elementos espurios que no hayan sido con-
templados por el algoritmo, o que el pre-procesamien- Fcs = 5Hz
to de la información no haya solucionado. Ripple en banda de paso = 1 dB
Todas las partes anteriormente descriptas son bien Atenuación = 40 dB

Figura 1: Respiración torácica en función del tiempo.


4 RT CPSI-UTN # 2004-1: Mariano Llamedo Soria et al.

Figura 2: Respiración torácica en función del tiempo, filtrada con un pasa bajos de 5 Hz.

Figura 3: Respiración torácica filtrada en función del tiempo, y su derivada en línea punteada
(fuera de escala para interpolar con la señal original).

El mismo fue diseñado en Matlab por medio de la Con dicho filtro logramos la señal de la figura 3. En
herramienta de diseño de filtros sptool. Luego se pro- esta señal observamos la señal derivada superpuesta a
cedió a exportar los coeficientes obtenidos de dicha la respiración torácica para su mejor comprensión. Se
herramienta a un archivo intermedio .CSV para su uti- le retiró el valor de CC a la señal de respiración toráci-
lización posterior en lenguaje R, donde realizaremos ca para poder tener ambas señales en la misma escala.
nuestro algoritmo. Una vez filtrada la señal presenta el A partir de ahora trabajaremos con ambas señales para
aspecto de la figura 2. explicar el algoritmo de medición del período respira-
Una vez filtrada la señal, podemos aplicar sobre la torio. El algoritmo consiste entonces en buscar los cru-
señal nuestro algoritmo para la estimación del período ces por 0 de la señal derivada, donde estarán definidos
respiratorio medio. El mismo consistirá en medir de los máximos o mínimos en la señal original de respira-
máximo a máximo de la señal de respiración torácica, ción torácica. De esta forma, debemos recorrer la señal
la cantidad de tiempo transcurrido. derivada hacia delante hasta cruzarse nuevamente por
Lo primero que debemos hacer es obtener una forma un cruce por 0, en el mismo sentido que el primer
de hallar los máximos. La más sencilla de todas es cruce. Es decir, si encontramos un cruce por 0, con
mediante la derivada de la señal. Sabemos que la deri- pendiente positiva en la señal derivada significará un
vada toma el valor de 0 en los máximos locales de una mínimo local, mientras que un cruce con pendiente
función, por lo que una derivada sería una buena refe- negativa significará un máximo. Verificamos que no
rencia para nuestra medición de período. Podemos afecta al resultado la elección de máximos o mínimos
implementar una derivada de 3 puntos para cumplir con para la medición del período medio. El cruce por cero
nuestro objetivo, pero para obtener un efecto de suavi- lo hallamos en ambos casos indagando el cambio de
zado recurrimos a una de mayor cantidad de puntos 3. signo al recorrer la señal derivada y actuando según lo
Los coeficientes terminan siendo los siguientes: descrito anteriormente. Una vez detectado el primer
cruce, establecemos un tiempo de deshabilitación del
Filtro derivador = (1,0,0,0,0,0,-1) algoritmo para encontrar nuevos cruces por cero, es
decir el fin del período respiratorio. Esto se debe a que
RT CPSI-UTN # 2004-1: Algoritmos de estimación del período respiratorio 5

Figura 4: Boxplot de los resultados del experimento. Se observan aquellos valores no representativos por encima del
brazo superior del gráfico boxplot. Las abcisas corresponden a cada tramo del experimento.

la señal derivada presenta nuevos cruces por 0 en torno solamente obtener los resultados finales.
a los máximos de la señal respiración, y con esta medi-
da buscamos escapar de esta zona, para evitar medicio-
nes incorrectas. De esta forma vamos almacenando los III. Resultados
tiempos de cada período encontrado, y armamos con
los mismos una tabla. En la tabla 1 se muestran los resultados obtenidos
para todos los tramos del experimento. Puede obser-
En el Apéndice podremos apreciar la implementación varse en los tramos 2, 5, 6 y 8 una mayor variación del
en lenguaje R que busca los períodos respiratorios. período respiratorio medio.

En la implementación para lenguaje R del algoritmo TABLA 1: PERÍODOS MEDIOS Y SU DESVÍO ESTÁNDAR
descrito anteriormente encontramos dos particularida- POR CADA TRAMO DEL EXPERIMENTO.
des. La primera consiste en usar una ventana de obser-
vación para encontrar el cruce por 0. Nos fijamos siem-
pre 5 muestras hacia delante y hacia atrás si se produjo
el cambio de signo. La otra particularidad es que esta TRAMO MEDIA DE
función informa el lugar donde detectó el período. Si [SEGUNDOS] [SEGUNDOS]
bien este dato no aporta información para el resultado,
es muy útil para verificar que el algoritmo esta funcio- 1 1.24 0.14
nando correctamente.
2 1.46 0.36
Una vez terminada la parte de detección, procedemos
a la extracción de los períodos espurios, es decir aque- 3 1.41 0.29
llos que no son representativos de la media de dicho 4 1.23 0.23
grupo. Este tipo de resultados espurios es consecuencia
tanto de problemas prácticos en el experimento (movi- 5 1.51 0.35
miento del animal, cambios no controlados en las con- 6 1.59 0.38
diciones de medición), como de errores del algoritmo a
la hora de estimar el período respiratorio (condiciones 8 1.46 0.33
no tenidas en cuenta a la hora de su creación), y los 9 1.3 0.25
mismos deben ser descartados antes de proceder al
análisis final. Esto lo podemos realizar mediante la 10 1.45 0.28
función boxplot implementada en R. La cual muestra 11 1.51 0.28
los quartilos 25, 75 y la mediana, según vemos en la
figura 4. Este tipo de gráfico sirve para identificar 12 1.56 0.30
aquellos valores que no son representativos de la media 13 1.3 0.20
en un conjunto de datos.
14 1.42 0.23
Una vez eliminados los resultados espurios, resta
6 RT CPSI-UTN # 2004-1: Mariano Llamedo Soria et al.

En la tabla 2 observamos los resultados finales del más la detección ya que con un análisis estadístico pos-
experimento. Encontramos un período respiratorio terior, podíamos obtener resultados satisfactorios.
medio de 1.31 segundos, un desvío estándar de 0.22
segundos y una variación del 17 % de la media.

TABLA 2: PERÍODOS MEDIOS, DESVÍO ESTÁNDAR


Y COEFICIENTE DE VARIACIÓN TOTAL DEL EXPERIMENTO.
Agradecimientos
Agradecemos a Marcelo Risk, Ricardo Armentano y
MEDIA [SEGUNDOS] DE [SEGUNDOS] COEF. DE VARIACIÓN Franco Pessana por proveer los datos experimentales, y
TOTAL 1.31 0.22 17 % el conocimiento para realizar este trabajo.

IV. Discusión Referencias


Matlab 6.5 R13. http://www.mathworks.com/
Encontramos que los resultados son representativos
de lo observado en los datos experimentales. Este tipo R Development Core Team (2004). R: A language and envi-
de algoritmos tiene como inconveniente la necesidad ronment for statistical computing. R Foundation for
de conocer el conjunto de datos experimental, para fijar Statistical Computing, Vienna, Austria. ISBN 3-900051-00-
un límite de tiempo a ignorar luego del hallazgo del pri- 3, URL http://www.R-project.org
mer mínimo/máximo, esto lo hace inadecuado para
algunas aplicaciones. El algoritmo también presenta la Risk MR. Cartas sobre estadística 1: Estadística descriptiva,
representación gráfica y distribución normal. Revista
debilidad que una vez terminado este límite, considera-
Argentina de Bioingeniería. En prensa.
rá como válido el primer cruce por cero de la señal deri-
vada, pudiendo conducir a un error. Al aplicar el algo- WJ Tonpkins. Biomedical digital signal processing.
ritmo encontramos que no era necesario sofisticar aun Prentice Hall. ISBN 0-13-067216-5

Apéndice
A continuación podemos apreciar la implementación en lenguaje R que busca los períodos respiratorios:

BuscaPeriodo <- function( dataset, limiteAignorar)


{
x <- 6
datasetlength <- length(dataset)
xAnt <- 0
firstTime <- 0
while( (x + 5) < datasetlength )
{

#Flanco creciente
if( dataset[(x-5)] < 0 && dataset[(x+5)] > 0 )

#Flanco decreciente
# if( dataset[x-5] > 0 && dat01aset[x+5] < 0)
{
if( xAnt == 0)
{
xAnt <- x
}
else
{
if( firstTime == 0 )
RT CPSI-UTN # 2004-1: Algoritmos de estimación del período respiratorio 7

{
firstTime <- 1
periodos <- x - xAnt
xplace <- x
}
else
{
periodos <- c(periodos , (x - xAnt))
xplace <- c(xplace,x)
}
xAnt <- 0
}
x <- x + limiteAignorar
}
x <- x + 1
}
retVal <- data.frame(periodos, xplace)
retVal
}

También podría gustarte