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/