el 05-11-2016 07:22 AM
Buenos días,
¿como puedo extraer los datos de un arrya en un fichero? He buscado en el foro pero no encuentro nada en LABWINDOWS. Necesito extraer los datos que obtengo para posteriori analizarlos con Matlab.
Cualqier ayuda es bien recibida¡¡
Un saludo a todos.
¡Resuelto! Ir a solución.
el 05-11-2016 09:22 AM
Hola,
el CVI proporciona varios instrumentos para almacenar datos:
So nos das algun ejemplo de los datos que tienes que almacenar puedo proporcionarte un pequeño código por probar.
el 05-11-2016 11:44 AM
el 05-11-2016 05:47 PM
Bueno, si tienes algo por comentar aquí estoy.
Solamente quiero añadir que las soluciones que te he indicado son de librerías propias del CVI: si quieres algo que pueda ser usado en otros compiladores debes usar funciones de las librerías estándard: fopen, fprintf, fclose. Tienen una sintáxis algo diferente pero son poderosas también.
05-12-2016 05:10 AM - editado 05-12-2016 05:13 AM
Hola Roberto,
a ver estoy intentando, pero solo me ha salido algo básico.
basicamente estoy haciendo un barrido de frecuencias. Cada vez que se ejecuta el bucle while, se lee una frecuencia distitnta.
Lo ideal seria meter cada frecuencia en una colmna, para luego poder analizarlas todas, y no tener que estar abriendo un fichero por cada frecuencia que quiero analizar.
Las muestras de cada tono se almacenan en un array que se va sobreescribiendo cada vez que se ejecuta el while.
No se si me he explicado bien,
Un saludo. Mil gracias
05-12-2016 07:15 AM - editado 05-12-2016 07:16 AM
Bueno, creo que si simplemente vas acumulando datos en un largo arreglo sin borrar nada podrías obtener lo que quieres.
Te adjunto un ejemplo que puede ejecutarse en la ventana de inmediato del CVI: basicamente se simula tener 10 frecuencias y adquirir 10 tonos para cada una; al final se crea el archivo de datos con las mediciones de cada frecuencias en columna.
#include <formatio.h> static int x[100]; // Arreglo de mediciones static int frecuencia, tono, idx; // Simulacion de como se adcquieren las mediciones for (frecuencia = 0, idx = 0; frecuencia < 10; frecuencia++) { for (tono = 0; tono < 10; tono++) { x[idx++] = frecuencia * 10 + tono; } } // Creacion del archivo de datos ArrayToFile ("c:\\temp\\data.txt", x, VAL_INTEGER, 100, 10, VAL_GROUPS_TOGETHER, VAL_GROUPS_AS_COLUMNS, VAL_SEP_BY_TAB, 0, VAL_ASCII, VAL_TRUNCATE);
05-12-2016 11:24 AM - editado 05-12-2016 11:26 AM
Hola Roberto,
El problema que yo le veo a eso es que en mi caso, cada frecuencia tienes 2048 muestras, y ademas de eso el barrido es ajustable, por lo que, si junto todas las muuestras para hacerlo de esta forma, puedo acabar con un vector demasiado grande. El programa seria algo asi
mientras (contar hasta numero de salto en el barido)
envío informacion a un generador de onda
espero que se estabilice la señal
obtengo la señal en un thread aparte
almaceno la señal en un vector
Por lo tanto, cada vez que se ejecuta ArrayToFile, me escribe el vector consecutivo al anterior. Podria almacenar todos los vectores juntos, pero, si por ejemplo hago un barrido de 40 frecuencias, serian 40*2048 elementos en el vector.
No se si habria alguna manera de hacerlo, alomejor con los otros comandos que me pusiste anteriormente en vez de con ArrayToFile.
Intentare a ver, aunque no me queda muy claro el funcionamiento, seguire investigando.
Saludos
el 05-13-2016 02:26 AM
Bueno, yo no estría preocupado por la ocupación de memoria: 40 * 2048 * 8 (dimensión de un doble) son 655 kB en la memoria de la PC: con las máquinas de hoy no son realmente un problema!
Sí se podría hacer con otros comandos de escritura del archivo, pero tu dijiste que quieres tener las mediciones de una frecuencia en columna y esto es un problema ya que en cada frecuencia debes añadir un dato a una línea que ya existe en el file. Si puedes organizar tu archivo de tal manera que cada frecuencia sea en una sola línea podrías escribir todos los datos cuando terminas las mediciones de una frecuencia, esto es puedes tener solo un arreglo de 2018 muestras y sobreescribirlo en cada frecuencia.
el 05-14-2016 06:01 AM
al final lo hice con ArrayToFIe. capturando un vector mayor, no caí yo en que el peso del array es mínimo. Fallo mío
Gracias por la ayuda. Depsues de mucho tiempo ya casi esta el proyecto acabado ¡¡ xDD
el 05-14-2016 05:46 PM
Me alegra oír esto. ¡Suerte con tu proyecto!