Duda estadística

Buenas,

Tengo un asunto entre manos a ver si alguien me puede echar una mano.
Tengo dos grupos de datos de un mismo experimento pero que tienen diferentes referencias de tiempo (datos grabados con distintos equipos y a diferentes frecuencias).
Una de las medidas es comun a ambos grupos de datos (el mismo dato recogido con distintos aparatos), asi que asi que querriamos sincronizar los dos grupos de medidas "comparando" esos datos en concreto.
Las medidas tampoco empiezan a la vez (cualquiera puede empezar antes) y puede haber espacios de tiempo en que uno de los equipos no haya muestreado.
Visualmente es algo muy facil de hacer, pero hay que automatizarlo porque tenemos miles de ensayos.
Tenemos algunas ideas que parece que van funcionando, pero igual ya hay algun metodo estadistico que haga lo que busco y estamos intentando descubrir la polvora otra vez.

Gracias por adelantado.

p.d. lo estamos haciendo en python con scipy
Para conseguir que tus datos estén "muestreados" igual, diría que la mejor opción que tienes es la transformada de Fourier.
Teniendo datos discretos, deberías hacerles la transformada discreta de Fourier, y obtendrías los datos "en frecuencia". Con eso, le haces la anti transformada, pero en vez de la discreta, la normal (continua).
Con esto obtendrías el equivalente a tus datos muestreados pero con una función continua, es decir para todos los tiempos posibles, por lo que podrías remuestrear en los tiempos que quieras. Si lo haces con los 2 grupos de datos podrás compararlos sin problemas.

En cuanto a que empiecen o acaben antes... si quieres comparar necesitas datos de los dos grupos, asi que lo que yo haría es desechar los datos de momentos en que solo tienes 1 grupo, y te quedas solo con los que tienes los 2.

Con la transformada de Fourier has de tener en cuenta que variaciones más rápidas de la mitad de la frecuencia de muestreo no aparecerán, asi que si hace algun analisis frecuencial no deberías considerar como válidos datos a más de Fm/2. De hecho, si mirases el espectro de tus datos finales verias que se va repitiendo cada Fm y es simétrico respecto Fm/2.

Espero haberme explicado bien xDD Igualmente esto es un proceso que esta machacadísimo, así que no tendrás problemas para encontrar código de ejemplo en casi cualquier lenguaje.

Saludos!
¿Ninguno de vosotros sabe Python o R? Eso parece el tipico problema que necesita un script.
_Charles_ escribió:¿Ninguno de vosotros sabe Python o R? Eso parece el tipico problema que necesita un script.

Buenss. Ya dije que lo vamos a hacer en python. La duda es sobre la parte de estadisica, si hay alguna metrica o algun estadistico que nos de un valor de referencia sobre cual es el mejor ajuste entre ambas muestras. Ya hemos hecho alguna cosa que va funcionando, pero si hay algo que sea esoecifico para este calculo no vamos a inventar la rueda otra vez.


goldaster escribió:Para conseguir que tus datos estén "muestreados" igual, diría que la mejor opción que tienes es la transformada de Fourier.
Teniendo datos discretos, deberías hacerles la transformada discreta de Fourier, y obtendrías los datos "en frecuencia". Con eso, le haces la anti transformada, pero en vez de la discreta, la normal (continua).
Con esto obtendrías el equivalente a tus datos muestreados pero con una función continua, es decir para todos los tiempos posibles, por lo que podrías remuestrear en los tiempos que quieras. Si lo haces con los 2 grupos de datos podrás compararlos sin problemas.

En cuanto a que empiecen o acaben antes... si quieres comparar necesitas datos de los dos grupos, asi que lo que yo haría es desechar los datos de momentos en que solo tienes 1 grupo, y te quedas solo con los que tienes los 2.

Con la transformada de Fourier has de tener en cuenta que variaciones más rápidas de la mitad de la frecuencia de muestreo no aparecerán, asi que si hace algun analisis frecuencial no deberías considerar como válidos datos a más de Fm/2. De hecho, si mirases el espectro de tus datos finales verias que se va repitiendo cada Fm y es simétrico respecto Fm/2.

Espero haberme explicado bien xDD Igualmente esto es un proceso que esta machacadísimo, así que no tendrás problemas para encontrar código de ejemplo en casi cualquier lenguaje.

Saludos!

Gracias, probare a ver que sale con eso, pero creo que mas o menos esa parte la tenemos solucionada. La duda es cuando tenemos todos los datos con lod mismos tiempos de muestreo, como calculat el desfase entre las dos series para tenerlas sincronizadas.

Gracias :)
Con lo que te comento también solucionas el tema de muestreo, te lo explico más gráficamente con un ejemplo.
Supongamos que tu señal es una señal cuadrada, tras hacer lo que te comenté, te quedaría algo como esta gráfica:
Imagen
La linea negra es la señal original, las de colores son los diferentes resultados en función de cuantas muestras hayas usado para la DFT (cuantas más, mejor).
De hecho la mayoría de generadores de señales van asi, si usas un osciloscopio y miras bien de cerca una señal "cuadrada" veras estos rizos, sobretodo en las esquinas que es donde más se nota.

Una vez tienes esto, es como si reconstruyeras la señal original, es decir, tienes una señal continua en el tiempo, por lo que para conseguir los valores vuelves a muestrearlos, solo que ahora muestrear simplemente es mirar un valor en tu PC.
Por lo que si quieres muestrear 2 señales sin desfase, habiendo hecho esto, simplemente muestreas en el mismo momento y ale, ya tienes tus muestras síncronas.
Ahora bien, no deja de ser una aproximación que puede ser muy buena o muy mala según cuantas muestras hayas usado.

Saludos!

Edit: Otra gráfica (gif) que aclara como funciona :D

Imagen
goldaster escribió:Con lo que te comento también solucionas el tema de muestreo, te lo explico más gráficamente con un ejemplo.
Supongamos que tu señal es una señal cuadrada, tras hacer lo que te comenté, te quedaría algo como esta gráfica:
Imagen
La linea negra es la señal original, las de colores son los diferentes resultados en función de cuantas muestras hayas usado para la DFT (cuantas más, mejor).
De hecho la mayoría de generadores de señales van asi, si usas un osciloscopio y miras bien de cerca una señal "cuadrada" veras estos rizos, sobretodo en las esquinas que es donde más se nota.

Una vez tienes esto, es como si reconstruyeras la señal original, es decir, tienes una señal continua en el tiempo, por lo que para conseguir los valores vuelves a muestrearlos, solo que ahora muestrear simplemente es mirar un valor en tu PC.
Por lo que si quieres muestrear 2 señales sin desfase, habiendo hecho esto, simplemente muestreas en el mismo momento y ale, ya tienes tus muestras síncronas.
Ahora bien, no deja de ser una aproximación que puede ser muy buena o muy mala según cuantas muestras hayas usado.

Saludos!

Edit: Otra gráfica (gif) que aclara como funciona :D

Imagen


gracias por la ayuda, pero creo que no nos estamos entendiendo XD
no me preocupa reconstruir la señal, y las diferencias entre muestreos las arreglamos más cutremente (interpolando). por hacia donde llevas el post me da la impresión de que eres teleco :p

la duda que tenía era si hay alguna función estadística (o como se quiera llamar) que dadas dos señales que tienen diferentes tiempos (ojo, digo tiempos, no frecuencias, aunque también) de muestreo, por estar grabándose con dos dispositivos distintos con relojes no sincronizados, me indique cual es el offset entre ambas, pero en tiempos. que me diga "la mejor aproximación entre estas dos señales se da si atrasas (o adelantas) una de ellas x segundos".
lo hemos calculado probando diferencias entre valores desplazando los datos y los resultados son buenos, pero es por curiosidad.

gracias, saludos.
gracias por la ayuda, pero creo que no nos estamos entendiendo XD
no me preocupa reconstruir la señal, y las diferencias entre muestreos las arreglamos más cutremente (interpolando). por hacia donde llevas el post me da la impresión de que eres teleco :p

Jajajaj tanto se me nota? Pues si, basicamente la mitad de telecos es Fourier...

Ok, entiendo que las dos señales son muy parecidas, con siferencias solo por diferentes equipos y tiempos de muestreo, y lo que quieres es saber que offset aplicar para tenerlas lo mejor sincronizadas posible.

Para esto podrías usar la correlacion. Esta función te da la "similitud" entra las dos señales para todas las dieferencias de tiempos entre ellas. Cuanto más, más parecidas, por lo que donde haya un máximo, este punto sera la diferencia de tiempos entre las señales. Como ejemplo, la autocorrelacion (correlacion de una señal con ella misma) tiene el máximo en 0.
Puesto que estan muestreadas con frecuencias diferentes, este calculo deberías hacerlo con la señal reconstruida o con "interpolaciones", ya que el calculo considerara las muestras de las 2 señales espaciadas igual, y si no estan asi el calculo ire acarreando errores a medida que compara muestras más alejadas, y por tanto, con mas diferencia en tiempos.

Otra cosa es que vayas calculando correlaciones cada x muestras para recalcular el offset. En plan, las muestras 0 de las 2 señales tienen una diferencia de 327ms, las muestras 1000 de las 2 señales tienen una diferencia de 653ms, ... y de ahi podrias calcular cuanto se te van desincronizando las señales cada x muestras.

Saludos!
goldaster escribió:
gracias por la ayuda, pero creo que no nos estamos entendiendo XD
no me preocupa reconstruir la señal, y las diferencias entre muestreos las arreglamos más cutremente (interpolando). por hacia donde llevas el post me da la impresión de que eres teleco :p

Jajajaj tanto se me nota? Pues si, basicamente la mitad de telecos es Fourier...

Ok, entiendo que las dos señales son muy parecidas, con siferencias solo por diferentes equipos y tiempos de muestreo, y lo que quieres es saber que offset aplicar para tenerlas lo mejor sincronizadas posible.

Para esto podrías usar la correlacion. Esta función te da la "similitud" entra las dos señales para todas las dieferencias de tiempos entre ellas. Cuanto más, más parecidas, por lo que donde haya un máximo, este punto sera la diferencia de tiempos entre las señales. Como ejemplo, la autocorrelacion (correlacion de una señal con ella misma) tiene el máximo en 0.
Puesto que estan muestreadas con frecuencias diferentes, este calculo deberías hacerlo con la señal reconstruida o con "interpolaciones", ya que el calculo considerara las muestras de las 2 señales espaciadas igual, y si no estan asi el calculo ire acarreando errores a medida que compara muestras más alejadas, y por tanto, con mas diferencia en tiempos.

Otra cosa es que vayas calculando correlaciones cada x muestras para recalcular el offset. En plan, las muestras 0 de las 2 señales tienen una diferencia de 327ms, las muestras 1000 de las 2 señales tienen una diferencia de 653ms, ... y de ahi podrias calcular cuanto se te van desincronizando las señales cada x muestras.

Saludos!


A ver si encuentro algo buscando por correlación. Me dijeron que buscará convolución pero no lo vi muy claro y tire por como se nos fue ocurriendo. Como va valiendo pues seguimos así, pero tengo la curiosidad porque seguro que algo ya hay hecho...
Gracias, saludos.
7 respuestas