Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Crear señal u onda a partir de la lectura de un txt

Estas en el tema de Crear señal u onda a partir de la lectura de un txt en el foro de C/C++ en Foros del Web. Hola amigos... tengo una inquietud que quiza para ustedes sea muy facil... estoy usando el builder c++ para crear señales, ondas, espectros... sacar la fft, ...
  #1 (permalink)  
Antiguo 08/11/2010, 15:31
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 16 años, 1 mes
Puntos: 11
Exclamación Crear señal u onda a partir de la lectura de un txt

Hola amigos... tengo una inquietud que quiza para ustedes sea muy facil...

estoy usando el builder c++ para crear señales, ondas, espectros... sacar la fft, etc... pero por el momento estoy llenando los datos por medio de un randon....

quisiera ahora a raiz de leer un archivo que contiene una lista enorme de numeros, los cuales serian la amplitud... mostrar su onda y bueno despues sacar la fft (fast fourier transform) dividiendo esta misma señal en varios segmentos pero eso es otro tema....

he intentado leer un archivo txt pero no lo he conseguido... alguien me podria hechar una manito??

la idea es leer un txt con una lista de numeros ejemplo:
1300
7000
500
y asi...
y graficarlo.... pero mostrandolos en un chart... (como señales)

desde ya muchisimas gracias por la ayuda... saludos cordiales.
  #2 (permalink)  
Antiguo 09/11/2010, 09:31
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Crear señal u onda a partir de la lectura de un txt

¿el problema es leer el archivo, o procesar los datos leídos? no me queda claro.

Si es leer el archivo, probá un bucle con getline() en cada iteración.
  #3 (permalink)  
Antiguo 09/11/2010, 11:57
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 16 años, 1 mes
Puntos: 11
Respuesta: Crear señal u onda a partir de la lectura de un txt

Cita:
Iniciado por AlvaroG Ver Mensaje
¿el problema es leer el archivo, o procesar los datos leídos? no me queda claro.

Si es leer el archivo, probá un bucle con getline() en cada iteración.
el problema pasa por procesar los datos leidos...

quisiera poder leer cada linea... :
100
120
95
135, etc..

y con esos datos generar una señal... una onda...

muchas gracias por tu interes en ayudar.. agradezco muchisimo...
  #4 (permalink)  
Antiguo 09/11/2010, 12:06
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Crear señal u onda a partir de la lectura de un txt

pon algo de código como ejemplo de lo que querés hacer. En principio el archivo lo podés leer fácilmente con getline en un while (que lea hasta EOF) pero para la parte de generar la señal tendrías que mostrar cómo estás pensando hacerlo
  #5 (permalink)  
Antiguo 09/11/2010, 14:28
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 16 años, 1 mes
Puntos: 11
Respuesta: Crear señal u onda a partir de la lectura de un txt

Cita:
Iniciado por AlvaroG Ver Mensaje
pon algo de código como ejemplo de lo que querés hacer. En principio el archivo lo podés leer fácilmente con getline en un while (que lea hasta EOF) pero para la parte de generar la señal tendrías que mostrar cómo estás pensando hacerlo
Bueno con respecto de como mostrar la señal, pretendo hacerlo utilizando una herramienta gratuita para Builder c++ SDL chart esta me permite mostrar la señal de una onda hecha con RAND que se supone me entrega muchos numeros hasta el valor que yo le diga... pero quisiera ahora leer esos numeros desde un txt... he intentado hacerlo como me dices... getline en un while y hasta EOF.. pero no me funciona... podrias tu darme algun ejemplo de como debiera utilizarlo?? por ultimo como se podria utilizar en una tabla de multiplicar... multiplicar los numeros del txt por uno ingresado en el programa... solo si es que puedes para una mejor comprencion... ... bueno con respecto al codigo.. asi esta ahora:

RChart1->ClearGraf();
RChart1->DataColor = clBlue;
RChart1->MoveTo (0,0);
for (i=1; i<=FFT1->SpectrumSize; i++)
{
y = random(100-ScrollBar1->Position);
RChart1->DrawTo (i,y);
}
RChart1->ShowGraf();


(100-ScrollBar1->Position) esto es una barrita que la muevo para variar el random...

tendria que ser algo asi como y= la lectura desde el archivo con todos los nuemeros....

gracias.
  #6 (permalink)  
Antiguo 09/11/2010, 17:17
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Crear señal u onda a partir de la lectura de un txt

Pega el código que no te funciona, porque getline es la forma normal de leer un archivo. Quizás pueda indicarte el error.


Saludos.
  #7 (permalink)  
Antiguo 10/11/2010, 05:24
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses
Puntos: 73
Respuesta: Crear señal u onda a partir de la lectura de un txt

Lo que quieres es una gráfica X-Y. Ello supone que necesitas dos arrays numéricos del mismo tamaño, uno para el eje X y otro para el eje Y. Para el eje Y serían los datos que generas de manera aleatoria en tu programa (o los que leerás del archivo de datos). Para el eje X puedes tenerlo directamente, también mediante una lista de valores que ya tengas, o bien implícitamente, que es (como lo estás haciendo) graficando cada valor con su índice.

Si lo que quieres es, como dices, obtener después información sobre espectros, calcular FFTs, etc., desde luego que tendrás que meter esos datos en un array. Ello supone que deberías conocer el número de datos a leer. Si va a ser un dato conocido antes de escribir el programa, podrás dimensionar directamente los arrays. Si es un dato a introducir con el programa ya en ejecución, tendrás que utilizar asignación dinámica de memoria. En principio, voy a suponer que conoces el número de puntos de antemano (o que vas a dimensionar a un número de puntos igual o mayor al máximo que esperas):

Código C:
Ver original
  1. #define NUM_PUNTOS  1000    // Espero un máximo de 1000 puntos
  2. int leer_fichero(double *);
  3.  
  4. double y[NUM_PUNTOS];
  5.  
  6. int main(void)
  7. {
  8.  int datos_leidos;
  9.  
  10.  datos_leidos = leer_fichero(y);
  11.  // Aquí grafico los datos leídos
  12.  RChart1->MoveTo (0,0);
  13.  for (i=0; i<datos_leidos; i++)
  14.  {
  15.   RChart1->DrawTo (i,y);
  16.  }
  17. }
  18.  
  19. int lee_fichero(double *y)
  20. {
  21.  FILE *fichDatos;
  22.  int i=0;
  23.  double x;
  24.  
  25.  fichDatos = fopen("miFichero.txt", "r");
  26.  while (!feof(fichDatos))
  27.  {
  28.   fscanf(fichDatos, "%lf", &x);
  29.   if (!feof(fichDatos))
  30.   {
  31.    y[i] = x;
  32.    i++;
  33.   }
  34.  }
  35.  fclose(fichDatos);
  36.  return i;
  37. }
La forma de leer el fichero dependerá de su estructura, estoy suponiendo una simple columna de números. En la función lee_fichero se vuelve a comprobar el final de fichero porque al leer el último dato, aún no se ha leído la marca de final de fichero. Esta marca se lee al intentar leer después del último dato, y por ello se hacen dos comprobaciones: la de control del bucle y la del interior del bucle, para evitar el empleo de datos incorrectos si ya se está al final. También devuelve el número de puntos que ha leído, para utilizarlo en lugar del máximo declarado al principio.

Por supuesto, falta todo lo relativo a la correcta inicialización del sistema gráfico que vayas a utilizar.

De esta manera, tendrías los datos de tu fichero cargados en un array, listo para graficar, procesar, o lo que sea. Si tienes más dudas, ya sabes dónde estamos.
  #8 (permalink)  
Antiguo 11/11/2010, 13:43
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 16 años, 1 mes
Puntos: 11
Respuesta: Crear señal u onda a partir de la lectura de un txt

excelente, Fw190 y AlvaroG estoy muy agradecido de sus respuestas y todos los que han portado... muchisimas gracias......

yo soy usuario nuevo en builder c++ y estoy aprendiendo de a poquito este programa es muy bueno.... y por lo mismo no he podido hacer ninguna prueba con el codigo de Fw190 ya que el crear un nuevo proyecto se crean dos .cpp uno contiene el main que en realidad leyendo aqui se llama winmain y el otro contiene los componentes que uso en mi formulario... la pregunta es como o en que parte puedo insertar el codigo anterior?

Fw190 la respuesta esta muy completa, me dejo sorprendido... repito mis agradecimientos... y desde ya les aviso que les volveré a molestar, jeje...

saludos a todos.... y gracias por la disposición.. y su tiempo.
  #9 (permalink)  
Antiguo 12/11/2010, 02:07
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses
Puntos: 73
Respuesta: Crear señal u onda a partir de la lectura de un txt

No puedo decirte en qué parte insertar el código, eso dependerá de tu aplicación. Dado que se trata de una aplicación Windows, es de suponer que tocando algún botón o elemento de menú te presentará una ventana en la que elegir el archivo a tratar. Una vez elegido, tendrás el nombre de ese archivo en un array de caracteres, que tendrás que pasar como parámetro a tu función de lectura de datos. El prototipo sería algo así como

int lee_fichero(char *nombre_archivo, double *array_datos);

Repito, el dónde y cómo insertarlo (con las modificaciones que correspondan) depende de tu aplicación, no es posible dar una receta universal.

Etiquetas: lectura, partir, señal, txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:10.