Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
acemu:proyectos:linux:procesamiento_datos [2010/04/05 13:41] tabare |
acemu:proyectos:linux:procesamiento_datos [2011/02/27 15:20] (actual) luis |
||
---|---|---|---|
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:// | ||
- | |||
- | 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: | ||