Movatterモバイル変換


[0]ホーム

URL:


WO2006134197A1 - Method of processing photopletismographic signals obtained from a person or animal and oximeter using said method - Google Patents

Method of processing photopletismographic signals obtained from a person or animal and oximeter using said method
Download PDF

Info

Publication number
WO2006134197A1
WO2006134197A1PCT/ES2006/070080ES2006070080WWO2006134197A1WO 2006134197 A1WO2006134197 A1WO 2006134197A1ES 2006070080 WES2006070080 WES 2006070080WWO 2006134197 A1WO2006134197 A1WO 2006134197A1
Authority
WO
WIPO (PCT)
Prior art keywords
peak
parameter
candidate
signals
peaks
Prior art date
Application number
PCT/ES2006/070080
Other languages
Spanish (es)
French (fr)
Inventor
Juan Pedro SILVEIRA MARTÍN
Maria Luisa Dotor Castilla
María Dolores GOLMAYO FERNÁNDEZ
Amaia Bilbao Monasterio
Romano Giannetti
Sonnia María LÓPEZ SILVA
Pilar MARTÍN ESCUDERO
Francisco Miguel Tobal
Original Assignee
Consejo Superior De Investigaciones Científicas
Universidad Pontificia Comillas De Madrid
Universidad De Las Palmas De Gran Canaria
Universidad Complutense De Madrid
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Consejo Superior De Investigaciones Científicas, Universidad Pontificia Comillas De Madrid, Universidad De Las Palmas De Gran Canaria, Universidad Complutense De MadridfiledCriticalConsejo Superior De Investigaciones Científicas
Publication of WO2006134197A1publicationCriticalpatent/WO2006134197A1/en

Links

Classifications

Definitions

Landscapes

Abstract

The invention relates to a method of processing photopletismographic signals obtained from a person or animal and to an oximeter using said method. The inventive method comprises the following steps consisting in: a) receiving time-domain photopletismographic electrical signals; b) transforming said time signals into spectral signals; c) identifying a series of candidate peaks as the peak produced at the cardiac frequency; d) obtaining a series of parameters from said candidate peaks; and e) determining which peak is representative of the cardiac frequency from said parameters, step (d) being performed such as to obtain first, second and third parameters using calculations executed in parallel. According to the invention, the first parameter results from a function of harmonic probability in relation to the candidate peaks, the second parameter results from a function of preponderance, in terms of energy, in relation to the candidate peaks and the third parameter results from a function of historical analysis in relation to said candidate peaks.

Description

TITULOTITLE
MÉTODO PARA PROCESAR SEÑALES FOTOPLETISMOGRÁFICAS OBTENIDAS DE UNA PERSONA O ANIMAL, Y OXÍMETRO QUE UTILIZA DICHO MÉTODOMETHOD FOR PROCESSING PHOTOPLETISMOGRAPHIC SIGNS OBTAINED FROM A PERSON OR ANIMAL, AND OXYMETER THAT USES SUCH METHOD
Sector de Ia técnicaTechnical sector
La presente invención concierne en general, en un primer aspecto, a un método para obtener parámetros fisiológicos en tiempo real a partir de unas señales fotopletismográficas (PPG) medidas por sensores ópticos, y en particular a un método para obtener el valor del ritmo cardiaco a partir de esas señales fotopletismográficas, incluso en situaciones extremas como es durante Ia realización continua de movimientos durante Ia práctica de ejercicios.The present invention generally concerns, in a first aspect, a method for obtaining physiological parameters in real time from photoplethysmographic signals (PPG) measured by optical sensors, and in particular a method for obtaining the heart rate value at from these photoplethysmographic signals, even in extreme situations such as during the continuous realization of movements during the practice of exercises.
La invención también concierne, en un segundo aspecto, a un oxímetro apto para procesar señales fotopletismográficas según el método propuesto.The invention also concerns, in a second aspect, an oximeter suitable for processing photoplethysmographic signals according to the proposed method.
Estado de Ia técnica anteriorState of the prior art
Es conocido que una de las mayores dificultades de Ia oximetría de pulso es Ia obtención de valores fiables del ritmo cardiaco y Ia saturación de oxígeno durante Ia realización de movimientos por parte del individuo. La oximetría de pulso se basa en Ia medida de Ia radiación luminosa en dos longitudes de onda determinadas después de interaccionar con Ia sangre arterial, Ia sangre venosa y el resto de tejidos existentes en Ia zona de medida. Se utiliza generalmente radiación en Ia zona del rojo e infrarrojo cercano y en configuración por reflexión o transmisión. La variación del volumen de sangre en las arterias por el bombeo del corazón permite obtener una señal luminosa variable relacionada con el ritmo cardiaco y con Ia hemoglobina. Los oxímetros de pulso existentes según propia experiencia y los datos obtenidos en Ia literatura ofrecen un valor del ritmo cardiaco falso durante Ia práctica de ejercicio. Esto se debe a que el movimiento del individuo o de alguna parte de su cuerpo provoca Ia aparición de artefactos en Ia señal fotopletismográfica medida por el sensor del oxímetro de pulso. La realización continua de movimientos, como es el caso durante Ia práctica de ejercicios, hace que en general no se obtengan valores fiables del ritmo cardiaco o de la saturación de oxígeno. Esta limitación no permite el uso fiable de los oxímetros de pulso durante el ejercicio, impidiendo Ia medida de estos parámetros que serían de gran utilidad durante Ia práctica deportiva y principalmente durante el entrenamiento. Se conocen diferentes propuestas relativas al procesamiento de señales fotopletismográficas con el fin de averiguar información relativa a una condición fisiológica de un paciente, preferentemente Ia frecuencia cardiaca y Ia saturación de oxígeno.It is known that one of the greatest difficulties of pulse oximetry is obtaining reliable values of heart rate and oxygen saturation during the performance of movements by the individual. Pulse oximetry is based on the measurement of the light radiation at two determined wavelengths after interacting with the arterial blood, the venous blood and the rest of the tissues existing in the measurement zone. Radiation is generally used in the near red and infrared zone and in configuration by reflection or transmission. The variation of the volume of blood in the arteries by pumping the heart allows to obtain a variable light signal related to the heart rhythm and hemoglobin. The pulse oximeters existing according to own experience and the data obtained in the literature offer a false heart rate value during the practice of exercise. This is due to the fact that the movement of the individual or some part of his body causes the appearance of artifacts in the photoplethysmographic signal measured by the pulse oximeter sensor. The continuous performance of movements, as is the case during the practice of exercises, means that in general, reliable heart rate values are not obtained or oxygen saturation. This limitation does not allow the reliable use of pulse oximeters during exercise, preventing the measurement of these parameters that would be very useful during sports and mainly during training. Different proposals regarding the processing of photoplethysmographic signals are known in order to find out information related to a physiological condition of a patient, preferably the heart rate and oxygen saturation.
La solicitud US-A-20040171948 concierne a un método para procesar señales fotopletismográficas en diferentes dominios: temporal, espectral y cepstral, y en base a los resultados de los análisis de las señales en uno o más de dichos dominios, estimar una o más condiciones fisiológicas de un paciente, así como los artefactos de movimiento en el dominio temporal incluidos en Ia señal fotopletismográfica. La solicitud US-A-20030163032 concierne a un método para eliminar artefactos de movimiento de unas señales eléctricas representativas de unas señales de luz atenuada, tales como las correspondientes a unas señales fotopletismográficas, mediante Ia transformación de dichas señales en un dominio espectral, Ia identificación de unos picos candidatos de entre los datos espectrales de dichas señales, su correspondiente filtrado, y su análisis en base a una serie de parámetros para finalmente averiguar el pico correspondiente a Ia frecuencia cardiaca del paciente cuyas señales fotopletismográficas son objeto de análisis.Application US-A-20040171948 concerns a method for processing photoplethysmographic signals in different domains: temporal, spectral and cepstral, and based on the results of the analysis of the signals in one or more of said domains, estimate one or more conditions physiological aspects of a patient, as well as movement artifacts in the temporal domain included in the photoplethysmographic signal. The application US-A-20030163032 concerns a method to eliminate motion artifacts of electrical signals representative of attenuated light signals, such as those corresponding to photoplethysmographic signals, by transforming said signals into a spectral domain, the identification of some candidate peaks between the spectral data of said signals, their corresponding filtering, and their analysis based on a series of parameters to finally find out the peak corresponding to the heart rate of the patient whose photoplethysmographic signals are subject to analysis.
Aparece necesario ofrecer una alternativa al estado de Ia técnica enfocada a averiguar de una manera fiable y en todo momento Ia frecuencia cardiaca de una persona o animal mediante el análisis de unas señales fotopletismográficas contaminadas con interferencias o artefactos, especialmente los producidos en situaciones de movimiento continuo, o con múltiples estados de transición, como los llevados a cabo durante Ia práctica de ejercicio físico. Explicación de Ia invenciónIt seems necessary to offer an alternative to the state of the art focused on finding out in a reliable way and at all times the heart rate of a person or animal by analyzing photoplethysmographic signals contaminated with interference or artifacts, especially those produced in situations of continuous movement , or with multiple transition states, such as those carried out during the practice of physical exercise. Explanation of the invention
La presente invención concierne, en un primer aspecto, a un método para procesar señales fotopletismográficas obtenidas por un sensor de un oxímetro de pulso, mediante Ia aplicación del cual es posible obtener de una manera fiable el ritmo cardiaco incluso cuando el individuo realiza ejercicios.The present invention concerns, in a first aspect, a method for processing photoplethysmographic signals obtained by a pulse oximeter sensor, by means of the application of which it is possible to reliably obtain the heart rate even when the individual performs exercises.
En un segundo aspecto, Ia presente invención concierne a un oxímetro adaptado para procesar señales fotopletismográficas según el método propuesto por el primer aspecto de Ia presente invención. El método propuesto según el primer aspecto de Ia presente invención tiene su aplicación en el procesamiento de señales fotopletismográficas obtenidas de una persona o animal, con el fin de averiguar como mínimo Ia frecuencia cardiaca del mismo.In a second aspect, the present invention concerns an oximeter adapted to process photoplethysmographic signals according to the method proposed by the first aspect of the present invention. The proposed method according to the first aspect of the present invention has its application in the processing of photoplethysmographic signals obtained from a person or animal, in order to find out at least the heart rate thereof.
En particular el método propuesto comprende emitir, sobre una zona irrigada por capilares sanguíneos, como puede ser un dedo u otro órgano de dicha persona o animal, dos o más señales luminosas para obtener en respuesta dichas señales fotopletismográficas, mediante Ia detección con al menos un fotodetector de dichas señales luminosas, una vez han atravesado dicha zona. Dichas señales luminosas emitidas proceden preferentemente de LEDs o láseres de distintas longitudes de onda, comprendidas entre 630 y 980 nm, siendo como mínimo una de ellas infrarroja.In particular, the proposed method comprises emitting, on an area irrigated by blood capillaries, such as a finger or other organ of said person or animal, two or more light signals to obtain said photoplethysmographic signals in response, by means of detection with at least one photodetector of said light signals, once they have crossed said area. Said emitted light signals preferably come from LEDs or lasers of different wavelengths, between 630 and 980 nm, at least one of them being infrared.
El método es particularmente aplicable al procesamiento de señales fotopletismográficas que contienen armónicos de distintas frecuencias, algunos de los cuales han sido producidos por artefactos representativos del movimiento de dicha persona o animal, ya sea por movimiento de brazos, piernas y/o patas de dicha persona o animal, provocado al andar o correr, que generan unos armónicos a frecuencias distintas a Ia cardiaca, que varía según Ia intensidad de Ia marcha o carrera. Dicho movimiento provocado al andar o correr se genera, por ejemplo, al realizar una actividad deportiva que requiere medir frecuencias cardiacas en condiciones de esfuerzo continuado y extremo, muy diferentes a las medidas en condiciones de reposo. Con el fin de discernir de entre dichas señales fotopletismográficas contaminadas por los mencionados artefactos producidos por el movimiento, cuál es Ia señal que hace referencia al ritmo cardiaco de Ia persona o animal, el método propuesto comprende realizar, según técnica en sí conocida, las siguientes etapas de manera secuencial: a) recibir unas señales eléctricas fotopletismográficas en un dominio temporal, b) transformar dichas señales temporales en señales con un dominio en frecuencia, o señales espectrales, c) identificar una serie de picos candidatos a ser el pico producido a dicha frecuencia cardiaca, de entre parte o todas dichas señales espectrales, d) obtener una serie de parámetros a partir de dichos picos candidatos, y e) determinar a partir de al menos uno de dichos parámetros obtenidos en d) cuál es el pico representativo de dicha frecuencia cardiaca, o pico buscado. El método propuesto por el primer aspecto de Ia presente invención comprende realizar dicha etapa d) para obtener como mínimo un primer y un segundo parámetros mediante unos cálculos realizados en paralelo, siendo:The method is particularly applicable to the processing of photoplethysmographic signals that contain harmonics of different frequencies, some of which have been produced by artefacts representative of the movement of said person or animal, either by movement of arms, legs and / or legs of said person or animal, caused by walking or running, which generate harmonics at frequencies other than cardiac, which varies according to the intensity of the march or race. Said movement caused by walking or running is generated, for example, when performing a sports activity that requires measuring heart rates in conditions of continuous and extreme effort, very different from those measured at rest. In order to distinguish between said photoplethysmographic signals contaminated by the aforementioned artifacts produced by the movement, which is the signal that refers to the heart rate of the person or animal, the proposed method comprises performing, according to known technique, the following stages sequentially: a) receive photoplethysmographic electrical signals in a temporal domain, b) transform said temporal signals into signals with a frequency domain, or spectral signals, c) identify a series of candidate peaks to be the peak produced at said domain heart rate, between part or all of said spectral signals, d) obtain a series of parameters from said candidate peaks, and e) determine from at least one of said parameters obtained in d) what is the representative peak of said frequency cardiac, or peak sought. The method proposed by the first aspect of the present invention comprises performing said step d) to obtain at least a first and a second parameter by means of calculations carried out in parallel, being:
- dicho primer parámetro resultante de una función de probabilidad de armónicos de dichos picos candidatos, consistente en una comparación, dos a dos, de los mismos, que ofrece como resultado una serie de valores para el primer parámetro, y- said first parameter resulting from a harmonic probability function of said candidate peaks, consisting of a two-to-two comparison thereof, which results in a series of values for the first parameter, and
- dicho segundo parámetro resultante de una función de preponderancia, en energía, de dichos picos candidatos, consistente en una comparación, dos a dos, de los mismos, que ofrece como resultado una serie de valores para el segundo parámetro.- said second parameter resulting from a preponderance function, in energy, of said candidate peaks, consisting of a two-to-two comparison thereof, which results in a series of values for the second parameter.
El método propuesto comprende por último asignar, en dicha etapa e), a dicho pico determinado como representativo de dicha frecuencia cardiaca un coeficiente de confianza.The proposed method finally comprises assigning, at said stage e), to said peak determined as representative of said heart rate a confidence coefficient.
Para un ejemplo de realización preferida el método comprende además realizar dicha etapa d) para un tercer parámetro a obtener en base a unos cálculos realizados en paralelo con los realizados para obtener dichos primer y segundo parámetros, siendo dicho tercer parámetro resultante de una función de análisis histórico de dichos picos candidatos, consistente en una comparación de al menos el pico determinado como representativo de Ia frecuencia cardiaca en dicha etapa e), para un ciclo anterior, el cual tiene asignado un coeficiente de confianza de un valor alto, con dichos picos candidatos, para buscar el pico de Ia misma frecuencia o de Ia frecuencia más próxima a Ia de dicho pico determinado en dicha etapa anterior e), y asignarle un coeficiente de probabilidad de que sea el pico buscado resultado de devaluar dicho coeficiente de confianza alto en un porcentaje determinado que es inversamente proporcional a Ia cercanía de ambas frecuencias.For a preferred embodiment, the method further comprises performing said step d) for a third parameter to be obtained based on calculations performed in parallel with those made to obtain said first and second parameters, said third parameter being resulting from an analysis function history of these candidate peaks, consisting of a comparison of at least the peak determined as representative of the heart rate in said stage e), for a previous cycle, which has a high confidence coefficient assigned, with said candidate peaks, to look for the peak of the same frequency or of the frequency closest to that of said peak determined in said previous stage e), and assign a probability coefficient that is the peak sought as a result of devaluing said high confidence coefficient in a certain percentage that is inversely proportional to the proximity of both frequencies.
Por Io que se refiere a dicha etapa e), el método conforme a una implementación preferida comprende llevarla a cabo mediante su división en dos sub-etapas:As regards said stage e), the method according to a preferred implementation comprises carrying it out by dividing it into two sub-stages:
- una primera sub-etapa e.1 ), o etapa de preselección, consistente en analizar los valores obtenidos para como mínimo dichos primer y segundo parámetros, y preferentemente también dicho tercer parámetro, y seleccionar un único pico candidato para cada parámetro, en función de dicho análisis, y- a first sub-stage e.1), or pre-selection stage, consisting of analyzing the values obtained for at least said first and second parameters, and preferably also said third parameter, and selecting a single candidate peak for each parameter, depending on of said analysis, and
- una sub-etapa e.2) o selección final para determinar, de entre cada pico seleccionado por cada parámetro, dicho pico representativo de dicha frecuencia cardiaca, o pico buscado.- a sub-stage e.2) or final selection to determine, from each peak selected by each parameter, said representative peak of said heart rate, or sought peak.
Para un ejemplo de realización preferido, dicha sub-etapa e.1) comprende:For a preferred embodiment, said sub-stage e.1) comprises:
- para seleccionar el pico candidato para el primer parámetro:- to select the candidate peak for the first parameter:
• ordenar, en función de su contenido armónico, los picos determinados como pertenecientes a frecuencias fundamentales, en base a los valores obtenidos tras dicha comparación de dicha función de probabilidad de armónicos,• order, based on their harmonic content, the peaks determined as belonging to fundamental frequencies, based on the values obtained after said comparison of said harmonic probability function,
• asignarles un coeficiente de probabilidad a cada uno de ellos tanto mayor cuanto menor sea su contenido armónico,• assign a probability coefficient to each of them, the higher the lower the harmonic content,
• ponderar dichos coeficientes de probabilidad de cada uno de los picos con Ia amplitud de sus respectivas fundamentales, y • determinar el pico con probabilidad más alta como el pico candidato para el primer parámetro,• weighting said probability coefficients of each of the peaks with the amplitude of their respective fundamentals, and • determining the highest probability peak as the candidate peak for the first parameter,
- para seleccionar el pico candidato para el segundo parámetro: • determinar el pico determinado como más preponderante previa asignación de un coeficiente de probabilidad, en base a los valores obtenidos tras dicha comparación de dicha función de preponderancia, como el pico candidato para el segundo parámetro.- to select the candidate peak for the second parameter: • determine the peak determined as the most preponderant prior assignment of a probability coefficient, based on the values obtained after said comparison of said preponderance function, as the candidate peak for the second parameter.
- para seleccionar el pico candidato para el tercer parámetro:- to select the candidate peak for the third parameter:
• determinar dicho pico de Ia misma frecuencia o de Ia frecuencia más próxima a Ia de dicho pico determinado en dicha etapa anterior e), como el pico candidato para el tercer parámetro.• determining said peak of the same frequency or of the frequency closest to that of said peak determined in said previous stage e), as the candidate peak for the third parameter.
Y para realizar dicha etapa e.2), el método propuesto comprende llevar a cabo las siguientes acciones:And to perform said step e.2), the proposed method comprises carrying out the following actions:
- si los tres picos candidatos para los tres parámetros son el mismo, seleccionar éste como pico buscado, y asignarle un coeficiente de confianza igual al producto de los tres coeficientes de probabilidades asociados, ó- if the three candidate peaks for the three parameters are the same, select this as the desired peak, and assign a confidence coefficient equal to the product of the three associated probability coefficients, or
- si solamente dos de los tres picos candidatos para los tres parámetros son el mismo, seleccionar éste como pico buscado, si Ia suma de los dos coeficientes de probabilidades asociados es mayor que el coeficiente de probabilidad del pico candidato diferente a dichos dos picos coincidentes, ó- if only two of the three candidate peaks for the three parameters are the same, select this as the sought peak, if the sum of the two associated probability coefficients is greater than the probability coefficient of the different candidate peak to said two coincident peaks, or
- si ninguno de los tres picos candidatos para los tres parámetros son el mismo, seleccionar el pico candidato cuyo coeficiente de probabilidad sea mayor como pico buscado. Una vez determinada Ia frecuencia cardiaca, el método comprende calcular el nivel de saturación de oxígeno en base a una o más de dichas señales fotopletismográficas cuya frecuencia es Ia de dicho pico buscado determinado en Ia etapa e).- If none of the three candidate peaks for the three parameters are the same, select the candidate peak whose probability coefficient is higher as the sought peak. Once the heart rate is determined, the method comprises calculating the level of oxygen saturation based on one or more of said photoplethysmographic signals whose frequency is that of said wanted peak determined in stage e).
La presente invención concierne, en un segundo aspecto, a un oxímetro del tipo que comprende como mínimo:The present invention concerns, in a second aspect, an oximeter of the type comprising at least:
- dos emisores de señales luminosas de distintas longitudes de onda, adaptados para emitir sobre una zona irrigada por capilares sanguíneos de una persona o animal, - uno o más fotodetectores adaptados para detectar dichas señales luminosas, una vez han atravesado dicha zona irrigada por capilares sanguíneos, y- two emitters of light signals of different wavelengths, adapted to emit over an area irrigated by blood capillaries of a person or animal, - one or more photodetectors adapted to detect said light signals, once they have crossed said area irrigated by blood capillaries, and
- un sistema electrónico apto para como mínimo muestrear, tratar y procesar unas señales eléctricas provinentes de dicho o dichos fotodetectores, o señales fotopletismográficas.- an electronic system suitable for at least sampling, processing and processing of electrical signals from said or said photodetectors, or photoplethysmographic signals.
El oxímetro propuesto según el segundo aspecto de Ia presente invención se caracteriza porque el mencionado sistema electrónico que incorpora está adaptado para procesar dichas señales fotopletismográficas para poner en práctica el método propuesto por el primer aspecto de Ia presente invención, es decir que incorpora medios específicos destinados a realizar los cálculos y/o tratamientos de las señales adquiridas, gestión de parámetros, etc.The oximeter proposed according to the second aspect of the present invention is characterized in that said electronic system incorporating it is adapted to process said photoplethysmographic signals to implement the method proposed by the first aspect of the present invention, that is to say it incorporates specific means intended to perform the calculations and / or treatments of the acquired signals, parameter management, etc.
Breve descripción de los dibujos Las anteriores y otras características se comprenderán mejor a partir deBrief description of the drawings The above and other features will be better understood from
Ia siguiente descripción detallada de unos ejemplos de realización con referencia a los dibujos adjuntos, en los que:The following detailed description of some examples of embodiment with reference to the attached drawings, in which:
La Fig. 1 es un diagrama de flujos ilustrativo de las etapas principales del método propuesto según el primer aspecto de Ia presente invención para un ejemplo de realización,Fig. 1 is an illustrative flow chart of the main stages of the proposed method according to the first aspect of the present invention for an exemplary embodiment,
La Fig. 2 es una gráfica que muestra parte del contenido espectral de una señal fotopletismográfica contaminada con señales de ruido o artefactos de movimiento, para un ejemplo de realización,Fig. 2 is a graph showing part of the spectral content of a photoplethysmographic signal contaminated with noise signals or motion artifacts, for an exemplary embodiment,
La Fig. 3 es una gráfica relativa a una función de probabilidad de armónico l(x), cuyo resultado es el mencionado primer parámetro, para un ejemplo de realización,Fig. 3 is a graph relative to a harmonic probability function l (x), whose result is the first parameter mentioned, for an embodiment example,
La Fig. 4 es una gráfica relativa a una función de preponderancia p(x), cuyo resultado es el mencionado segundo parámetro, para un ejemplo de realización, y La Fig. 5 es un diagrama de flujos de las etapas del método propuesto, más detallado que el de Ia Fig. 1 , para un ejemplo de realización. Descripción detallada de unos ejemplos de realizaciónFig. 4 is a graph relative to a preponderance function p (x), the result of which is said second parameter, for an exemplary embodiment, and Fig. 5 is a flow chart of the stages of the proposed method, plus detailed than that of Fig. 1, for an exemplary embodiment. Detailed description of some embodiments
El método para obtener el ritmo cardiaco durante Ia realización de ejercicios se basa en Ia obtención de Ia frecuencia de Ia parte variable de Ia señal fotopletismográfica (PPG). En el caso de un individuo en reposo las variaciones periódicas de intensidad del PPG sólo son debidas a las variaciones de absorción de Ia señal por Ia sangre arterial asociadas a Ia variación del volumen sanguíneo por el bombeo cardiaco. Esta medida se realiza, en general, mediante Ia realización de Ia transformada rápida de Fourier (FFT) a Ia señal PPG. La realización de movimientos del individuo, como por ejemplo durante Ia carrera, conlleva Ia aparición de señales (artefactos) periódicas, que en el intervalo de frecuencias cardiacas accesibles pueden ser de frecuencias parecidas a Ia frecuencia de braceo o pasos. Esto hace que una medida de Ia frecuencia de Ia señal PPG proporcione unos valores aleatorios de frecuencias relacionadas con Ia superposición de las señales debidas al ritmo cardiaco y a los movimientos realizados.The method to obtain the heart rate during the performance of exercises is based on obtaining the frequency of the variable part of the photoplethysmographic signal (PPG). In the case of an individual at rest, periodic variations in PPG intensity are only due to variations in absorption of the signal by arterial blood associated with the variation in blood volume by cardiac pumping. This measurement is carried out, in general, by performing the fast Fourier transform (FFT) to the PPG signal. The performance of individual movements, such as during the race, involves the appearance of periodic signals (artifacts), which in the range of accessible heart rates can be frequencies similar to the frequency of strokes or steps. This makes a measure of the frequency of the PPG signal provide random values of frequencies related to the superposition of the signals due to the heart rate and the movements performed.
Para discriminar entre Ia señal útil (fotopletismográfica) y Ia señal debida a artefactos de movimiento, para Ia concepción del método propuesto según el primer aspecto de Ia presente invención se ha utilizado una estrategia basada en Ia discriminación del contenido armónico de dichas señales. Las señales se pueden, de hecho, considerar periódicas en intervalos de unas decenas de segundos; Ia forma de onda de Ia señal fotopletismográfica es más o menos triangular y Ia de los artefactos de movimiento (según Io observado en medidas reales) resulta de tipo impulsivo o por Io menos con variaciones mucho más rápidas que en Ia primera. Este hecho se refleja en un contenido armónico mucho menor para Ia señal útil que para Ia señal no deseada, cosa que permite en principio separarlas e identificarlas.To discriminate between the useful signal (photoplethysmographic) and the signal due to motion artifacts, a strategy based on the discrimination of the harmonic content of said signals has been used for the conception of the proposed method according to the first aspect of the present invention. The signals can, in fact, be considered periodic at intervals of a few tens of seconds; The waveform of the photoplethysmographic signal is more or less triangular and that of the motion artifacts (as observed in real measurements) is impulsive or at least with much faster variations than in the first. This fact is reflected in a much lower harmonic content for the useful signal than for the unwanted signal, which in principle allows them to be separated and identified.
Para un ejemplo de realización, el método comprende generar un espectro de amplitud de Ia señal sobre un intervalo de datos medidos durante los últimos segundos (ventana temporal) y recalcularlo frecuentemente, obteniendo un diagrama conocido como espectrograma de Ia señal medida. En paralelo, se examina cada uno de los espectros generados para extraer Ia información de las líneas espectrales presentes, eliminando el ruido. Finalmente, un algoritmo novedoso asocia cada línea con su fundamental; el conjunto de líneas se compara con el patrón previsto para Ia señal útil (bajo contenido armónico) de forma que ésta se pueda diferenciar de las otras. La información de amplitud de Ia señal pulsátil se obtiene directamente del valor de las líneas espectrales seleccionadas.For an exemplary embodiment, the method comprises generating a spectrum of amplitude of the signal over a range of data measured during the last seconds (time window) and recalculating it frequently, obtaining a diagram known as spectrogram of the measured signal. In parallel, each of the generated spectra is examined to extract the information from the spectral lines present, eliminating noise. Finally, a novel algorithm associates each line with its fundamental; The set of lines is compared with the pattern provided for the useful signal (low harmonic content) so that it can be distinguished from the others. The amplitude information of the pulsatile signal is obtained directly from the value of the selected spectral lines.
En detalle, el algoritmo mencionado se basa sobre el diagrama de flujos mostrado en Ia figura 1 , representativo de las etapas principales del método propuesto según el primer aspecto de Ia presente invención para un ejemplo de realización.In detail, the aforementioned algorithm is based on the flow chart shown in Figure 1, representative of the main stages of the proposed method according to the first aspect of the present invention for an embodiment.
A continuación se explica cada uno de los bloques del diagrama de Ia Fig. 1 , y su relación con las etapas del método propuesto, expuestas arriba:Next, each block of the diagram of Fig. 1 is explained, and its relationship with the stages of the proposed method, set out above:
Flujo de datos: éste es el flujo de datos (valores de Ia función fotopletismográfica en función del tiempo), muestreado a una oportuna velocidad, que entran en Ia unidad de cálculo. En estos datos se selecciona una ventana de N puntos de una duración T0 predeterminados. Este bloque corresponde a Ia etapa a) mencionada arriba.Data flow: this is the data flow (values of the photoplethysmographic function as a function of time), sampled at a timely speed, entering the calculation unit. In this data, a window of N points of a predetermined duration T0 is selected . This block corresponds to stage a) mentioned above.
FFT: este bloque ejecuta una transformada rápida de Fourier, proporcionando a su salida una señal constituida por el espectro de densidad espectral de potencia de Ia señal en una ventana de tiempo T0; este tipo de señal se suele llamar "espectrograma". De este espectrograma se considerarán solo los M puntos que corresponden a frecuencias interesantes para el tipo de aplicación, incluidas entre 30 y 330 latidos por minuto (ppm), los cuales se encuentran representados por Ia Fig. 2. Este bloque corresponde a Ia etapa b) mencionada arriba.FFT: this block executes a fast Fourier transform, providing at its output a signal constituted by the spectral power density spectrum of the signal in a time window T0 ; This type of signal is usually called a "spectrogram." From this spectrogram, only the M points corresponding to interesting frequencies for the type of application will be considered, including between 30 and 330 beats per minute (ppm), which are represented by Fig. 2. This block corresponds to stage b ) mentioned above.
Detección de picos: este bloque se ocupa de Ia identificación de las "líneas" espectrales presentes en Ia señal proporcionada por el bloque anterior. Debido tanto a Ia presencia intrínseca de ruido electrónico y de interferencia electromagnética, como a los artefactos introducidos por Ia elaboración numérica del espectrograma mismo, es necesario identificar los denominados aquí "picos significativos" para separarlos del ruido. Este bloque corresponde a Ia etapa c) mencionada arriba y tal y como se ha indicado se aplica a parte de las señales espectrales, en concreto a las representadas por los mencionados M puntos.Peak detection: this block deals with the identification of the spectral "lines" present in the signal provided by the previous block. Due to both the intrinsic presence of electronic noise and electromagnetic interference, as well as the artifacts introduced by the numerical elaboration of the spectrogram itself, it is necessary to identify the so-called here "significant peaks" to separate them from noise. This block corresponds to the stage c) mentioned above and, as indicated, is applied to part of the spectral signals, specifically to those represented by said M points.
La mencionada detección de picos se efectúa en cuatro pasos:The mentioned detection of peaks is carried out in four steps:
1. En el primer paso se identifica el valor más alto presente en el diagrama o espectrograma, Io cual permite obtener una escala general del diagrama; se denominará a este valor VMAX (ver Fig. 2). 2. En el segundo paso se dividen, a Io largo del eje horizontal, los datos del diagrama en secciones, cada una de ellas con P puntos1. In the first step the highest value present in the diagram or spectrogram is identified, which allows to obtain a general scale of the diagram; this value will be called VMAX (see Fig. 2). 2. In the second step, along the horizontal axis, the diagram data is divided into sections, each with P points
(típicamente P es un número pequeño entre 3 y 9), y a cada sección se Ie asocia el valor medio de Ia amplitud del espectro en los puntos que Ia componen. Se denominará al diagrama obtenido "diagrama reducido". Sobre este diagrama se actúa con un algoritmo clásico de búsqueda de mínimos locales.(typically P is a small number between 3 and 9), and the average value of the amplitude of the spectrum at the points that compose it is associated with each section. The obtained diagram will be called "reduced diagram". This diagram acts with a classic algorithm for local minimum search.
3. En el tercer paso se "afina" Ia búsqueda, localizando para cada sección, que ha resultado elegida en el paso anterior, el máximo real en el diagrama completo. 4. Al final, se descartan los picos con valor, es decir energía, por debajo de VMAX I KS, siendo Ks el nivel esperado de ruido en Ia medida (típicamente alrededor de 2OdB).3. In the third step the search is "refined", locating for each section, which has been chosen in the previous step, the real maximum in the complete diagram. 4. In the end, the peaks with value, that is to say energy, are discarded below VMAX I KS, where Ks is the expected level of noise in the measurement (typically around 2OdB).
El paso 2 consigue rechazar, como picos separados, artefactos matemáticos que generan dos picos aparentes muy cercanos en el espectrograma; esto es debido, por ejemplo, a Ia interacción entre el algoritmo FFT y Ia ventana de filtrado (cuadrada, Hamming, Hanning, etc.) utilizada antes de dicho algoritmo. El paso 3 recupera (en parte) Ia resolución en frecuencia, y el paso 4 elimina picos locales de valor muy bajo generados por el ruido.Step 2 manages to reject, as separate peaks, mathematical artifacts that generate two apparent peaks very close in the spectrogram; This is due, for example, to the interaction between the FFT algorithm and the filtering window (square, Hamming, Hanning, etc.) used before said algorithm. Step 3 recovers (in part) the resolution in frequency, and step 4 eliminates very low local peaks generated by noise.
Un típico resultado de Ia aplicación de dicho algoritmo se encuentra indicado en Ia gráfica de Ia figura 2, donde los picos con el círculo en línea continua se han seleccionado como "válidos", y aquellos que aparecen en línea discontinua como "ruido". La salida del bloque "Detección de picos" es una lista ordenada de pares (frecuencia, valor) que identifica los picos. Estos datos se envían, en paralelo, a tres bloques separados, que son los siguientes.A typical result of the application of said algorithm is indicated in the graph of Figure 2, where the peaks with the circle in a continuous line have been selected as "valid", and those that appear in a broken line as "noise". The output of the "Peak Detection" block is an ordered list of pairs (frequency, value) that identifies the peaks. This data is sent, in parallel, to three separate blocks, which are as follows.
Armónicos: en este bloque se efectúa Ia búsqueda de líneas que probablemente pertenecen a Ia misma señal. El algoritmo se basa en comparar las líneas espectrales entre ellas, dos a dos, calculando el cociente
Figure imgf000013_0001
donde Ia primera frecuencia es Ia mayor de Ia pareja de picos en examen. Esta fracción se usa como entrada en una función de probabilidad de armónico l(x), cuya forma es estilizada en Ia gráfica de Ia figura 3. La salida de esta función se ha dado en llamar en el apartado anterior, como primer parámetro.Harmonics: in this block the search of lines that probably belong to the same signal is carried out. The algorithm is based on comparing the spectral lines between them, two by two, calculating the quotient
Figure imgf000013_0001
where the first frequency is the highest of the pair of peaks under examination. This fraction is used as input in a harmonic probability function l (x), whose shape is stylized in the graph of Figure 3. The output of this function has been called in the previous section, as the first parameter.
La salida de dicha función indica Ia probabilidad para Ia frecuencia fA de ser un armónico de Ia frecuencia fB. Este método, repetido para cada frecuencia, permite identificar cuales de las líneas identificadas son las que tienen más probabilidad de ser fundamentales, el contenido armónico de ellas (suma de los valores de las frecuencias que resultan probables armónicos), y un índice de fiabilidad de dicha evaluación (producto de las l(x) de dichos armónicos).The output of said function indicates the probability for the frequency fA of being a harmonic of the frequency fB. This method, repeated for each frequency, allows identifying which of the lines identified are the most likely to be fundamental, the harmonic content of them (sum of the values of the frequencies that are likely harmonic), and a reliability index of said evaluation (product of the l (x) of said harmonics).
Energía: este bloque también analiza los picos dos a dos, proporcionando un coeficiente que expresa cuanto cada pico es más significativo, en energía, del otro. Este coeficiente se llama preponderancia del pico mayor sobre el pico menor, y se calcula con una función de preponderancia que tiene el aspecto que se muestra en Ia figura 4. La salida de esta función se ha dado en llamar en el apartado anterior, como segundo parámetro.Energy: this block also analyzes peaks two to two, providing a coefficient that expresses how much each peak is more significant, in energy, than the other. This coefficient is called the preponderance of the major peak over the minor peak, and is calculated with a preponderance function that has the appearance shown in Figure 4. The output of this function has been called in the previous section, as the second parameter.
Historia: este bloque analiza Ia historia del valor del pico elegido, en instantes anteriores, como pico "valido" de Ia señal fotopletismográfica. Si en el paso anterior un pico había sido seleccionado por el bloque final con un coeficiente de confianza (ver descripción siguiente) igual a uno o muy cercano, y en el nuevo espectrograma se ha encontrado un pico muy cercano a él, este pico viene presentado al bloque siguiente como un candidato con alta probabilidad para ser el nuevo pico "bueno". La probabilidad que se Ie asigna es el valor de confianza devaluado por un coeficiente D (entre 10 y 50%). La salida de esta función se ha dado en llamar en el apartado anterior, como tercer parámetro.History: this block analyzes the history of the value of the chosen peak, in previous moments, as a "valid" peak of the photoplethysmographic signal. If in the previous step a peak had been selected by the final block with a confidence coefficient (see following description) equal to one or very close, and in the new spectrogram a peak was found very close to it, this peak is presented to the next block as a candidate with high probability to be the new "good" peak. The probability assigned is the confidence value devalued by a D coefficient (between 10 and 50%). The output of this function has been called in the previous section, as the third parameter.
Heurístico: este bloque toma Ia decisión de cual es el pico que representa el armónico fundamental de Ia señal fotopletismográfica basándose sobre Ia información proporcionada por los bloques anteriores. Es el encargado de llevar a cabo Ia anteriormente mencionada etapa e).Heuristic: this block makes the decision of which is the peak that represents the fundamental harmonic of the photoplethysmographic signal based on the information provided by the previous blocks. He is responsible for carrying out the aforementioned stage e).
Comprende con una serie de pasos, siendo los siguientes los concernientes a Ia mencionada sub-etapa e.1 ):It comprises a series of steps, the following being those concerning the mentioned sub-stage e.1):
• Se determina el candidato por armónicos: con todas las frecuencias que el bloque "Armónicos" ha determinado como fundamentales, se prepara una lista ordenada con el contenido armónico decreciente. Se asigna entonces una probabilidad creciente (tanto más alta cuanto menor sea el contenido armónico) a dichas frecuencias de ser Ia frecuencia elegida. Se pondera Ia probabilidad con Ia amplitud de Ia fundamental, quitando "méritos" a señales muy débiles. El pico con probabilidad más alta es el pico candidato por armónicos.• The candidate is determined by harmonics: with all the frequencies that the "Harmonics" block has determined as fundamental, an ordered list is prepared with the decreasing harmonic content. An increasing probability (the higher the lower the harmonic content) is then assigned to said frequencies if the chosen frequency is. The probability is weighted with the amplitude of the fundamental, removing "merits" to very weak signals. The peak with the highest probability is the candidate peak for harmonics.
• Se determina un candidato por preponderancia: es el pico más alto, con su probabilidad, proporcionado por el bloque "Energía".• A candidate is determined by preponderance: it is the highest peak, with its probability, provided by the "Energy" block.
• Se determina el candidato por historia, proporcionado por el bloque "Historia".• The candidate is determined by history, provided by the "History" block.
Y siendo los siguientes pasos, o criterios, los concernientes a Ia anteriormente explicada sub-etapa e.2), y llevados a cabo para determinar el pico que representa el armónico fundamental de Ia señal fotopletismográfica (pico "bueno") son los siguientes:And being the following steps, or criteria, those concerning the previously explained sub-stage e.2), and carried out to determine the peak representing the fundamental harmonic of the photoplethysmographic signal ("good" peak) are the following:
1. Si los tres candidatos coinciden, el candidato es elegido como pico "bueno", con un coeficiente de confianza dado por el producto de las tres probabilidades asociadas.1. If the three candidates coincide, the candidate is chosen as a "good" peak, with a confidence coefficient given by the product of the three associated probabilities.
2. Si dos de ellos coinciden, se elige este dato siempre y cuando Ia suma de las dos probabilidades asociadas sea mayor que Ia tercera;2. If two of them coincide, this data is chosen as long as the sum of the two associated probabilities is greater than the third;
3. En cualquier otro caso se elige el pico que presenta máxima probabilidad. A partir de estos datos se calculan Ia frecuencia cardiaca (Ia coordenada horizontal del pico fundamental elegido), y los datos de amplitud de Ia señal fotopletismográficas necesarios para calcular Ia saturación de oxígeno.3. In any other case, the peak with the highest probability is chosen. From these data, the heart rate (the horizontal coordinate of the fundamental peak chosen) is calculated, and the amplitude data of the photoplethysmographic signal necessary to calculate the oxygen saturation.
Para Ia ejecución del método propuesto mediante el oxímetro propuesto según el segundo aspecto de Ia presente invención, los numerosos coeficientes involucrados se ajustan de una vez por todas después de una serie de medidas, por comparación y calibración con un aparato comercial; especialmente fidedigna es Ia calibración del algoritmo que permite calcular Ia frecuencia cardiaca en cuanto el valor de referencia puede obtenerse de aparatos de ECG que garantizan alta precisión. Más compleja es Ia calibración del dato de saturación de oxígeno.For the execution of the method proposed by the oximeter proposed according to the second aspect of the present invention, the numerous coefficients involved are adjusted once and for all after a series of measurements, by comparison and calibration with a commercial apparatus; Especially reliable is the calibration of the algorithm that allows to calculate the heart rate as soon as the reference value can be obtained from ECG devices that guarantee high precision. More complex is the calibration of the oxygen saturation data.
En Ia Fig. 5 se muestra un diagrama de flujos de las etapas del método propuesto, en detalle, para otro ejemplo de realización, el cual se explica a continuación. El ejemplo de realización ilustrado en dicha Fig. 5 está basado en un sistema que adquiere datos analógicos de fototransmitancia con alta velocidad de muestro (procedente de 2 a 4 láseres) para permitir un anti-aliasing analógico sencillo. Dicha adquisición Ia realiza el bloque indicado como 2 en Ia Fig. 5, y en concreto dicha velocidad de muestreo es de 1 kHz. Los datos muestreados han sido previamente filtrados en el bloque 1.In Fig. 5 a flow chart of the steps of the proposed method is shown, in detail, for another embodiment, which is explained below. The exemplary embodiment illustrated in said Fig. 5 is based on a system that acquires analog phototransmittance data with high sampling rate (from 2 to 4 lasers) to allow a simple analog anti-aliasing. Said acquisition Ia performs the block indicated as 2 in Fig. 5, and in particular said sampling rate is 1 kHz. The sampled data has been previously filtered in block 1.
En el bloque indicado como 3 se realiza otro filtrado, en este caso un filtrado analógico de 4o orden de Bessel (para mantener Ia información de forma de los pulsos se utiliza un filtro con fase lineal) y una decimación de los datos hasta 100 Sa/s por canal. Tras dicho filtrado se utilizan varias estrategias en paralelo para llegar aIn the block indicated as 3 another filtering is performed, in this case an analog filtering of 4or Bessel order (to maintain the information in the form of the pulses a filter with linear phase is used) and a decimation of the data up to 100 Sa / s per channel. After this filtering, several strategies are used in parallel to reach
Ia determinación de los datos de interés, que son Ia frecuencia cardiaca (indicada en Ia Fig. 5 como PPM) y las componentes pulsátil y continua de Ia señal de cada láser.The determination of the data of interest, which are the heart rate (indicated in Fig. 5 as PPM) and the pulsatile and continuous components of the signal of each laser.
Se calcula, además, con cada estrategia un factor de confianza C, que estime Ia significatividad del valor obtenido.In addition, a confidence factor C is calculated with each strategy, which estimates the significance of the value obtained.
Se efectúa una FFT sobre una ventana de los último 10 segundos de datos filtrados y decimados (bloque 4). Se realiza una identificación de un numero NP de picos principales (de 3 a 7 picos) (bloque 8)An FFT is performed on a window of the last 10 seconds of filtered and decimated data (block 4). An identification of an NP number of main peaks (from 3 to 7 peaks) is made (block 8)
Se realiza una estimación de los picos con más potencia, utilizando Ia diferencia entre el pico más potente y el segundo como factor de confianza (bloquelO).An estimate of the peaks with more power is made, using the difference between the most powerful peak and the second as a confidence factor (block).
Se realiza una estimación de Ia probabilidad de que cada pico sea parte del contenido armónico de Ia misma señal, utilizando el siguiente método (bloque 9), mediante las siguientes etapas: i. calcular para cada pareja de picos f1 , f2 una función de f1/f2 que tenga valor 1 en los enteros y rápidamente decreciente alrededor de ellos ii. comparar el resultado de esta función con un umbral prefijado iii. asignar un factor de confianza basado sobre Ia anterior comparaciónAn estimate is made of the probability that each peak is part of the harmonic content of the same signal, using the following method (block 9), through the following steps: i. calculate for each pair of peaks f1, f2 a function of f1 / f2 that has a value of 1 in the integers and rapidly decreases around them ii. compare the result of this function with a preset threshold iii. assign a confidence factor based on the previous comparison
Se realiza una estimación de Ia amplitud pulsátil en el dominio del tiempo, utilizando Ia estimación de ruido como factor de confianza (bloque 6).An estimation of the pulsatile amplitude in the time domain is made, using the noise estimate as a confidence factor (block 6).
Se realiza una estimación del valor medio de Ia señal, por medio de un filtrado paso-bajo a 0.1 Hz y un retraso para sincronizar los filtros (no se necesita valor de confianza), mediante el bloque 7.An estimate of the average value of the signal is made, by means of a low-pass filter at 0.1 Hz and a delay to synchronize the filters (no trust value is needed), by block 7.
Con todos los datos anteriores y el valor anterior elegido de PPM con su confianza, se selecciona el nuevo valor de PPM para Ia medida actual, utilizando un algoritmo empírico que elige Ia medida con mejor confianza siempre y cuando no tenga confianza menor que Ia medida anterior, en cual caso se mantiene Ia otra. Ello se realiza mediante el bloque 11 y el 12, este último encargado también de calcular Ia saturación de oxígeno basándose en Ia comparación de todos los valores pulsátiles de los láseres con los cuales se ha emitido para obtener las señales fotopletismográficas, utilizando método de promedio y de máxima confianza para elegir el valor correcto.With all the previous data and the previous chosen value of PPM with your confidence, the new PPM value for the current measurement is selected, using an empirical algorithm that chooses the measurement with better confidence as long as you have no confidence less than the previous measurement , in which case the other is maintained. This is done by block 11 and 12, the latter also responsible for calculating the oxygen saturation based on the comparison of all the pulsatile values of the lasers with which it has been emitted to obtain the photoplethysmographic signals, using average method and of maximum confidence to choose the correct value.
Un experto en Ia materia podría introducir cambios y modificaciones en los ejemplos de realización descritos sin salirse del alcance de Ia invención según está definido en las reivindicaciones adjuntas. Ejemplo de implementación informático del método:A person skilled in the art could introduce changes and modifications in the described embodiments without departing from the scope of the invention as defined in the appended claims. Example of computer implementation of the method:
Como ejemplo de implementación del método propuesto se incluyen una serie de instrucciones de un programa informático, en lenguaje C propio de LabWindows/CVr, que se desarrolla en los apéndices A y B, y que implementa el método propuesto según el primer aspecto de Ia presente invención.As an example of implementation of the proposed method, a series of instructions of a computer program are included, in the C language of LabWindows / CVr, which is developed in Appendices A and B, and that implements the proposed method according to the first aspect of this invention.
El grupo de instrucciones incluidas en los dos apéndices A y B constituyen el núcleo de cálculo de Ia frecuencia cardiaca del oxímetro implementado por los inventores, y propuesto por el segundo aspecto de Ia invención. El programa recibe los datos en el tiempo en un canal por medio de Ia función add_fft_points() (llamado por el programa principal del instrumento) y los acumula en un buffer cíclico; en cuanto consigue los puntos necesarios (FFT_POINTS, definidos en el fichero cardfft.h) emite una señal al programa principal que llama Ia routina compute_fft_hb() que realiza el cálculo descrito anteriormente.The group of instructions included in the two appendices A and B constitute the core for calculating the heart rate of the oximeter implemented by the inventors, and proposed by the second aspect of the invention. The program receives the data in time in a channel through the function add_fft_points () (called by the main program of the instrument) and accumulates them in a cyclic buffer; As soon as it obtains the necessary points (FFT_POINTS, defined in the cardfft.h file) it emits a signal to the main program that calls the routing compute_fft_hb () that performs the calculation described above.
' Nombre registrado por National Instrument, inc. APÉNDICE A: PROGRAMA DE CÁLCULO DE FRECUENCIA CARDIACA - CARDFFT.H' Name registered by National Instrument, inc. APPENDIX A: CARDIAC FREQUENCY CALCULATION PROGRAM - CARDFFT.H
tifndef _CARDFFT_H tdefine _CARDFFT_Htifndef _CARDFFT_H tdefine _CARDFFT_H
tdefine FFT_POINTS 2048 tdefine FFT_OVERLAP (1024+512+256)tdefine FFT_POINTS 2048 tdefine FFT_OVERLAP (1024 + 512 + 256)
tdefine FFT_NOTREADY 0 tdefine FFT_READY 1 tdefine FFT_NOTREADY_BUT_DUE 2tdefine FFT_NOTREADY 0 tdefine FFT_READY 1 tdefine FFT_NOTREADY_BUT_DUE 2
/* See the .c file for comments *// * See the .c file for comments * /
// Heuristic "guess" data formats// Heuristic "guess" data formats
struct oneguess { int index; double freq; double valué; };struct oneguess {int index; double freq; double valué; };
struct guesses { int n; struct oneguess guess [3]; // at most 3 guesses };struct guesses {int n; struct oneguess guess [3]; // at most 3 guesses};
void initialize_fft (double samplerate, double bpm_min, double bpm_max) ;void initialize_fft (double samplerate, double bpm_min, double bpm_max);
int add_fft_points (double *Chl_data, double *Ch2_data, int NumPoints) ;int add_fft_points (double * Chl_data, double * Ch2_data, int NumPoints);
void first_n_power_spectrum (double ** x_out_array, double ** y_out_array, int * i_min, int * i_max) ;void first_n_power_spectrum (double ** x_out_array, double ** y_out_array, int * i_min, int * i_max);
void compute_fft_hb (double * hb, double * valué, int * index, double *confiance, struct guesses *report) ;void compute_fft_hb (double * hb, double * valué, int * index, double * confiance, struct guesses * report);
/* Tunables . *// * Tunables. * /
/* There is a very BIG BUG in the LabWindows/CVI C implementation . Globals var are cleared when first entering the module./ * There is a very BIG BUG in the LabWindows / CVI C implementation. Globals var are cleared when first entering the module.
extern double heu_max_win_threshold; //= 2.5*2.5; extern double heu_cutoff; // = 10.0*10.0; extern double heu_doubliness_factor; // = 12; */extern double heu_max_win_threshold; // = 2.5 * 2.5; extern double heu_cutoff; // = 10.0 * 10.0; extern double heu_doubliness_factor; // = 12; * /
void set_doubliness_cutoff_maxwin (double p_heu_max_win_threshold, double p_heu_cutoff, double p_heu_doubliness_factor) ;void set_doubliness_cutoff_maxwin (double p_heu_max_win_threshold, double p_heu_cutoff, double p_heu_doubliness_factor);
#endif#endif
APÉNDICE B: PROGRAMA DE CÁLCULO DE FRECUENCIA CARDIACA - CARDFFT.C tinclude <analysis.h> tinclude <ansi_c.h> tinclude "cardfft.h"APPENDIX B: CARDIAC FREQUENCY CALCULATION PROGRAM - CARDFFT.C tinclude <analysis.h> tinclude <ansi_c.h> tinclude "cardfft.h"
double time_chl [FFT_POINTS] ; double time_accu_chl [FFT_POINTS] ; static int chl_cursor=0; static int have_good_fft_data=0;double time_chl [FFT_POINTS]; double time_accu_chl [FFT_POINTS]; static int chl_cursor = 0; static int have_good_fft_data = 0;
/* FFT parameters and data */ double timespan, timestep, fmax, fstep; double bpm_min, bpm_max; int i_bpm_min, i_bpm_max; double fft_data[FFT_POINTS] ; double x fft data [FFT POINTS];/ * FFT parameters and data * / double timespan, timestep, fmax, fstep; double bpm_min, bpm_max; int i_bpm_min, i_bpm_max; double fft_data [FFT_POINTS]; double x fft data [FFT POINTS];
/* Euristics parameters and base functions *// * Euristics parameters and base functions * /
/* NOTE: the LabWindows/CVI Spectrum() function returns a Power Spectrum and not a plain FFT like the one in PyNum packages. We have to adjust parameters for this. Confiance meaning is changed, too. *// * NOTE: the LabWindows / CVI Spectrum () function returns a Power Spectrum and not a plain FFT like the one in PyNum packages. We have to adjust parameters for this. Confiance meaning is changed, too. * /
// changing this parameters may be *really* dangerous. Hope you know what you ' re doing static int heu_volta; /* Which round is this? */ static struct oneguess heu_last_guess; /* Last HB guess */ static double heu_last_conf=0; /* and its confiance */ static double heu_conf_doubleness_threshold = 0.5; /* Is this f double enough? */ static double heu_max_win_threshold = 2.5*2.5; /* If it's THAT bigger, win */ static double heu_cutoff = 10.0*10.0; /* Under this lies noise */ static double heu_doubliness_factor = 12; /* parameters of followin funes */ static int heu_groups = 5; /* maxs so near are really one max */ static double heu_goodmax_factor = 0.1*0.2; /* max dumping parameter */ static int heu_bpm_too_near_min = 2; /* too low, probably noise */ static double heu_oldval_conf_threshold = 0.75; /* conf threshold to check oíd valué */ static double heu_oldval_oldconf_threshold = 0.1;// changing this parameters may be * really * dangerous. Hope you know what you're doing static int heu_volta; / * Which round is this? * / static struct oneguess heu_last_guess; / * Last HB guess * / static double heu_last_conf = 0; / * and its confiance * / static double heu_conf_doubleness_threshold = 0.5; / * Is this f double enough? * / static double heu_max_win_threshold = 2.5 * 2.5; / * If it's THAT bigger, win * / static double heu_cutoff = 10.0 * 10.0; / * Under this lies noise * / static double heu_doubliness_factor = 12; / * parameters of followin funes * / static int heu_groups = 5; / * maxs so near are really one max * / static double heu_goodmax_factor = 0.1 * 0.2; / * max dumping parameter * / static int heu_bpm_too_near_min = 2; / * too low, probably noise * / static double heu_oldval_conf_threshold = 0.75; / * conf threshold to check oíd valué * / static double heu_oldval_oldconf_threshold = 0.1;
/* under this, do not even consider oíd data */ static double heu_oldval_conf_dumping = 2; /* loss of confiance: factor */ static double heu_oldval_conf_loss = 0.1; /* like above, valué */ static double heu_oldval_max_rel_delta = 0.3; /* relative difference "suspicious" */ static double heu_oldval_max_abs_delta = 20; /* absolute (bpm) like above *// * under this, do not even consider oid data * / static double heu_oldval_conf_dumping = 2; / * loss of confiance: factor * / static double heu_oldval_conf_loss = 0.1; / * like above, valué * / static double heu_oldval_max_rel_delta = 0.3; / * relative difference "suspicious" * / static double heu_oldval_max_abs_delta = 20; / * absolute (bpm) like above * /
double only_pos (double x) { return (x>0)? x : 0;}double only_pos (double x) {return (x> 0)? x: 0;}
double heu_near_two (double x) { return only_pos (l-heu_doubliness_factor* (x-2) * (x-2) ) ; }double heu_near_two (double x) {return only_pos (l-heu_doubliness_factor * (x-2) * (x-2)); }
double heu_good_max (double vmax, double vnextmax) { // sqrt() is for the power spectra return only_pos (1-sqrt (heu_goodmax_factor*vmax/vnextmax) ) ; } void initialize_fft (double samplerate, double p_bpm_min, double p_bpm_max) { int i;double heu_good_max (double vmax, double vnextmax) {// sqrt () is for the power spectra return only_pos (1-sqrt (heu_goodmax_factor * vmax / vnextmax)); } void initialize_fft (double samplerate, double p_bpm_min, double p_bpm_max) {int i;
/* zeroes the accumulators */ for (i=0;i<FFT_POINTS;i++) { time_chl [i]=0; time_accu_chl [i] =0; } chl_cursor=0;/ * zeroes the accumulators * / for (i = 0; i <FFT_POINTS; i ++) {time_chl [i] = 0; time_accu_chl [i] = 0; } chl_cursor = 0;
/* Normally: timestep is 0.01 sec; timespan=2048*0.01; delta_f=l/ (0.01*2048) =0.0488 s=2.92 bpm. *// * Normally: timestep is 0.01 sec; timespan = 2048 * 0.01; delta_f = l / (0.01 * 2048) = 0.0488 s = 2.92 bpm. * /
timestep=l/samplerate; /* from *measure.htimestep = l / samplerate; / * from * measure.h
*/ timespan=timestep*FFT_POINTS; /* from cardfft.h */ fmax= (1/timestep) /2; fstep= (1/timespan) ;* / timespan = timestep * FFT_POINTS; / * from cardfft.h * / fmax = (1 / timestep) / 2; fstep = (1 / timespan);
/* The "interesting" frequency range is the following: bpm_min=30; bpm_max=250; *// * The "interesting" frequency range is the following: bpm_min = 30; bpm_max = 250; * /
/* Normally: 30 bpm = Índex 10/ * Normally: 30 bpm = Index 10
To: 250 bpm = Índex 85 (ejem... more or less) . */To: 250 bpm = Index 85 (ahem ... more or less). * /
bpm_min=p_bpm_min; bpm_max=p_bpm_max; i_bpm_min= (int) ( (bpm_min/60.0) /fstep) ; i_bpm_max= (int) ( (bpm_max/60.0) /fstep) ;bpm_min = p_bpm_min; bpm_max = p_bpm_max; i_bpm_min = (int) ((bpm_min / 60.0) / fstep); i_bpm_max = (int) ((bpm_max / 60.0) / fstep);
/* Build the x-axis-data (fixed) *// * Build the x-axis-data (fixed) * /
for (i=0;i<FFT_POINTS;i++) { x_fft_data[i]=(fstep*60) *i; }for (i = 0; i <FFT_POINTS; i ++) {x_fft_data [i] = (fstep * 60) * i; }
have_good_fft_data=0; heu_volta=0; }have_good_fft_data = 0; heu_volta = 0; }
tdefine FFT_DUE_AFTER (FFT_POINTS - FFT_OVERLAP)tdefine FFT_DUE_AFTER (FFT_POINTS - FFT_OVERLAP)
int add_fft_points (double *Chl_data, double *Ch2_data, int NumPoints) { // ignore Ch2_data for now...int add_fft_points (double * Chl_data, double * Ch2_data, int NumPoints) { // ignore Ch2_data for now ...
int i; static int points_read=0;int i; static int points_read = 0;
if (NumPoints + FFT_OVERLAP > FFT_POINTS - 1) { fprintf (stderr, "AYEEEEEE!!!! add_fft_points will fail horribly! ! !\n") ;if (NumPoints + FFT_OVERLAP> FFT_POINTS - 1) {fprintf (stderr, "AYEEEEEE !!!! add_fft_points will fail horribly!!! \ n");
} if (Ch2_data) { fprintf (stderr, "HMMMM... I am ignoring other channel data for now! !\n"); }} if (Ch2_data) {fprintf (stderr, "HMMMM ... I am ignoring other channel data for now!! \ n"); }
if (chl_cursor + NumPoints < FFT_POINTS) {if (chl_cursor + NumPoints <FFT_POINTS) {
// simply fill it and return with not ready flag memcpy (& (time_accu_chl [chl_cursor] ) , Chl_data, NumPoints*sizeof (double) ) ; chl_cursor += NumPoints; points_read += NumPoints; if (points_read <= FFT_DUE_AFTER) { return FFT_NOTREADY; } else { points_read -= FFT_DUE_AFTER; return FFT_NOTREADY_BUT_DUE;// simply fill it and return with not ready flag memcpy (& (time_accu_chl [chl_cursor]), Chl_data, NumPoints * sizeof (double)); chl_cursor + = NumPoints; points_read + = NumPoints; if (points_read <= FFT_DUE_AFTER) {return FFT_NOTREADY; } else {points_read - = FFT_DUE_AFTER; return FFT_NOTREADY_BUT_DUE;
} }}}
// Tricky part. // we have to fill time_accu till FFT_POINTS for (i=0; i+chl_cursor<FFT_POINTS; i++) time_accu_chl [chl_cursor+i] =Chl_data [i] ; // there *is* a better way// Tricky part. // we have to fill time_accu till FFT_POINTS for (i = 0; i + chl_cursor <FFT_POINTS; i ++) time_accu_chl [chl_cursor + i] = Chl_data [i]; // there * is * a better way
// Chl_data[i] is the first unused data now...// Chl_data [i] is the first unused data now ...
// ok, now move the data to the "good" vector:// ok, now move the data to the "good" vector:
memcpy (time_chl, time_accu_chl, FFT_POINTS*sizeof (double) );memcpy (time_chl, time_accu_chl, FFT_POINTS * sizeof (double));
// now prepare the accu vector with the overlap; memcpy (time_accu_chl, & (time_chl [FFT_POINTS-FFT_OVERLAP] ) ,// now prepare the accu vector with the overlap; memcpy (time_accu_chl, & (time_chl [FFT_POINTS-FFT_OVERLAP]),
FFT_OVERLAP*sizeof (double) ) ; chl_cursor=FFT_OVERLAP; // copy the remaining points for (; i<NumPoints; i++) { time_accu_chl [chl_cursor] =Chl_data [i] ; chl_cursor++; }FFT_OVERLAP * sizeof (double)); chl_cursor = FFT_OVERLAP; // copy the remaining points for (; i <NumPoints; i ++) {time_accu_chl [chl_cursor] = Chl_data [i]; chl_cursor ++; }
points_read += NumPoints - FFT_DUE_AFTER; return FFT_READY; }points_read + = NumPoints - FFT_DUE_AFTER; return FFT_READY; }
/* Perform FFT on time_chl *// * Perform FFT on time_chl * /
void first_n_power_spectrum(double ** x_out, double ** y_out, int * n_min, int *n_max) { // NOTE: it destroys time_chl ! ! !void first_n_power_spectrum (double ** x_out, double ** y_out, int * n_min, int * n_max) {// NOTE: it destroys time_chl! ! !
Spectrum (time_chl, FFT_POINTS) ; memcpy (fft_data, time_chl, i_bpm_max*sizeof (double) );Spectrum (time_chl, FFT_POINTS); memcpy (fft_data, time_chl, i_bpm_max * sizeof (double));
*x_out=x_fft_data;* x_out = x_fft_data;
*y_out=fft_data; *n_min=i_bpm_min;* y_out = fft_data; * n_min = i_bpm_min;
*n_max=i_bpm_max; have_good_fft_data=1;* n_max = i_bpm_max; have_good_fft_data = 1;
}}
void zeroes_two_vect (double *dv, int *iv, int n) { int j ; for (j=0; j<n;j++) { dv[j]=0; Iv[J]=O;void zeroes_two_vect (double * dv, int * iv, int n) {int j; for (j = 0; j <n; j ++) {dv [j] = 0; Iv [J] = O;
} }}}
void sort_two_vect_dec (double *dv, int *iv, int n) { // sort decreasing based on dv valúes, iv valúes are copied. int i,j; int ti; double td; for (i=0; Kn-I; i++) { for (j=i+l; j<n; j++) { if (dv[i]<dv[j] ) { // swap td=dv[i] ; ti=iv[i] ; dv[i]=dv[j] ; iv[i]=iv[j]; dv[j]=td; iv[j]=ti;void sort_two_vect_dec (double * dv, int * iv, int n) {// sort decreasing based on dv valúes, iv valúes are copied. int i, j; int you; double td; for (i = 0; Kn-I; i ++) {for (j = i + l; j <n; j ++) {if (dv [i] <dv [j]) {// swap td = dv [i] ; ti = iv [i]; dv [i] = dv [j]; iv [i] = iv [j]; dv [j] = td; iv [j] = you;
void sort_two_vect_inc (double *dv, int *iv, int n) {void sort_two_vect_inc (double * dv, int * iv, int n) {
// sort increasing based on dv valúes, iv valúes are copied. int i,j; int ti; double td;// sort increasing based on dv valúes, iv valúes are copied. int i, j; int you; double td;
for (i=0;i<n-l;i++) { for (j=i+l; j<n; j++) { if (dv[i]>dv[j]) { // swap td=dv[i] ; ti=iv[i] ; dv[i]=dv[j]; iv[i]=iv[j]; dv[j]=td; iv[j]=ti;for (i = 0; i <nl; i ++) {for (j = i + l; j <n; j ++) {if (dv [i]> dv [j]) {// swap td = dv [i] ; ti = iv [i]; dv [i] = dv [j]; iv [i] = iv [j]; dv [j] = td; iv [j] = you;
// FiIl my_guesses with the at most three máxima /* The FFT data is in the two arrays xdata and ydata.// FiIl my_guesses with the at most three maxim / * The FFT data is in the two arrays xdata and ydata.
Note!: it uses the global variables i_bpm_min, i_bpm_max to limit the search in the interesting zone!Note !: it uses the global variables i_bpm_min, i_bpm_max to limit the search in the interesting zone!
*/* /
void compute_rel_max (double *xdata, double *ydata, struct guesses * out_guesses) {void compute_rel_max (double * xdata, double * ydata, struct guesses * out_guesses) {
int i,j,k,g; int m_found=0;int i, j, k, g; int m_found = 0;
int i_absmax=0; double absmax=0;int i_absmax = 0; double absmax = 0;
double smooth[FFT_POINTS] ; // too big, but uf... int ngroups, i_realmax; double s, realmax; double smoothed_maxs_v[4] ; // one more than the interesting int smoothed_maxs_i [4] ; int s_max_found=0; double real_maxs_v[3] ; int real_maxs_i [3] ;double smooth [FFT_POINTS]; // too big, but uf ... int ngroups, i_realmax; double s, realmax; double smoothed_maxs_v [4]; // one more than the interesting int smoothed_maxs_i [4]; int s_max_found = 0; double real_maxs_v [3]; int real_maxs_i [3];
// pass 1: find the absolute máximum// pass 1: find the absolute maximum
for (i=i_bpm_min; i<i_bpm_max; i++) { if (ydata [i] >absmax) { i_absmax=i; absmax=ydata [i] ; }for (i = i_bpm_min; i <i_bpm_max; i ++) {if (ydata [i]> absmax) {i_absmax = i; absmax = ydata [i]; }
}}
// Ok. Now found groups that have a relative significative máximum // build the smoothed and reduced vector// Okay. Now found groups that have a relative significative maximum // build the smoothed and reduced vector
ngroups= (int) ( (i_bpm_max-i_bpm_min) /heu_groups) -1;ngroups = (int) ((i_bpm_max-i_bpm_min) / heu_groups) -1;
for (i=0;i<ngroups;i++) { s=0; for (k=0 ; k<heu_groups ; k++) s += ydata [i_bpm_min + heu_groups *i +for (i = 0; i <ngroups; i ++) {s = 0; for (k = 0; k <heu_groups; k ++) s + = ydata [i_bpm_min + heu_groups * i +
smooth [ i] =s/heu_groups ; }smooth [i] = s / heu_groups; }
// Ok. Now we have to find all the relevant relative max of smooth. // Relevant means : 1) greater than absmax/heu_cutoff // 2) at most three.// Okay. Now we have to find all the relevant relative max of smooth. // Relevant means: 1) greater than absmax / heu_cutoff // 2) at most three.
zeroes_two_vect (smoothed_maxs_v, smoothed_maxs_i, 4);zeroes_two_vect (smoothed_maxs_v, smoothed_maxs_i, 4);
for (i=l;i<ngroups-l; i++) { if ( (smooth [i-1] <= smooth [i]) &&for (i = l; i <ngroups-l; i ++) {if ((smooth [i-1] <= smooth [i]) &&
(smooth [i] > smooth [i+1]) && (smooth [i] >absmax/heu_cutoff) ) { // we have a relative máximum to add(smooth [i]> smooth [i + 1]) && (smooth [i]> absmax / heu_cutoff)) {// we have a relative maximum to add
// s_max_found is kept at much at 3: if it's less than that, // the point is added; else, it's added in last position and // then the sort will ... sort it out smoothed_maxs_v [s_max_found] =smooth [i] ; smoothed maxs i[s max found] =i; if (s_max_found<3) s_max_found++; sort_two_vect_dec (smoothed_maxs_v, smoothed_maxs_i, 4);// s_max_found is kept at much at 3: if it's less than that, // the point is added; else, it's added in last position and // then the sort will ... sort it out smoothed_maxs_v [s_max_found] = smooth [i]; smoothed maxs i [s max found] = i; if (s_max_found <3) s_max_found ++; sort_two_vect_dec (smoothed_maxs_v, smoothed_maxs_i, 4);
// Now we have to return to original points . For every max found, we // search for the absolute máximum.// Now we have to return to original points. For every max found, we // search for the absolute maximum.
out_guesses->n=s_max_found;out_guesses-> n = s_max_found;
for (g=0;g<s_max_found;g++) {for (g = 0; g <s_max_found; g ++) {
// let start with guessing the first one. i_realmax=i_bpm_min + heu_groups*smoothed_maxs_i [g] ; realmax=ydata [i_realmax] ;// let start with guessing the first one. i_realmax = i_bpm_min + heu_groups * smoothed_maxs_i [g]; realmax = ydata [i_realmax];
// sean into the group for (j=i_bpm_min + heu_groups*smoothed_maxs_i [g] +1; j<i_bpm_min + heu_groups* (smoothed_maxs_i [g] +1) ; j++) { if (ydata [ j] >realmax) { realmax=ydata [j ] ; i_realmax=j ; } } // we have the real max. Add it to real_max vector real_maxs_i [g]=i_realmax; real_maxs_v [g] =realmax; }// sean into the group for (j = i_bpm_min + heu_groups * smoothed_maxs_i [g] +1; j <i_bpm_min + heu_groups * (smoothed_maxs_i [g] +1); j ++) {if (ydata [j]> realmax) {realmax = ydata [j]; i_realmax = j; }} // we have the real max. Add it to real_max vector real_maxs_i [g] = i_realmax; real_maxs_v [g] = realmax; }
// we have to reorder them sort_two_vect_dec (real_maxs_v, real_maxs_i, s_max_found) ;// we have to reorder them sort_two_vect_dec (real_maxs_v, real_maxs_i, s_max_found);
// now fill the out_guesses struct for (g=0;g<s_max_found; g++) { out_guesses->guess [g] . index=real_maxs_i [g] ; out_guesses->guess [g] . freq=xdata [real_maxs_i [g] ] ; out_guesses->guess [g] .value=ydata [real_maxs_i [g] ] ; }// now fill the out_guesses struct for (g = 0; g <s_max_found; g ++) {out_guesses-> guess [g]. index = real_maxs_i [g]; out_guesses-> guess [g]. freq = xdata [real_maxs_i [g]]; out_guesses-> guess [g] .value = ydata [real_maxs_i [g]]; }
// Finally. Protect ourself from the s_max_founds==0 // This happens if there is a peak too small. // Use the absmax in this case.// Finally. Protect ourself from the s_max_founds == 0 // This happens if there is a peak too small. // Use the absmax in this case.
if (s_max_found==0) { out_guesses->n=l; out_guesses->guess [0] . index=i_absmax; out_guesses->guess [0] . freq=xdata [i_absmax] ; out_guesses->guess [0] .value=ydata [i_absmax] ; }if (s_max_found == 0) {out_guesses-> n = l; out_guesses-> guess [0]. index = i_absmax; out_guesses-> guess [0]. freq = xdata [i_absmax]; out_guesses-> guess [0] .value = ydata [i_absmax]; }
// End of the game. In Python it was a 5-line function.// End of the game. In Python it was a 5-line function.
}}
/* This function tests if two of the frequencies are one the double of the other./ * This function tests if two of the frequencies are one the double of the other.
If this is the case, return the other one.If this is the case, return the other one.
We need three guesses to perform this test.We need three guesses to perform this test.
Returns a float with the "confiance factor [0,1]" of the test. */Returns a float with the "confiance factor [0,1]" of the test. * /
double heu_test_for_doubliness (struct guesses * in_guesses, struct oneguess * out_guess) {double heu_test_for_doubliness (struct guesses * in_guesses, struct oneguess * out_guess) {
int i; double fl,f2,f3,d21,d31,d32; double freqs [3 ] ; int g_position [3 ] = { 0 , 1 , 2 } ;int i; double fl, f2, f3, d21, d31, d32; double freqs [3]; int g_position [3] = {0, 1, 2};
if (in_guesses ->n ! = 3) { fprintf (stderr, "Error: heu_test_for_doubliness must be called with 3 guesses\n") ; return 0; }if (in_guesses -> n! = 3) {fprintf (stderr, "Error: heu_test_for_doubliness must be called with 3 guesses \ n"); return 0; }
// Guesses are ordered top-down with valúes. We need it ord'd with // frequencies.// Guesses are ordered top-down with valúes. We need it ord'd with // frequencies.
for (i=0;i<3;i++) freqs [i]=in_guesses->guess [i] . freq; sort_two_vect_inc (freqs, g_position, 3) ;for (i = 0; i <3; i ++) freqs [i] = in_guesses-> guess [i]. freq; sort_two_vect_inc (freqs, g_position, 3);
d21=heu_near_two (freqs [1] /freqs [0] ) ; d31=heu_near_two (freqs [2] /freqs [0] ) ; d32=heu_near_two(freqs[2] /freqs [I]);d21 = heu_near_two (freqs [1] / freqs [0]); d31 = heu_near_two (freqs [2] / freqs [0]); d32 = heu_near_two (freqs [2] / freqs [I]);
if ((d21>d31) && (d21>d32)) { // maybe f2 is fl*2... // so, the good guess is f3.if ((d21> d31) && (d21> d32)) {// maybe f2 is fl * 2 ... // so, the good guess is f3.
*out_guess = in_guesses->guess [g_position [2] ] ; return only_pos (d21-d31-d32) ; }* out_guess = in_guesses-> guess [g_position [2]]; return only_pos (d21-d31-d32); }
if ((d31>d21) && (d31>d32)) { // maybe f3 is fl*2...if ((d31> d21) && (d31> d32)) {// maybe f3 is fl * 2 ...
// so, the good guess is f2. *out_guess = in_guesses->guess [g_position [1] ] ; return only_pos (d31-d21-d32) ; }// so, the good guess is f2. * out_guess = in_guesses-> guess [g_position [1]]; return only_pos (d31-d21-d32); }
if ((d32>=d21) && (d32>=d31)) { // maybe f3 is f2*2... // so, the good guess is f1.if ((d32> = d21) && (d32> = d31)) {// maybe f3 is f2 * 2 ... // so, the good guess is f1.
*out_guess = in_guesses->guess [g_position [0] ] ; return only_pos (d32-d31-d21) ; }* out_guess = in_guesses-> guess [g_position [0]]; return only_pos (d32-d31-d21); }
fprintf (stderr, "Dropping out of heu_doubliness????\n") ; fprintf (stderr, "d21=%g\nd31=%g\nd32=%g\n", d21, d31, d32) ; return 0; }fprintf (stderr, "Dropping out of heu_doubliness ???? \ n"); fprintf (stderr, "d21 =% g \ nd31 =% g \ nd32 =% g \ n", d21, d31, d32); return 0; }
/* Test if the candidate is good thanks to it's valué./ * Test if the candidate is good thanks to it's valué.
We need at least two guesses to test this. */We need at least two guesses to test this. * /
double heu_test_for_max (struct guesses * in_guesses, struct oneguess * out_guess) {double heu_test_for_max (struct guesses * in_guesses, struct oneguess * out_guess) {
if (in_guesses->n < 2) { fprintf (stderr, "Error: heu_test_for_max must have >= 2 guesses\n") ; return 0;if (in_guesses-> n <2) {fprintf (stderr, "Error: heu_test_for_max must have> = 2 guesses \ n"); return 0;
}}
// Guesses are ordered top-down with valúes. *out_guess = in_guesses->guess [0] ; return heu_good_max (in_guesses->guess [0] .valué, in_guesses- >guess [1] .valué) ; }// Guesses are ordered top-down with valúes. * out_guess = in_guesses-> guess [0]; return heu_good_max (in_guesses-> guess [0] .valué, in_guesses-> guess [1] .valué); }
/* Main heartbeat heuristic function. Compute our best guess and returns the confiance factor. *// * Main heartbeat heuristic function. Compute our best guess and returns the confiance factor. * /
double heartbeat_heuristic (struct guesses * in_guesses, struct oneguess * out_guess) {double heartbeat_heuristic (struct guesses * in_guesses, struct oneguess * out_guess) {
int n; struct oneguess maxguess; struct oneguess dblguess; double maxconf, dblconf, outconf;int n; struct oneguess maxguess; struct oneguess dblguess; double maxconf, dblconf, outconf;
n= in_guesses->n; // commodity varn = in_guesses-> n; // commodity var
// If we have just one peak: return it. if (n==l) { *out_guess = in_guesses->guess [0] ;// If we have just one peak: return it. if (n == l) {* out_guess = in_guesses-> guess [0];
// Confiance is high... outconf=1.0;// Confiance is high ... outconf = 1.0;
goto out;goto out;
}}
// If we have two peaks : simply returns the highest, with it's confiance// If we have two peaks: simply returns the highest, with it's confiance
if (n==2) { outconf = heu_test_for_max (in_guesses, out_guess) ; goto out; }if (n == 2) {outconf = heu_test_for_max (in_guesses, out_guess); goto out; }
// Otherwise, we have three guesses.// Otherwise, we have three guesses.
dblconf=heu_test_for_doubliness (in_guesses, Sdblguess) ; maxconf=heu_test_for_max (in_guesses, Smaxguess) ;dblconf = heu_test_for_doubliness (in_guesses, Sdblguess); maxconf = heu_test_for_max (in_guesses, Smaxguess);
if ( (dblconf>heu_conf_doubleness_threshold) && (dblconf>maxconf) &&if ((dblconf> heu_conf_doubleness_threshold) && (dblconf> maxconf) &&
( (maxguess . value/dblguess .valué) <heu_max_win_threshold) ) { // Probably there is the movement artifact. Use the "doubliness" test. *out_guess = dblguess; outconf=dblconf; goto out; }((maxguess. value / dblguess .valué) <heu_max_win_threshold)) {// Probably there is the movement artifact. Use the "doubliness" test. * out_guess = dblguess; outconf = dblconf; goto out; }
// else, our best bet is still the max. *out_guess=maxguess; outconf=maxconf;// else, our best bet is still the max. * out_guess = maxguess; outconf = maxconf;
// clean up and store last valué out : // If this is too near low freq or too different from before, no if (out_guess->index <= i_bpm_min + heu_bpm_too_near_min) outconf=0.0;// clean up and store last valué out: // If this is too near low freq or too different from before, no if (out_guess-> index <= i_bpm_min + heu_bpm_too_near_min) outconf = 0.0;
// Is this data better than the past one?// Is this data better than the past one?
if ( (heu_last_guess .freq != 0) && // if we have a last guessif ((heu_last_guess .freq! = 0) && // if we have a last guess
(outconf < heu_oldval_conf_threshold) && // and this guess is no-good(outconf <heu_oldval_conf_threshold) && // and this guess is no-good
(heu_last_conf > heu_oldval_oldconf_threshold) && // and last one was decent(heu_last_conf> heu_oldval_oldconf_threshold) && // and last one was decent
(outconf < heu_last_conf ) && // and last was better, too (fabs (out_guess->freq - heu_last_guess . freq)(outconf <heu_last_conf) && // and last was better, too (fabs (out_guess-> freq - heu_last_guess. freq)
< heu_oldval_max_abs_delta) && // and absolute variation is big<heu_oldval_max_abs_delta) && // and absolute variation is big
(fabs ( (out_guess->freq - heu_last_guess . freq) /heu_last_guess . freq)(fabs ((out_guess-> freq - heu_last_guess. freq) / heu_last_guess. freq)
< heu_oldval_max_rel_delta) // and relative, too<heu_oldval_max_rel_delta) // and relative, too
) {) {
/* then use oíd valué, reducing confiance */ (*out_guess) = heu_last_guess; outconf=only_pos ( heu_last_conf/heu_oldval_conf_dumping-heu_oldval_conf_loss/ * then use oíd valué, reducing confiance * / (* out_guess) = heu_last_guess; outconf = only_pos (heu_last_conf / heu_oldval_conf_dumping-heu_oldval_conf_loss
););
}}
heu_volta++; // keep track of how much guesses we have done heu_last_guess = (*out_guess) ; heu_last_conf=outconf;heu_volta ++; // keep track of how much guesses we have done heu_last_guess = (* out_guess); heu_last_conf = outconf;
return outconf; }return outconf; }
/* This is the only external function. Use the internal arrays FFT data and emits the best guess. It does not use struct to keep main unaware of the internáis . IN-parameters : none OUT-parameters : heartbeat guess, peak valué, index in fft_data vector, and confiance factor. A NULL pointer means don't care . *// * This is the only external function. Use the internal arrays FFT data and emits the best guess. It does not use struct to keep main unaware of the internáis. IN-parameters: none OUT-parameters: heartbeat guess, peak valué, index in fft_data vector, and confiance factor. A NULL pointer means don't care. * /
void compute_fft_hb (double * hb, double * valué, int * index, double *confiance, struct guesses *report) {void compute_fft_hb (double * hb, double * valué, int * index, double * confiance, struct guesses * report) {
struct guesses fft_guesses; struct oneguess goodguess={ 0, 0, 0 } ; double conf=0;struct guesses fft_guesses; struct oneguess goodguess = {0, 0, 0}; double conf = 0;
if (have_good_fft_data==0) { fprintf (stderr, "compute_fft_hb called without good fftdata\n"); } else { compute_rel_max (x_fft_data, fft_data, &fft_guesses) ; conf=heartbeat_heuristic (&fft_guesses, Sgoodguess) ; }if (have_good_fft_data == 0) {fprintf (stderr, "compute_fft_hb called without good fftdata \ n"); } else {compute_rel_max (x_fft_data, fft_data, &fft_guesses); conf = heartbeat_heuristic (& fft_guesses, Sgoodguess); }
if (hb) *hb=goodguess .freq; if (valué) *value=goodguess .valué; if (index) *index=goodguess .index; if (confiance) *confiance=conf; if (report) *report=fft_guesses; return; }if (hb) * hb = goodguess .freq; if (valué) * value = goodguess .valué; if (index) * index = goodguess .index; if (confiance) * confiance = conf; if (report) * report = fft_guesses; return; }
// Tunable set-up// Tunable set-up
void set_doubliness_cutoff_maxwin (double p_heu_max_win_threshold, double p_heu_cutoff, double p_heu_doubliness_factor) {void set_doubliness_cutoff_maxwin (double p_heu_max_win_threshold, double p_heu_cutoff, double p_heu_doubliness_factor) {
heu_max_win_threshold = p_heu_max_win_threshold; heu_cutoff = p_heu_cutoff; heu_doubliness_factor = p_heu_doubliness_factor;heu_max_win_threshold = p_heu_max_win_threshold; heu_cutoff = p_heu_cutoff; heu_doubliness_factor = p_heu_doubliness_factor;
}}

Claims

Reivindicaciones Claims
1.- Método para procesar señales fotopletismográficas obtenidas de una persona o animal, con el fin de averiguar al menos Ia frecuencia cardiaca del mismo, siendo dicho método del tipo que comprende realizar las siguientes etapas de manera secuencial: a) recibir unas señales eléctricas fotopletismográficas en al menos un dominio temporal, b) transformar dichas señales temporales en señales con al menos un dominio en frecuencia, o señales espectrales, c) identificar una serie de picos candidatos a ser el pico producido a dicha frecuencia cardiaca, de entre al menos parte de dichas señales espectrales, d) obtener una serie de parámetros a partir de dichos picos candidatos, e) determinar a partir de al menos uno de dichos parámetros obtenidos en d) cuál es el pico representativo de dicha frecuencia cardiaca, o pico buscado, estando caracterizado dicho método porque comprende efectuar dicha etapa d) para obtener al menos un primer y un segundo parámetros mediante unos cálculos realizados en paralelo, siendo:1.- Method to process photoplethysmographic signals obtained from a person or animal, in order to find out at least the heart rate thereof, said method of the type comprising performing the following steps sequentially: a) receiving photoplethysmographic electrical signals in at least one temporal domain, b) transform said temporary signals into signals with at least one frequency domain, or spectral signals, c) identify a series of candidate peaks to be the peak produced at said heart rate, of at least part of said spectral signals, d) obtain a series of parameters from said candidate peaks, e) determine from at least one of said parameters obtained in d) what is the representative peak of said heart rate, or sought peak, being said method characterized in that it comprises carrying out said step d) to obtain at least a first and a second parameter by means of some ulos made in parallel, being:
- dicho primer parámetro resultante de una función de probabilidad de armónicos de dichos picos candidatos, consistente en una comparación dos a dos de los mismos, que ofrece como resultado una serie de valores para el primer parámetro, y- said first parameter resulting from a harmonic probability function of said candidate peaks, consisting of a two to two comparison thereof, which results in a series of values for the first parameter, and
- dicho segundo parámetro resultante de una función de preponderancia, en energía, de dichos picos candidatos, consistente en una comparación dos a dos de los mismos, que ofrece como resultado una serie de valores para el segundo parámetro.- said second parameter resulting from a preponderance function, in energy, of said candidate peaks, consisting of a two to two comparison thereof, which results in a series of values for the second parameter.
2.- Método según Ia reivindicación 1 , caracterizado porque dicha etapa e) comprende asignar a dicho pico determinado como representativo de dicha frecuencia cardiaca un coeficiente de confianza.2. Method according to claim 1, characterized in that said step e) comprises assigning said determined peak as representative of said heart rate a confidence coefficient.
3.- Método según Ia reivindicación 1 , caracterizado porque comprende además realizar dicha etapa d) para un tercer parámetro a obtener en base a unos cálculos efectuados en paralelo con los realizados para obtener dichos primer y segundo parámetros, siendo dicho tercer parámetro resultante de una función de análisis histórico de dichos picos candidatos, consistente en una comparación de al menos el pico determinado como representativo de Ia frecuencia cardiaca en dicha etapa e), para un ciclo anterior, el cual tiene asignado un coeficiente de confianza de un valor alto, con dichos picos candidatos, para buscar el pico de Ia misma frecuencia o de Ia frecuencia más próxima a Ia de dicho pico determinado en dicha etapa anterior e), y asignarle un coeficiente de probabilidad de que sea el pico buscado resultado de devaluar dicho coeficiente de confianza alto en un porcentaje determinado que es inversamente proporcional a Ia cercanía de ambas frecuencias.3. Method according to claim 1, characterized in that it further comprises performing said step d) for a third parameter to be obtained based on calculations carried out in parallel with those performed to obtain said first and second parameters, said third parameter being resulting from a historical analysis function of these candidate peaks, consisting of a comparison of at least the peak determined as representative of the heart rate in said stage e), for a previous cycle, which has a high confidence coefficient assigned, with said candidate peaks, to look for the peak of the same frequency or of the frequency closest to that of said peak determined in said previous stage e), and assign a probability coefficient that is the peak sought as a result of devaluing said high confidence coefficient in a certain percentage that is inversely proportional to the proximity of both frequencies.
4.- Método según Ia reivindicación 2 ó 3, caracterizado porque dicha etapa e) comprende una preselección o primera sub-etapa e.1 ) consistente en analizar los valores obtenidos para al menos dichos primer y segundo parámetros y seleccionar un único pico candidato para cada parámetro, en función de dicho análisis y una sub-etapa e.2) o selección final para determinar, de entre cada pico seleccionado por cada parámetro, dicho pico representativo de dicha frecuencia cardiaca, o pico buscado.4. Method according to claim 2 or 3, characterized in that said stage e) comprises a pre-selection or first sub-stage e.1) consisting of analyzing the values obtained for at least said first and second parameters and selecting a single candidate peak for each parameter, depending on said analysis and a sub-stage e.2) or final selection to determine, from each peak selected by each parameter, said representative peak of said heart rate, or sought peak.
5.- Método según Ia reivindicación 4, caracterizado porque dicha sub- etapa e.1 ) se lleva a cabo para dichos primer, segundo y tercer parámetros.5. Method according to claim 4, characterized in that said sub-stage e.1) is carried out for said first, second and third parameters.
6.- Método según Ia reivindicación 4 ó 5, caracterizado porque dicha sub- etapa e.1) comprende: - para seleccionar el pico candidato para el primer parámetro:6. Method according to claim 4 or 5, characterized in that said sub-stage e.1) comprises: - to select the candidate peak for the first parameter:
• ordenar, en función de su contenido armónico, los picos determinados como pertenecientes a frecuencias fundamentales, en base a los valores obtenidos tras dicha comparación de dicha función de probabilidad de armónicos, • asignarles un coeficiente de probabilidad a cada uno de dichos picos, tanto mayor cuanto menor sea su contenido armónico,• order, based on their harmonic content, the peaks determined as belonging to fundamental frequencies, based on the values obtained after said comparison of said harmonic probability function, • assign a probability coefficient to each of said peaks, both greater the lower its harmonic content,
• ponderar dichos coeficiente de probabilidad de cada uno de los picos con Ia amplitud de sus respectivas fundamentales, y• weighting said probability coefficient of each of the peaks with the amplitude of their respective fundamentals, and
• determinar el pico con probabilidad más alta como el pico candidato para el primer parámetro,• determine the peak with the highest probability as the candidate peak for the first parameter,
- para seleccionar el pico candidato para el segundo parámetro:- to select the candidate peak for the second parameter:
• determinar el pico determinado como más preponderante previa asignación de un coeficiente de probabilidad, en base a los valores obtenidos tras dicha comparación de dicha función de preponderancia, como el pico candidato para el segundo parámetro.• determine the peak determined as the most preponderant prior assignment of a probability coefficient, based on the values obtained after said comparison of said preponderance function, as the candidate peak for the second parameter.
7.- Método según Ia reivindicación 6 cuando depende de Ia 5, caracterizado porque dicha sub-etapa e.1) comprende además para seleccionar el pico candidato para el tercer parámetro:7. Method according to claim 6 when it depends on Ia 5, characterized in that said sub-stage e.1) further comprises to select the candidate peak for the third parameter:
• determinar dicho pico de Ia misma frecuencia o de Ia frecuencia más próxima a Ia de dicho pico determinado en dicha etapa anterior e), como el pico candidato para el tercer parámetro.• determining said peak of the same frequency or of the frequency closest to that of said peak determined in said previous stage e), as the candidate peak for the third parameter.
8.- Método según Ia reivindicación 7, caracterizado porque comprende para realizar dicha etapa e.2) llevar a cabo las siguientes acciones:8. Method according to claim 7, characterized in that it comprises to carry out said step e.2) carry out the following actions:
- si los tres picos candidatos para los tres parámetros son el mismo, seleccionar dicho único pico como pico buscado, y asignarle un coeficiente de confianza igual al producto de los tres coeficientes de probabilidades asociados, ó- if the three candidate peaks for the three parameters are the same, select said single peak as the sought peak, and assign a confidence coefficient equal to the product of the three associated probability coefficients, or
- si solamente dos de los tres picos candidatos para los tres parámetros son el mismo, seleccionar éste como pico buscado si Ia suma de los dos coeficientes de probabilidades asociados es mayor que el coeficiente de probabilidad del pico candidato diferente a dichos dos picos coincidentes, ó- if only two of the three candidate peaks for the three parameters are the same, select this as the sought peak if the sum of the two associated probability coefficients is greater than the probability coefficient of the different candidate peak to said two coincident peaks, or
- si ninguno de los tres picos candidatos para los tres parámetros son el mismo, seleccionar el pico candidato cuyo coeficiente de probabilidad sea mayor como pico buscado.- If none of the three candidate peaks for the three parameters are the same, select the candidate peak whose probability coefficient is higher as the sought peak.
9.- Método según cualquiera de las reivindicaciones anteriores, caracterizado porque comprende calcular el nivel de saturación de oxígeno en base a una o más de dichas señales fotopletismográficas cuya frecuencia es Ia de dicho pico buscado determinado en Ia etapa e).9. Method according to any of the preceding claims, characterized in that it comprises calculating the level of oxygen saturation based on one or more of said photoplethysmographic signals whose frequency is that of said sought peak determined in stage e).
10.- Método según cualquiera de las reivindicaciones anteriores, caracterizado porque comprende emitir, sobre una zona irrigada por capilares sanguíneos, de dicha persona o animal, al menos dos señales luminosas para obtener en respuesta dichas señales fotopletismográficas recibidas en dicha etapa a), mediante Ia detección con al menos un fotodetector de dichas señales luminosas, una vez han atravesado dicha zona.10. Method according to any of the preceding claims, characterized in that it comprises emitting, on an area irrigated by blood capillaries, of said person or animal, at least two light signals to obtain in response said photoplethysmographic signals received in said stage a), by The detection with at least one photodetector of said light signals, once they have crossed said area.
11.- Método según Ia reivindicación 10, caracterizado porque dichas señales luminosas emitidas, que son al menos dos, proceden de LEDs o Láseres de distintas longitudes de onda, comprendidas entre 630 y 980 nm, siendo al menos una de ellas infrarroja.11. Method according to claim 10, characterized in that said emitted light signals, which are at least two, come from LEDs or Lasers of different wavelengths, between 630 and 980 nm, at least one of them being infrared.
12.- Método según Ia reivindicación 1 , caracterizado porque dichas señales fotopletismográficas recibidas en a) contienen armónicos de distintas frecuencias, algunos de los cuales producidos por artefactos representativos del movimiento de dicha persona o animal.12. Method according to claim 1, characterized in that said photoplethysmographic signals received in a) contain harmonics of different frequencies, some of which produced by artifacts representative of the movement of said person or animal.
13.- Método según las reivindicaciones 12, caracterizado porque dichos artefactos son representativos del movimiento de brazos, piernas y/o patas de dicha persona o animal, provocado al andar o correr, generando unos armónicos a otras frecuencias distintas a Ia cardíaca, que varía según Ia intensidad de Ia marcha o carrera.13. Method according to claims 12, characterized in that said artifacts are representative of the movement of arms, legs and / or legs of said person or animal, caused by walking or running, generating harmonics at frequencies other than cardiac, which varies according to the intensity of the march or race.
14.- Oxímetro del tipo que comprende al menos: - dos emisores de señales luminosas de distintas longitudes de onda, adaptados para emitir sobre una zona irrigada por capilares sanguíneos de una persona o animal,14.- Oximeter of the type comprising at least: - two emitters of light signals of different wavelengths, adapted to emit over an area irrigated by blood capillaries of a person or animal,
- al menos un fotodetector adaptado para detectar dichas señales luminosas, una vez han atravesado dicha zona irrigada por capilares sanguíneos,- at least one photodetector adapted to detect said light signals, once they have crossed said area irrigated by blood capillaries,
- un sistema electrónico apto para al menos muestrear, tratar y procesar unas señales eléctricas provinentes de dicho fotodetector, que es al menos uno, o señales fotopletismográficas, estando dicho oxímetro caracterizado porque dicho sistema electrónico está adaptado para procesar dichas señales fotopletismográficas según un método de acuerdo a una cualquiera de las reivindicaciones anteriores.- an electronic system suitable for at least sampling, processing and processing electrical signals from said photodetector, which is at least one, or photoplethysmographic signals, said oximeter being characterized in that said electronic system is adapted to process said photoplethysmographic signals according to a method of according to any one of the preceding claims.
PCT/ES2006/0700802005-06-132006-06-12Method of processing photopletismographic signals obtained from a person or animal and oximeter using said methodWO2006134197A1 (en)

Applications Claiming Priority (2)

Application NumberPriority DateFiling DateTitle
ESP200014252005-06-13
ES200501425AES2276594B1 (en)2005-06-132005-06-13 METHOD FOR PROCESSING PHOTOPLETISMOGRAPHIC SIGNS OBTAINED FROM A PERSON OR ANIMAL, AND OXIMETER THAT USES SUCH METHOD.

Publications (1)

Publication NumberPublication Date
WO2006134197A1true WO2006134197A1 (en)2006-12-21

Family

ID=37533261

Family Applications (1)

Application NumberTitlePriority DateFiling Date
PCT/ES2006/070080WO2006134197A1 (en)2005-06-132006-06-12Method of processing photopletismographic signals obtained from a person or animal and oximeter using said method

Country Status (2)

CountryLink
ES (1)ES2276594B1 (en)
WO (1)WO2006134197A1 (en)

Cited By (17)

* Cited by examiner, † Cited by third party
Publication numberPriority datePublication dateAssigneeTitle
US10986816B2 (en)2014-03-262021-04-27Scr Engineers Ltd.Livestock location system
US10986817B2 (en)2014-09-052021-04-27Intervet Inc.Method and system for tracking health in animal populations
US11071279B2 (en)2014-09-052021-07-27Intervet Inc.Method and system for tracking health in animal populations
USD990062S1 (en)2020-06-182023-06-20S.C.R. (Engineers) LimitedAnimal ear tag
USD990063S1 (en)2020-06-182023-06-20S.C.R. (Engineers) LimitedAnimal ear tag
US11832584B2 (en)2018-04-222023-12-05Vence, Corp.Livestock management system and method
US11832587B2 (en)2020-06-182023-12-05S.C.R. (Engineers) LimitedAnimal tag
US11864529B2 (en)2018-10-102024-01-09S.C.R. (Engineers) LimitedLivestock dry off method and device
US11960957B2 (en)2020-11-252024-04-16Identigen LimitedSystem and method for tracing members of an animal population
US12099893B2 (en)2020-07-012024-09-24S.C.R. (Engineers) LimitedDevice assignment system and method
US12144320B2 (en)2019-02-082024-11-19Allflex Australia Pty LtdElectronic animal identification tag reader synchronisation
US12193413B2 (en)2019-02-082025-01-14Allflex Australia Pty LtdElectronic animal tag reader
US12213449B2 (en)2021-01-242025-02-04S.C.R. (Engineers) LimitedAnimal marking control system and method
US12239098B2 (en)2019-02-082025-03-04Allflex Australia Pty LtdDetermining the location of an animal
USD1067554S1 (en)2021-04-082025-03-18Allflex Australia Pty LimitedTag applicator for animals
USD1067544S1 (en)2021-04-082025-03-18Allflex Australia Pty LimitedTag applicator for animals
US12342790B2 (en)2020-06-182025-07-01S.C.R. (Engineers) LimitedAnimal tag

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication numberPriority datePublication dateAssigneeTitle
WO2009090293A1 (en)*2008-01-162009-07-23Consejo Superior De Investigaciones CientificasEndoscopic probe with opto-electronic sensor for use in diagnostics and surgery

Citations (5)

* Cited by examiner, † Cited by third party
Publication numberPriority datePublication dateAssigneeTitle
WO2001025802A2 (en)*1999-10-012001-04-12Ntc Technology Inc.Method, apparatus and system for removing motion artifacts from measurements of bodily parameters
US20030225337A1 (en)*2002-01-312003-12-04Dolphin Medical, Inc.Separating motion from cardiac signals using second order derivative of the photo-plethysmogram and fast fourier transforms
EP1506736A2 (en)*2003-08-112005-02-16Samsung Electronics Co., Ltd.Apparatus and method for detecting blood flow signal free from motion artifact and stress test apparatus using the same
WO2005020798A2 (en)*2003-08-272005-03-10Datex-Ohmeda, Inc.Multi-domain motion estimation and plethysmographic recognition using fuzzy neural-nets
WO2005020789A2 (en)*2003-08-212005-03-10Datex-Ohmeda, Inc.Cepstral domain pulse oximetry

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication numberPriority datePublication dateAssigneeTitle
US20050033129A1 (en)*1998-10-152005-02-10Edgar Reuben W.Method, apparatus and system for removing motion artifacts from measurements of bodily parameters
WO2001025802A2 (en)*1999-10-012001-04-12Ntc Technology Inc.Method, apparatus and system for removing motion artifacts from measurements of bodily parameters
US20030225337A1 (en)*2002-01-312003-12-04Dolphin Medical, Inc.Separating motion from cardiac signals using second order derivative of the photo-plethysmogram and fast fourier transforms
EP1506736A2 (en)*2003-08-112005-02-16Samsung Electronics Co., Ltd.Apparatus and method for detecting blood flow signal free from motion artifact and stress test apparatus using the same
WO2005020789A2 (en)*2003-08-212005-03-10Datex-Ohmeda, Inc.Cepstral domain pulse oximetry
WO2005020798A2 (en)*2003-08-272005-03-10Datex-Ohmeda, Inc.Multi-domain motion estimation and plethysmographic recognition using fuzzy neural-nets

Cited By (21)

* Cited by examiner, † Cited by third party
Publication numberPriority datePublication dateAssigneeTitle
US10986816B2 (en)2014-03-262021-04-27Scr Engineers Ltd.Livestock location system
US12213455B2 (en)2014-03-262025-02-04S.C.R. (Engineers) LimitedLivestock location system
US11963515B2 (en)2014-03-262024-04-23S.C.R. (Engineers) LimitedLivestock location system
US10986817B2 (en)2014-09-052021-04-27Intervet Inc.Method and system for tracking health in animal populations
US11071279B2 (en)2014-09-052021-07-27Intervet Inc.Method and system for tracking health in animal populations
US11832584B2 (en)2018-04-222023-12-05Vence, Corp.Livestock management system and method
US12133507B2 (en)2018-10-102024-11-05S.C.R. (Engineers) LimitedLivestock dry off method and device
US11864529B2 (en)2018-10-102024-01-09S.C.R. (Engineers) LimitedLivestock dry off method and device
US12239098B2 (en)2019-02-082025-03-04Allflex Australia Pty LtdDetermining the location of an animal
US12193413B2 (en)2019-02-082025-01-14Allflex Australia Pty LtdElectronic animal tag reader
US12144320B2 (en)2019-02-082024-11-19Allflex Australia Pty LtdElectronic animal identification tag reader synchronisation
USD990063S1 (en)2020-06-182023-06-20S.C.R. (Engineers) LimitedAnimal ear tag
US11832587B2 (en)2020-06-182023-12-05S.C.R. (Engineers) LimitedAnimal tag
USD990062S1 (en)2020-06-182023-06-20S.C.R. (Engineers) LimitedAnimal ear tag
US12342790B2 (en)2020-06-182025-07-01S.C.R. (Engineers) LimitedAnimal tag
US12099893B2 (en)2020-07-012024-09-24S.C.R. (Engineers) LimitedDevice assignment system and method
US11960957B2 (en)2020-11-252024-04-16Identigen LimitedSystem and method for tracing members of an animal population
US12321808B2 (en)2020-11-252025-06-03Identigen LimitedSystem and method for tracing members of an animal population
US12213449B2 (en)2021-01-242025-02-04S.C.R. (Engineers) LimitedAnimal marking control system and method
USD1067554S1 (en)2021-04-082025-03-18Allflex Australia Pty LimitedTag applicator for animals
USD1067544S1 (en)2021-04-082025-03-18Allflex Australia Pty LimitedTag applicator for animals

Also Published As

Publication numberPublication date
ES2276594B1 (en)2008-06-16
ES2276594A1 (en)2007-06-16

Similar Documents

PublicationPublication DateTitle
WO2006134197A1 (en)Method of processing photopletismographic signals obtained from a person or animal and oximeter using said method
CN103961080B (en)Bioinformation detecting device and Biont information detection method
JP5283700B2 (en) Blood vessel characteristic measuring device and blood vessel characteristic measuring method
RU2498768C2 (en)Apparatus and method for physiological parameter determination
JP2004248819A (en)Blood analyzer
Lapitan et al.A method and a device prototype for noninvasive measurements of blood perfusion in a tissue
JP5527658B2 (en) Scattering absorber measurement method and apparatus
ES2662198T3 (en) Signal processing for pulse oximetry
WO2014001961A1 (en)Real-time tumor perfusion imaging during radiation therapy delivery
JP5626879B2 (en) Concentration determination apparatus, concentration determination method, and program
EP3434182B1 (en)System for monitoring the blood supply to the transplanted organ
Xing et al.Temporal complexity in photoplethysmography and its influence on blood pressure
CN110710982B (en)Method for acquiring model for detecting hemoglobin concentration and method for detecting hemoglobin concentration
JP6197926B2 (en) Biological information detection apparatus, biological information detection method, and biological information detection program
Hu et al.The effect of skin melanin concentration on wrist reflectance photoplethysmography based on Monte Carlo simulation
Chatterjee et al.In silico and in vivo investigations using an endocavitary photoplethysmography sensor for tissue viability monitoring
Reiser et al.Simulation framework for reflective PPG signal analysis depending on sensor placement and wavelength
JP2014151044A (en)Device, method and program of detecting biological information
JP5733117B2 (en) Brain activity state analysis device, rehabilitation assist device, thought control type drive device, thought control type display device, measurement point selection method, measurement point selection program
JP5626880B2 (en) Concentration determination apparatus, concentration determination method, and program
Naguszewski et al.Determination of oxygen saturation based on distorted photoplethysmography signals by scaling method
JP2017108924A (en)Biological information acquisition device and biological information acquisition method
JP2010200911A (en)Apparatus for measuring blood component
CN107708533B (en)Viscoelastic property acquisition device, viscoelastic property acquisition method, viscoelastic property acquisition program, and storage medium storing the program
KR20160085088A (en)Bio signal measurement apparatus and bio signal measurement method

Legal Events

DateCodeTitleDescription
121Ep: the epo has been informed by wipo that ep was designated in this application
NENPNon-entry into the national phase

Ref country code:DE

WWWWipo information: withdrawn in national office

Country of ref document:DE

122Ep: pct application non-entry in european phase

Ref document number:06764379

Country of ref document:EP

Kind code of ref document:A1


[8]ページ先頭

©2009-2025 Movatter.jp