El 19 de mayo de 2015, 17:19, Rolando Paz <flx...@gmail.com> escribió:

> Hola buenos dias.
>
> Lo que he logrado entender, considerando que lo que quiero es graficar los
> datos que salen de la IBOB, es lo siguiente:
>
>
> a. Los datos que procesa la IBOB se graban en una memoria compartida de mi
> diseño, y son datos de 32 bit signed.
>
> b. Estos datos son los que viajan por medio de UDP.
> El archivo adjunto main.c es el que yo utilizo para automatizar la
> transmisión de los paquetes UDP que salen de la IBOB.
> Y el comando dump_data es el que yo debo usar para obtener los datos.
>
> static void dump_data_cmd(int argc, char **argv)
> {
>       for(x=0; x<2048; x++){
>               value = 
> sif_bram_read(XPAR_POCO_TEST_V7_XENGINE_AA_REAL_BASEADDR, x);
>               xil_printf("%08d %08d\n\r", x, value);
>       }
> }
>
> c. Luego que yo inicializo la transmisión de los paquetes UDP, entiendo que 
> yo debo abrir un socket UDP de esta forma para obtener los datos del puerto 
> ethernet de la IBOB.
>
> import numpy as np
> import math, struct, socket
> import matplotlib.pyplot as plt
>
> HOST = '169.254.128.32'
> PORT = 6969
>
> #estableciendo el socket UDP
> cs = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
> cs.connect((HOST, PORT))
>
> d. Luego de tener abierto el socket, yo debo obtener los datos y 
> desempaquetarlos de esta forma:
>
> #desempaquetando datos binarios enviados por el enlace UDP
> resp = cs.recv(4096)
> pkglen = struct.calcsize('<l')
>     dataUDP = (struct.unpack('<l', s[i:i+pkglen]) for i in 
> range(0,len(resp),pkglen))
>
> e. Entiendo que acá yo tendría los datos binarios y que debo convertir en 
> enteros o reales para poder ser graficados con matplotlib.
>
> data = np.array(dataUDP,dtype=float) .
> plt.plot(data)
> plt.show()
>
> Este análisis de la solución está bien orientada?
>
>
Es correcto. Lo único date cuenta que 'dataUDP' era una lista de enteros y
que 'data' lo creas como array de 'floats'. Parece innecesaria esta
conversión.

Aunque lo mejor es ahorrarte algunos pasos y usar directamente
np.fromstring:

resp = cs.recv(4096)
data = np.fromstring(resp, dtype=np.uint32)


>
> Saludos
>
> Rolando Paz
>
>
> El 18 de mayo de 2015, 18:02, Chema Cortes <pych...@gmail.com> escribió:
>
>>
>>
>> El 18 de mayo de 2015, 16:29, Rolando Paz <flx...@gmail.com> escribió:
>>
>>> Hola Chema
>>>
>>> Los datos que yo recibo de la IBOB son datos signed de 32 bit, creo que
>>> lo correcto seria "<l"?
>>>
>>> De acuerdo a tus observaciones, entonces el código debería ser así:
>>>
>>> #!/usr/bin/python
>>> """
>>> Primera prueba que busca graficar los datos binarios enviados por UDP
>>> desde la IBOB.
>>> Rolando Paz
>>> """
>>> import numpy as np
>>> import math, struct, socket
>>> import matplotlib.pyplot as plt
>>>
>>> HOST = '169.254.128.32'
>>> PORT = 6969
>>>
>>> #estableciendo el socket UDP
>>> cs = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
>>> cs.connect((HOST, PORT))
>>>
>>> #desempaquetando datos binarios enviados por el enlace UDP
>>> pkglen = struct.calcsize('<l')
>>>     dataUDP = (struct.unpack('<f', s[i:i+pkglen]) for i in
>>> range(0,len(resp),pkglen))
>>>
>>
>> Si recibes "unsigned 32bits", no lo desempaquetes entonces  como floats.
>>
>>
>>>
>>> data = np.array(dataUDP,dtype=float)
>>>
>>
>> Lo mismo, si son enteros, ¿necesitas que sean floats para algo?
>>
>>
>>> plt.plot(data)
>>> plt.show()
>>>
>>> Es correcto el código?
>>>
>>
>> Lo más divertido del python es probar a ver si funciona.
>>
>>
>>>
>>> Saludos
>>>
>>> Rolando Paz
>>>
>>>
>>> El 18 de mayo de 2015, 3:33, Chema Cortes <pych...@gmail.com> escribió:
>>>
>>>>
>>>>
>>>> El 17 de mayo de 2015, 1:02, Rolando Paz <flx...@gmail.com> escribió:
>>>>
>>>>> Hola nuevamente !
>>>>>
>>>>> Este script lo que debe hacer es obtener los datos desde una tarjeta
>>>>> llamada IBOB (que en algún momento comenté por acá), enviados por UDP, y
>>>>> luego graficarlos.
>>>>>
>>>>> Los datos son FFTs (Fast Fourier Transform) que procesa la IBOB.
>>>>>
>>>>> Pueden darme su opinión?
>>>>>
>>>>
>>>> Parece un código bastante directo. Si funciona, no hay más que decir.
>>>>
>>>> Tal como está, a la dirección de HOST le faltan las comillas y la
>>>> variable cs de pronto se expande como controlsocket. Por lo demás, ¿es
>>>> necesario desempaquetar los datos recibidos como "unsigned long" (>L)? Si
>>>> los datos se envían como floats, igual sería mejor desempaquetarlos
>>>> directamente como float (>f). Ten en cuenta que np.array no te hace una
>>>> conversión binaria de un "long" en "float".
>>>>
>>>> Por otro lado, del socket puedes recibir cualquier cantidad de datos,
>>>> pero en cambio sólo estás desempaquetando un único dato, algo ilógico
>>>> porque debes esperar más si quieres hacer una gráfica con ello, y además da
>>>> error. Supongo que lo que buscas es desempaquetar una secuencia de datos:
>>>>
>>>>     pkglen = struct.calcsize(fmt)
>>>>     dataUDP = (struct.unpack('>f', s[i:i+pkglen]) for i in
>>>> range(0,len(resp),pkglen))
>>>>
>>>>
>>>>
>>>>>
>>>>> #!/usr/bin/python
>>>>> """
>>>>> Primera prueba que busca graficar los datos binarios enviados por UDP,
>>>>> Rolando Paz
>>>>> """
>>>>> import numpy as np
>>>>> import math, struct, socket, pyfits
>>>>> import matplotlib.pyplot as plt
>>>>>
>>>>> HOST = 169.254.128.32
>>>>> PORT = 6969
>>>>> print '\nConectando la iBOB...',
>>>>>
>>>>> #estableciendo el socket UDP
>>>>> cs = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
>>>>> cs.connect((HOST, PORT))
>>>>>
>>>>> resp = controlsocket.recv(4096)
>>>>> print resp
>>>>>
>>>>> #desempaquetando datos binarios enviados por el enlace UDP
>>>>> dataUDP = struct.unpack('>L',resp)
>>>>> data = np.array(dataUDP,dtype=float)
>>>>> plt.plot(data)
>>>>> plt.show()
>>>>>
>>>>> _______________________________________________
>>>>> Python-es mailing list
>>>>> Python-es@python.org
>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>>>> http://ch3m4.org/blog
>>>> Buscador Python Hispano: http://ch3m4.org/python-es
>>>>
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es@python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>>
>> --
>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>> http://ch3m4.org/blog
>> Buscador Python Hispano: http://ch3m4.org/python-es
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a