acemu:articulos:articulos_tecnicos:adquisicion_y_procesamiento_de_datos:procesamiento_datos
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
acemu:articulos:articulos_tecnicos:adquisicion_y_procesamiento_de_datos:procesamiento_datos [2011/02/27 10:28] – borrado luis | acemu:articulos:articulos_tecnicos:adquisicion_y_procesamiento_de_datos:procesamiento_datos [2019/10/16 18:33] (actual) – [Graficando los datos] kenneth | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | ===== Procesamiento de los datos y generación de gráficos ===== | ||
+ | |||
+ | En el [[acemu: | ||
+ | vimos como acondicionar el archivo generado por la salida del **DataQ**, obteniendo el archivo **'' | ||
+ | |||
+ | < | ||
+ | # head data.csv | ||
+ | " | ||
+ | " | ||
+ | "" | ||
+ | -4.8828E-01, | ||
+ | -4.6875E-01, | ||
+ | -4.6875E-01, | ||
+ | -4.8828E-01, | ||
+ | -4.8828E-01, | ||
+ | -4.8828E-01, | ||
+ | </ | ||
+ | |||
+ | Para el procesamiento de los datos vamos a usar otra de las herramientas básicas de procesamiento de datos de **Linux**: **'' | ||
+ | |||
+ | El nombre de **'' | ||
+ | |||
+ | Dejamos como ejercicio al lector el averiguar lo que hace el script que escribiremos en **'' | ||
+ | |||
+ | Simplemente daremos como pista lo que queremos hacer: | ||
+ | |||
+ | - Saltearse las primeras 3 líneas. | ||
+ | - Por cada línea que contiene una lectura de datos, tomar únicamente los datos de la primera columna e imprimirlos en un nuevo archivo acompañados por un valor " | ||
+ | |||
+ | < | ||
+ | awk -F"," | ||
+ | BEGIN {c=0; | ||
+ | {c=c+1; print c, | ||
+ | </ | ||
+ | |||
+ | Acabamos de crear el archivo datos.xy, si miramos su contenido: | ||
+ | |||
+ | < | ||
+ | head datos.xy | ||
+ | |||
+ | 1 -4.8828E-01 | ||
+ | 2 -4.6875E-01 | ||
+ | 3 -4.6875E-01 | ||
+ | 4 -4.8828E-01 | ||
+ | 5 -4.8828E-01 | ||
+ | 6 -4.8828E-01 | ||
+ | 7 -4.8828E-01 | ||
+ | 8 -4.6875E-01 | ||
+ | 9 -4.6875E-01 | ||
+ | 10 -4.8828E-01 | ||
+ | </ | ||
+ | |||
+ | Teniendo en cuenta que en realidad la toma de datos corresponde a una frecuencia de 60 datos por segundo (60Hz de frecuencia de muestreo), podríamos mejorar nuestro script de **'' | ||
+ | |||
+ | < | ||
+ | awk -F"," | ||
+ | BEGIN {c=0; | ||
+ | {c=c+1; print c/ | ||
+ | </ | ||
+ | |||
+ | Ahora, si miramos el contenido del archivo datos.xy: | ||
+ | |||
+ | < | ||
+ | head datos.xy | ||
+ | |||
+ | 0.0166667 -4.8828E-01 | ||
+ | 0.0333333 -4.6875E-01 | ||
+ | 0.05 -4.6875E-01 | ||
+ | 0.0666667 -4.8828E-01 | ||
+ | 0.0833333 -4.8828E-01 | ||
+ | 0.1 -4.8828E-01 | ||
+ | 0.116667 -4.8828E-01 | ||
+ | 0.133333 -4.6875E-01 | ||
+ | 0.15 -4.6875E-01 | ||
+ | 0.166667 -4.8828E-01 | ||
+ | </ | ||
+ | |||
+ | El formato de salida podría mejorarse considerablemente, | ||
+ | |||
+ | < | ||
+ | awk -F"," | ||
+ | BEGIN {c=0; | ||
+ | {c=c+1; printf "%-10f %-10f\n", | ||
+ | </ | ||
+ | |||
+ | Ahora el archivo datos.xy contiene: | ||
+ | |||
+ | < | ||
+ | head datos.xy | ||
+ | |||
+ | 0.016667 | ||
+ | 0.033333 | ||
+ | 0.050000 | ||
+ | 0.066667 | ||
+ | 0.083333 | ||
+ | 0.100000 | ||
+ | 0.116667 | ||
+ | 0.133333 | ||
+ | 0.150000 | ||
+ | 0.166667 | ||
+ | </ | ||
+ | |||
+ | Ahora sí, se parece a algo. Ni que hablar que podríamos continuar mejorando el script, incluso para tomar el dato de la frecuencia de sampleo y no tener necesidad de dárselo explícitamente, | ||
+ | |||
+ | |||
+ | Lo único que nos está faltando es generar una gráfica para ver el resultado del ensayo de motor. | ||
+ | |||
+ | ===== Graficando los datos ===== | ||
+ | |||
+ | Referencias: | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | |||
+ | Para generar una gráfica de datos adecuada para insertar en un reporte de ensayo hay muchas alternativas, | ||
+ | |||
+ | Incluso con esa limitación existen una infinidad de herramientas que nos pueden servir: asymptote, epix1, jgraph, pyxplot, etc... (aclaración: | ||
+ | |||
+ | En nuestro caso elegimos **'' | ||
+ | |||
+ | **'' | ||
+ | |||
+ | Al igual que en los casos anteriores, no ahondaremos aquí en detalles de cómo funciona **'' | ||
+ | |||
+ | Lo más sencillo que le podemos pedir a **'' | ||
+ | |||
+ | < | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | Eso produce el archivo **pyxplot.eps**. Por defecto, si no le indicamos nada, **'' | ||
+ | |||
+ | Para especificar otros formatos de salida (pdf, jpg, gif, etc.), debe invocarse el comando '' | ||
+ | |||
+ | Otra posibilidad interesante, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Si queremos ponerle otro nombre al archivo de salida, usaremos el comando '' | ||
+ | |||
+ | En el ejemplo mostrado vemos que pyxplot elije por defecto muchos parámetros: | ||
+ | |||
+ | < | ||
+ | set terminal X11 | ||
+ | set width 20 | ||
+ | set size 10 | ||
+ | set nodisplay | ||
+ | set nokey | ||
+ | set grid x1y1 | ||
+ | plot ' | ||
+ | set display | ||
+ | refresh | ||
+ | </ | ||
+ | |||
+ | Si salvamos este script a un archivo, digamos '' | ||
+ | |||
+ | pyxplot script.pyx | ||
+ | | ||
+ | |||
+ | produce la siguiente salida en pantalla: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Un " | ||
+ | |||
+ | // | ||
+ | |||
+ | donde los valores de //**x**// corresponden al voltaje leido y los valores de //**y**// al empuje. | ||
+ | |||
+ | A su vez, los datos obtenidos adolecen del defecto de no haber sido ajustados a cero. No hay problema, a ojo de buen cubero podemos decir que si a los datos le sumamos 0.488, habremos ajustado aproximadamente el cero. Podríamos ser más exactos pero con esto por el momento alcanza. | ||
+ | |||
+ | Además de transformar los datos a algo que tenga sentido, podemos ajustar los datos a una curva de spline de manera de " | ||
+ | |||
+ | Podemos continuar mejorando el gráfico, agregándole etiquetas a los ejes, un título adecuado y eligiendo un color para el trazo del gráfico. Agregando todas estas y otras " | ||
+ | |||
+ | < | ||
+ | set terminal X11 | ||
+ | set width 20 | ||
+ | set size 10 | ||
+ | set nodisplay | ||
+ | set title ' | ||
+ | set xlabel ' | ||
+ | set ylabel ' | ||
+ | set nokey | ||
+ | set grid x1y1 | ||
+ | spline f() ' | ||
+ | g(x)=(f(x)+0.488)*19.198-0.1311 | ||
+ | plot [0.5:2.5] g(x) | ||
+ | set display | ||
+ | refresh | ||
+ | </ | ||
+ | |||
+ | Al ejecutar este programa con **pyxplot** esto produce la siguiente salida en pantalla: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Si en lugar de sacar el resultado por pantalla, quisiéramos generar una salida **pdf** a un archivo **acemumx001.pdf**, | ||
+ | |||
+ | < | ||
+ | set terminal pdf | ||
+ | set output ' | ||
+ | </ | ||
+ | |||
+ | Este artículo apenas roza la potencialidad de los comandos y herramientas descritos, y es apenas una sombra de toda la flexibilidad y potencia que se encuentra en la punta de los dedos de un usuario de Linux. La intención del mismo es la de estimular la curiosidad del lector aficionado a las computadoras y se anime a explorar estas y otras posibilidades que ofrece el entorno de trabajo Linux. | ||
+ | |||
+ | [[ACEMU: | ||
acemu/articulos/articulos_tecnicos/adquisicion_y_procesamiento_de_datos/procesamiento_datos.1298831296.txt.gz · Última modificación: 2011/02/27 10:28 por luis