martes, 21 de mayo de 2013

Tarea 7: Simuación de movilidad

Para esta tarea se nos pide realizar un código documentado en donde implementemos una simulación de una MANET que cumpla con las siguientes características.

  • Llegadas y salidas de nodos con una distribución exponencial, procesos poisson.
  • Un modelo de movilidad
  • Nodos con capacidad de batería inicial
  • Envío de mensajes consume batería según el radio de transmisión
  • El radio es ajustable en cada nodo
  • Se utiliza una inundación con un TTL adaptable.

Por lo que realicé un código en python, utilizando pygame, y numeros random con la librería estandar de python y de numpy, para poder realizar esta simulación.

Primero que nada declaro variables generales, de esta manera, podemos tener el largo y ancho de la ventana, esto es importante para obtener los limites de la imagen, los cuales van a estar rebotando durante toda la pantalla, en las muestras de simulación declaro una población de 100 nodos que van entrado por procesos poisson, estoy verificando el tiempo cada corrida y estos en su vez tienen su propio tiempo que si entran dentro de los parámetros aparecen en la simulación.

El campo de visión de cada nodo es parametrizado de manera inicial, este puede ser modificado durante el transcurso de la simulación, al igual que el TTL, el cual crea conexiones con los nodos vecinos que se encuentran a su alrededor,

El TTL se puede cambiar según su propagación hacia atrás, pero esto afecta considerablemente su rendimiento ya que cada nodo tiene una batería y al momento de tener más TTL, estas conexiones pierden la batería y se quedan sin poder propagar la información por inundación.

El movimiento que desarrollé fue el agregar velocidad de manera exponencial y cambiar sus ángulos con un aleatorio con distribución uniforme, y luego de esta manera genera pequeños vectores y de esta manera hace buenos movimientos y creo que es apropiado para este tipo de simulación.

El TTL es una función recursiva que hace la propagación según cada distancia junto con todos los nodos y vamos comparando para obtener las que se encuentran en el rango de recepción, por lo que cambiamos sus estados y estos a su vez, van hacia atrás para obtener un mayor rango de información según su TTL.

En esta simulación podemos suponer que el enemigo es un helicóptero que esta en un campo tratando de mandar bombas en un campo de batalla, entonces, los soldados tienen radios que mandan información cuando uno de estos ve que en su campo de visión se encuentra el helicóptero, se quedan quietos y envían a los demás.

Código


Video de muestras


Referencias
Peter's Website, Project pygame physics simulation, Peter Colling, extraido de http://www.petercollingridge.co.uk/
Redes ad hoc, Redes de telecomunicaciones, Elisa Schaeffer, extraido de http://elisa.dyndns-web.com/~elisa/

miércoles, 15 de mayo de 2013

Lab: Detección de movimiento

Para esta entrada se nos pide realizar un la detección de movimiento de una secuencia de imágenes por lo que para esto tengo una secuencia de imagenes que las voy combinando con frames e ir calculando su histograma y calcular su entropia, si la entropia es menor a 2.0, quiere decir que no hay movimiento en la imagen, luego checo en base a los filtros, en la diferencia, la cantidad donde existen blancos, de esta manera pongo una flecha que indica el movimiento de la imagen.

De esta manera podemos saber si existe movimiento o no en la imagen, comparada con el frame de la imagen anterior, por ejemplo imágenes creadas donde un circulo se mueve hacia la derecha.

Para este laboratorio solamente checo el movimiento de un solo objeto.

Ahora les presento el video.



Y por ejemplo, si llega un momento en que no se mueve, el programa indica que no se esta en movimiento.



Este es el código relevante.


Referencias. 
Animation using image sequence, Tkinter-discuss, Extraido de http://mail.python.org/pipermail/tkinter-discuss/2009-December/002138.html

Proyecto: QTigual

Presentación




Propósito
Actualmente el desarrollo de sistemas en dispositivos móviles es una de las muchas maneras en las cuales nosotros como futuros ingenieros en software podemos utilizar para hacer uso de todas sus capacidades y aprovecharlas para hacer innovadoras ideas y atraer al público en general.

Para el proyecto visión computacional se nos pide realizar un sistema que utilice las técnicas aprendidas durante el semestre, es por eso que estuve trabajando en la combinación de tratamiento de imágenes y los dispositivos móviles para realizar un juego donde el usuario debe dibujar lo más igual posible, una imagen que se le muestra al principio de manera que contra el tiempo, luego de un proceso con la imagen dibujada y la original, realizar filtros para obtener un porcentaje de igualdad de imagenes.

Diseño de software
El software está orientado a diferentes campos, primero que nada tenemos una aplicación móvil desarrollada en el lenguaje de programación Objective-C en donde tenmos diferentes vistas, de manera que tenemos una vista principal en donde se la bienvenida al usuario en el juego y tiene que seleccionar si desea continuar jugando.

Durante 4 segundos aparece una imagen que se carga desde el servidor, luego se pasa a la siguiente vista para que el usuario mediante un canvas pueda capturar el dibujo y después de 10 segundos, esta imagen se mande al servidor donde por medio de una aplicación WEB desarrollada en PHP lo guarde y establesca conexión con el puerto 6699 creado mediante un socket en python, de esta manera, al momento de mandar un mensaje a este socket se crea una conexión independiente mediante un hilo y se empieza a procesar la imágen para dar como regreso un promedio de cuanta cantidad de imagen es igual o semejante a la capturada por el usuario, para esta a su vez responder a la aplicación WEB de PHP y retornar un mensaje por HTTP a la aplicación móvil mediante una alerta.

Descripción textual
El sistema se divide en diferentes partes importantes:

  • La aplicación móvil la cual captura mediante un canvas el dibujo hecho por el usuario para mandarlo a la aplicación WEB.
  • Aplicación WEB en PHP que guarda la captura y hace una llamada al puerto que contiene el procesamiento de los filtros.
  • Socket que hace todas las imagenes de tratamiento para devolver el porcentaje de semejanza con la imagen.


En diagrama anterior podemos ver las etapas por las que pasa el juego, de manera que podamos los procedimientos por lo que pasa y sobre los tratamiento de imagen necesarios para obtener un buen porcentaje de semejanza.

Entre los filtros que es necesario desarrollar son:

  • Cambiamos a grises
  • Agregamos el filtro de la mediana varias veces
  • Sacamos la diferencia 
  • Ponemos un umbral
  • Obtenemos esquinas
  • Obtenemos los bordes con Laplaciana
  • Agregamos BFS
  • Obtenemos figura
  • Dibujamos en dicha figura cada esquina detectada con un elipse
  • Se comprara con el mismo procedimiento la figura hecha por canvas
  • Obtenemos el porcentaje de blancos de la imagen
Imagen de server


Detección de esquinas de imagen de server 

Detección de esquinas de imagen dibujada

Se sobre ponen los círculos más grandes
con los círculos más pequeños y
 sacamos la cantidad de blanco en la imagen,
En este caso, no coincidió con ninguno, por lo tanto
no se tiene semejanza






Librerías utilizadas
En la parte de visión computacional no utilicé ningún recurso para realizar los filtros, todo fue escrito por mi, utilizando solamente la librería de imagenes de Python para poder accesar a cada pixel y aplicar los diferentes filtros.

En la parte web, utilizo los recursos de python para números random, numpy y para crear sockets y en la parte móvil utilizo los recursos necesarios para las interfaces y vistas.


  • Threading
  • PIL
    • Image, 
    • ImageTk, 
    • ImageDraw
  • math 
    • floor,
    • atan, 
    • fabs, 
    • pi, 
    • cos, 
    • sin, 
    • ceil, 
    • sqrt, 
    • degrees, 
    • atan2
  • random 
    • randint
  • time
  • numpy
  • socket



Desempeño
Al ser hecha por mi, el proyecto al principio demoraba mucho para dar una respuesta, este fue en el problema que estuve trabajando durante este tiempo en hacer tiempos de respuesta más pequeñas, por lo que hice de cierta manera que la imágen bajara de tamaño para de esta forma el procesado de los pixeles fuera más rápido y dar un resultado rapidamente.

Las imágenes con las que trabaje al principio eran computacionalmente pesadas, por lo de un tiempo aproximado de 15 segundos de respuesta, lo baje a 10, para luego en la versión entregable del proyecto final, lo tenemos aproximadamente en unos 4-5 segundos.


El tiempo está siendo marcado siempre por el tiempo de vida de la conexión del hilo en python, por lo que podemos ver los resultados cada que se inicia un nuevo juego en el terminal.

Trabajo a futuro
Como trabajo futuro yo creo que sería el hacer mucho menos el tiempo de espera al porcentaje de la similitud para de esta manera poder hacer que el usuario tenga una respuesta más rapida sobre lo que esta jugando y no se aburra de estarlo esperando.

Otro proyecto futuro sería el agregar niveles, agregar dificultades de manera que cada vez sean imágenes más dificiles para su similitud, esto mas o menos se encuentra contemplado en el proyecto ya que como lo dije anteriormente al momento de detectar las esquinas el radio de esta detección cambia y de esta manera podemos hacer que los radios sean más pequeños y aumente la dificultad de similitud.

Y como proyecto de largo plazo también el agregar funcionalidades necesarias para su proyección, por ejemplo el jugar contra enemigos, el compartir en redes sociales, en poner puntaje en el gamecenter, etc...


Este es un video de cómo funciona el juego.


Liga a mi repositorio. aquí.

martes, 14 de mayo de 2013

Triangulación

Un receptor GPS utiliza la Triangulación para determinar su posición en la superficie de la Tierra por señales de temporización a partir de tres satélites del sistema de posicionamiento global. El sistema GPS es una red de satélites que orbitan la tierra que envían señales a los receptores GPS, proporcionando información sobre la posición, el tiempo y la velocidad de movimiento del dispositivo.

Cada satélite de la constelación GPS envía señales periódicas junto con una señal horaria. Estas señales son recibidas por los receptores GPS, el cual calcula la distancia entre el sensor y cada satélite como una función del retardo entre el tiempo de transmisión y el momento de la recepción. Aunque las señales (tipo de ondas de radio) viajan a la velocidad de la luz, siempre hay una demora debido a que los satélites están a decenas de miles de kilómetros sobre la Tierra.

Una vez que el GPS ha calculado las distancias a lo menos tres satélites, puede realizar los cálculos. Triangulación vuelve a afirmar su posición en un mapa con dos compases saber la distancia exacta desde tres lugares diferentes. El área de superposición de tres círculos centrados en cada lugar corresponde a su sitio ya que el radio de cada círculo corresponde a la distancia entre su lugar y cada lugar.

En la versión GPS de los cálculos se realizan en tres dimensiones con un conjunto imaginario de la brújula 3D, por lo que su posición corresponde a la superposición de los tres círculos cuyo radio viene dado por la distancia entre su posición y cada satélite. Si el receptor GPS puede recibir datos de un cuarto satélite, las mediciones se pueden verificar de nuevo.

El proceso de cálculo es extremadamente rápido, que permite que el receptor GPS para indicar su posición, altitud (aire), la velocidad y el destino.

Para hacer la Triangulación es necesario realizar un plano cartesiano de manera que el centro de nuestro plano sea 0,0, esto para poder asegurar que vamos a tener una intersección entre los circulos, es por eso que la creación de las antenas, cuyo radio es la intensidad de la señal, se crean uno, en el centro del plano catesiano, otro sobre el eje y y otro más, debajo de los dos circulos anteriores, esta manera es mucho más facil calcular lo que es la i y la j, por lo tanto tener una buena ubicación.

Para crear la interfaz para la observación del comportamiento de la trigonalización, utilicé la libreria tk de python en donde primero generé una ventana de 500 pixeles x 500 pixeles, programé un script en el cual pudiéramos obtener valores de -1:1 y tenerlos en sus planos correspondientes, por lo que dividí la ventana de manera que tuviéramos un plano de cuatro partes, en donde en la parte superior derecha tengamos los valores positivos de estos números, luego en la parte superior izquierda los valores negativos respecto al eje x y los valores positivos respecto al eje y, la parte inferior derecha los valores prositivos respecto al eje x y los valores negativos respecto al eje y, y en la parte inferior izquierda los valores negativos respecto a ambos ejes, por lo que por medio de la fórmula (1-x)*250, donde x es el número de que queremos graficar entre -1:1 y el menos uno para controlar la posición de pixeles, por lo que de esta manera podemos posicionar los elementos de manera correcta.

Luego de tener los valores de las fuerzas de los circulos, podemos calcular donde está posicionado según las matemáticas de la triangulación, en base a Wikipedia, se saca la derivación de los puntos a calcular y obtenemos.


X = (ar**2 - br**2 + d**2)/float((2*d))
Y = ((ar**2-br**2+i**2+j**2)/(2*j))-((float(i/j))*X)


En  donde:
ar = radio antena A
br = radio antena B
d = distancia entre antena A y antena B
i = distancia del origen a antena C
j = la distancia entre el punto de encuentro y la ubicación de la antena C

Tomada de wikipedia

Para entenderlo, primero hice un dibujo.

Ahora les muestro el código.



Este es un video que tomo sobre la animación del mismo ejercicio que dibuje.


Referencias.
NA, (2012). Qu'est-ce que la trilatération?. Mio web. Recuperado de http://eu.mio.com/fr_fr/systeme-positionnement-global_4991.htm

lunes, 13 de mayo de 2013

Lab: Telecomunicaciones y satélites

Los servicios de telecomunicaciones en todo el mundo dependen en gran medida de los satélites, proporcionando enlaces a la tierra entre diferentes aplicaciones, para este laboratorio se nos pide realizar una investigación de dichas aplicaciones, al igual que de los mecanismos que se utilizan para interceptar las comunicaciones y las maneras que existen para protegerlas.

Entre las diferentes aplicaciones que podemos encontrar en los satélites de comunicaciones, tenemos los siguientes:

Los servicios fijos, son conexiones fijas o de distancia de punto a punto, donde se tienen antenas fijas y los satélites ofrecen una gran variedad de aplicaciones, por ejemplo transporte de voz, datos, televisión y contenidos de internet a diferentes centros de distribución y empresas de redes que hacen enlaces a terminales, llamados VSAT, logrando así la conectividad a gran escala con una buena flexibilidad.

En muchas partes del mundo, las redes terrestres están fragmentados o no existen, por lo que la conexión por satélite abre una puerta a esas zonas que están desatendidas.

La radiodifusión ha sido la principal aplicación de los satélites durante muchos años, la televisión a difusión directa o por radio, canales de televisión y radio que se transmiten desde las estaciones terrestres de satélites que regresan en grandes áreas de cobertura de la tierra, directamente a nuestra la casa.

Un solo satélite puede ofrecer cientos de canales de un país o de un continente entero, la transmisión de escaneo o la adquisición de estas señales ha aumentado el potencial de un satélite en términos de número de canales, las emisiones pueden ser recibidos por los usuarios privados, así como a trés de claves públicas que dan acceso a la conexión por satélite.

Las conexiones móviles también forman parte de las aplicaciones, las conexiones de voz, datos, video, a los dispositivos móviles, las centrales locales llevan a las llamadas a una estación terrena (algunas veces llamado telepuerto), en el que se emiten en la dirección de un satélite geoestacionario, de esta manera, se reenvía al satélite otra estación que hace la recepción y el enrutamiento final, existen algunos teléfonos que se conectan directamente por satélite como los barcos o aviones, siendo capaces de transmitir una señal y el punto de enlace con el satélite, incluso cuando se están moviendo.

Los satélites también permite beneficiarnos por el acceso a internet mediante la creación de un vinculo bidireccional entre una banda ancha y una estación conectada a la red, esto es especialmente útil para los usuarios que se encuentran en lugares muy remotos y no pueden conectarse por ADSL a través de una red telefónica.

Se necesitan un seguimiento eficaz, oportuno y sobre todo las comunicaciones seguras, es un tema fundamental en el área de los satélites, sobre todo en la conducción de operaciones militares modernas, las comunicaciones militares existen ya que hay momentos en que la información debe ser transmitida con seguridad a las personas adecuadas, independientemente del lugar y la hostilidad del medio ambiente, las fuerzas armadas saben que los satélites cumplen con esta necesidad de comunicación, a diferencia de las redes de tierra, los satélites proporcionan, en cualquier momento, una amplia cobertura, una mayor flexibilidad en términos de potencia de transmisión y frecuencia, son casi completamente independientes a los obstáculos que dificultan el funcionamiento de redes terrestres.


La importancia de porque se necesitan cuidar las redes por satelites es por ejemplo, existen varias iniciativas internacionales de vigilancia que han participado activamente después de la Segunda Guerra Mundial. Actualmente, la mayoría dependen de centros terrestres, aeronaves de gran altitud y los satélites. En los Estados Unidos, la inteligencia de comunicación entra dentro de las riendas de la Directiva de inteligencia de señales de los Estados Unidos (USSID) y las leyes de privacidad del mismo país. Los proveedores de servicios terrestres y de satélite deben ayudar a las entidades cuando sea necesario a lo dispuesto por CALEA (Asistencia de Comunicación para el Cumplimiento de la Ley) del gobierno. También existen amenazas extranjeras, siempre se debe pedir ayuda a los principales sistemas de espionaje por satélite y terrestres que son de varias naciones extranjeras. En particular, los esfuerzos principales en la inteligencia de señales se han documentado en las instalaciones de inteligencia de señales estratégicamente ubicados.

Las comunicaciones por satélite son especialmente vulnerables a los eavesdropping debido a las grandes áreas que cubren. Existían algunas estaciones que eran conocidos para interceptar todas las comunicaciones por satélite en los años 80. Sólo unos pocos satélites geoestacionarios llevaban sobre todo el tráfico de voz, y el espionaje era una cosa bastante simple. Las comunicaciones por satélite de ahora tienen más probabilidades de no ser interceptados dado el alcance de la comunicación, y dado que las comunicaciones terrestres requieren una gran cantidad de reutilización de frecuencias geográficas, pero expuestas de todas maneras.

Existen algunos software de seguridad comerciales que están disponibles para teléfonos de satélites, por ejemplo, que se basan en algoritmos de cifrado comunes. Sin embargo, los enlaces por satélite siempre deben ser consideradas poco fiables, y siempre se deben utilizar las medidas de autenticación y cifrado específicos.

Los servicios de satélite son sin embargo una buena solución para el servicio resistente en caso de emergencias graves. En los EE.UU. cuatro empresas ofrecen servicio satelital móvil y por ejemplo en los días inmediatamente después del huracán Katrina, los proveedores del SMS mandaron más de 20.000 teléfonos GSM controlados por satélite.

Referencias.
Schwengler Thomas, (2012). Wireless & Cellular Communications. Class Notes. University of Colorado. Recuperado de http://morse.colorado.edu/~tlen5510/text/

NA. (2011). Des satellites pour toutes les applications: Télécommunications & Communications sécurisées. Astrium web. Recuperado de http://www.astrium.eads.net/fr/articles/des-satellites-pour-toutes-les-applications.html

miércoles, 8 de mayo de 2013

Error-Correcting codes

For this homework we need to implement a block code for a binary channel, then we need to explain how many errors it is able to detect or correct and why, we need to do a test program and try it out.

So, I do the hamming code because I think is easy to implement and explain, hamming code is a block code that can detect and correct errors in a binary channel, but this code can only detect just one bit for a all the sequence of bits, so for that, you need to implement a variant of this block code, for this homework I just experiment a normal hamming code.

For do the hamming code we need to do some procedures into the program, for example we need to do some subroutine that can do a parity and also check and jump into vector, I'm going to explain how I do it in Python.

So, first of all, we have a sequence of bits, then, I made a subroutine that creates a vector that have a bits only in a position when the number is the power of two, that is in the position 1, 2, 3, 8, 16, 32, 64, etc. and in the others position we didn't want save any data.

Then, we need to compute a bit of parity, so for that, I do a procedure that do a general rule that we have in the hamming code, jump n-1 bits, then check n bits, then jump n bit, etc, at the moment to do that, we have another vector that we need to compute a logic xor for each value in the vector, just for have the parity bits.

Then we need to join the bits of parity into the vector that we have, and we already have a hamming code, but now the important thing is to know when we have an error, so for that we need to do a test of parity, and if we have in each row, 0 in the xor, we are right, it is just the same of the hamming code but in the inverse.

If we can detect an error, we have a sequence of bits that we can translate to a decimal and we have that number to know the position of the error, then just change that bit and we already have a good sequence.

This only works when we have only one bit with an error, but if we have many, we need to implement another error-correcting code, so, in conclusion, this is simple to implement, to understand how works a block code with a correcting solution, but it fail at the moment that we have many errors.

This is an example, suppose that we have the following bits

1010101

Then we do a vector just in the positions that are power of two.

['', '', '1', '', '0', '1', '0', '', '1', '0', '1']

Then we do for each vector, xor of all the items, following the rule " jump n-1 bits, then check n bits..."


['', '', '1', '', '0', '', '0', '', '1', '', '1'] :  1
['', '', '1', '', '', '1', '0', '', '', '0', '1'] :  1
['', '', '', '', '0', '1', '0', '', '', '', '']     :  1
['', '', '', '', '', '', '', '', '1', '0', '1']     :  0


So we add this bit into the coding

['1', '1', '1', '1', '0', '1', '0', '0', '1', '0', '1']

Suppose that we have an error, and we have the next sequence.

['1', '0', '1', '1', '0', '1', '0', '0', '1', '0', '1']

So we do with that sequence, just obtain the bits and compare if we have the same using parity, for that we need to do for each vector an xor.

COMP:1
ERRO:1

COMP:1
ERRO:0

COMP:1
ERRO:1

COMP:0
ERRO:0

We have the next sequence:
['0', '0', '1', '0']
     Pos = 2

Then if we know, in 10 are 2 in decimal, so in the position 2, we have the error.


['1', '0', '1', '1', '0', '1', '0', '0', '1', '0', '1']
['1', '1', '1', '1', '0', '1', '0', '0', '1', '0', '1']

And we correct this sequence.

I hope my english is good and you can understand.

This is my code.

Lab: detección de esquinas

Se nos pide realizar para este laboratorio como parte básica, detectar las esquinas con el método de diferencia de filtro mediano y como parte avanzada, hacer un wire-frame uniendo las esquinas con segmentos de líneas.

El procedimiento que realicé:

  • Cambiamos a grises
  • Agregamos el filtro de la mediana varias veces
  • Sacamos la diferencia 
  • Ponemos un umbral
  • Obtenemos esquinas
  • Obtenemos los bordes con Laplaciana
  • Agregamos BFS
  • Hacemos un corte en cada primera esquina detectada
  • Agregamos otra vez BFS en la imagen cortada
  • Unimos esquinas 
Capturas de pantalla:







Este es el código importante:

martes, 7 de mayo de 2013

Infográfico: Puntos extra

Infográfico sobre los saltélites artificiales orbitando en el mundo

Referencias
The Ten Most Important Satellites Orbiting Earth Now, Stephanie Fox, iO9 web, liga

Infográfico



Referencias
SANS Institute InfoSec Reading Room (2003), The GSM Standard: An overview of its security, watchfire, Obtenido de: http://www.sans.org/reading_room/whitepapers/telephone/

jueves, 2 de mayo de 2013

Polígonos


Para esta tarea se nos pide detectar polígonos por medio del método detección de lineas rectas.

Lo que realicé y no está terminado es:
  1. Cambiar a grises
  2. Sacar convolución Laplaciana para sacar bordes
  3. Normalizo la imagen
  4. Binarizo los datos
  5. Sacamos el promedio
  6. Se agrega un umbral
  7. Agregamos BFS para detectar todos los bordes 
  8. Los pintamos de diferentes colores
  9. Sacamos mascara de sobel en X
  10. Sacamos mascara de sobel en Y
  11. Detectamos la pendiente de cada pixel
  12. Calculamos su theta (pendiente) 
  13. Ordenamos valores calculados según su pendiente.
  14. Checamos el cambio de cada theta para detectar los lados
  15. Pintamos cada lado de diferente color.
Les muestro unas capturas de pantalla del procedimiento:







Existe mucho ruido en la imagen y no pude detectar cada lado de los polígonos, por ejemplo en la primera imagen obtuve estos lados.

Donde si tengo 5 figuras, pero los lados no concuerdan.

Código relevante





Eso es lo que tengo :(

martes, 30 de abril de 2013

Tarea 5: Experimento de congestión

Se nos pide averiguar cómo se genera tráfico con distintas propiedades y cómo podemos monitorear las medidas de desempeño (mencionadas en la clase) en su simulador, para luego modificar un esquema de congestión

Hice un programa en el cual puedes generar los siguientes tipos de tráfico.
  • Trafico CBR (Constant bit rate)
  • Trafico exponencial
  • Trafico Pareto
De manera que por medio de los argumentos dados al correr la simulación se puede especificar de la siguiente manera sus entradas.

ns simulacion.tcl [Topologia] [Tipo de trafico] [Tamaño de paquetes] [Rate] [Esquema]

Por ejemplo podemos correr el programa de la siguiente manera.

ns simulacion.tcl arbol CBR 1000 1mb Heap

Se nos pide realizar un experimento sobre nuestra simulación es por eso que hice un python que obtiene del archivo .nam los valores de kbps y el tiempo para graficar la medida de desempeño Throughput de manera que podamos saber como afecta el trafico a un nodo udp con CBR en diferentes tamaños de paquetes y rates.

Obtuvimos los siguientes resultados.

De manera que podemos observar que al agregar paquetes más pesados en un rate medianamente alto se transmite menos flujo por segundo, pero con mayor cantidad de información, este experimento fue realizado con una topología de árbol y generando trafico CBR dado el ns2.


Este es el código.


jueves, 25 de abril de 2013

Métodos de diccionario-Byte pair encoding

Para este método se utiliza las repeticiones que sean iguales dentro de una cadena de manera que se sustituyen con variables para al final tener variables como referencia y una cadena más corta, para realizar este ejemplo hice en python una cadena aleatoria de la siguiente manera.

''.join(random.choice("abcde") for x in range(20))

De manera que tengamos una cadena de largo 20 y con un alfabeto A = {a, b, c, d, e}

Esta es la cadena que vamos a utilizar 'bbbeadbaaddadabceacb'

Encontramos los valores que podemos sustituir en la primera iteración

En la primera iteración buscamos caracteres que se repitan pero en bares diferentes por lo que primero voy a comprimir con la variable X a la repetición ea.

  • bbbeadbaaddadabceacb
  • X = ea

Luego en la segunda iteración encontramos caracteres repetidos como da.
  • bbbXdbaaddadabcXcb
  • Y = da
Ahora ya no tenemos caracteres diferentes que se repitan, por lo que empezamos a buscar caracteres del mismo tipo que se repitan en la cadena, encontramos bbb
  • bbbXdbaadYYbcXcb
  • Z = bbb
Encontramos al igual aa en la cuarta iteración.
  • ZXdbaadYYbcXcb
  • W= aa
Luego encontramos la letra YY repetida
  • ZXdbWdYYbcXcb
  • Q=YY
Ya no existen patrones de repetición por lo que esta sería nuestra cadena comprimida, junto con su diccionario.
  • ZXdbWdQbcXcb
    • X = ea
    • Y = da
    • Z = bbb
    • W= aa
    • Q=YY
Ahora para decomprimirlo, como ya tenemos el diccionario, en la primera iteración sustituimos la Q ya que esta contiene referencias al mismo diccionario.
  • ZXdbWdQbcXcb
  • ZXdbWdYYbcXcb
Luego sustituimos la W de la cadena que tenemos
  • ZXdbaadYYbcXcb
Ahora, sustituimos la letra Z
  • ZXdbaadYYbcXcb
  • bbbXdbaadYYbcXcb
Luego, en la siguiente iteración, sustituimos las Y
  • bbbXdbaadYYbcXcb
  • bbbXdbaaddadabcXcb
Para después en la siguiente iteración y última con la variable X
  • bbbXdbaaddadabcXcb
  • bbbeadbaaddadabceacb
Entonces como resumen tenemos lo siguiente.
  • Cadena = bbbeadbaaddadabceacb   
    • largo = 20
  • Cadena comprimida = ZXdbWdQbcXcb   
    • largo = 12

Lab: Detección de hoyos

Para este laboratorio se nos pide realizar lineas en donde las intercesiones tengan hoyos, Aquí unas capturas de pantalla.

 




Este es el código.

Huffman adaptativo

Estuve trabajando para hacer el código huffman, lo que hice fue hacer un código que va pasando de 5 en 5 caracteres para ir formando el árbol para al final tener el código huffman, en realidad no se ha implementado el decodificador y en rendimiento no grafique.




No alcancé a graficarlo.

martes, 23 de abril de 2013

Lab: Acceptance and Usability of Physical Mobile Application

Para el laboratorio de esta semana se nos piden realizar una investigación acerca de la usabilidad en cómputo ubicuo y que de igual manera pueda ser útil para nuestro proyecto, es por eso que en base a lo que estamos trabajando este semestre he decidido hablar acerca del paper Acceptance and Usability of Physical Mobile Applications cuyos autores son Tanja Herting y Gregor Broll.

Este paper trata acerca de las aplicaciones móviles en los cuales intervienen aparatos físicos y la combinaciones de gadgets móviles para la interacción de objetos presentes en el dia a dia, facilitando la interacción y asociando información y servicios a estos objetos, de manera que la usabilidad y la interacción del diseño de manera sistemática hace que tengamos diferentes categorías de aplicaciones según los casos de uso y patrones de interacción en un ambiente controlado, este paper se enfoca en el estudio de diferentes prototipos y evaluarlos de manera que se pueda generar ciertas guías para las mejores practicas en usabilidad de aplicaciones móviles.

Durante los últimos años, las aplicaciones de cómputo ubicuo ha incrementado el potencial de posibilidades para la interacción con objetos en donde antes no se tenía, es por eso que el desarrollo de tecnologías usando bluetooth, RFID, NFC o GPS hace que sea posible crear multiples aplicaciones para diferentes servicios y utilidades.

La interacción móvil fisica viene como concepto para tomar como ventaja estos desarrollos hablados anteriormente cuyos servicios usan aparatos móviles que interactuan con objetos fisicos para facilitar el descubrimiento, por ejemplo, de información.

En el paper tienen como clasificación grupos diferentes de PMA (Physical Mobile Applications), basados en diferentes patrones de interacción entre los dispositivos móviles y los objetos físicos, estos son las 6 de sus clasificaciones:

Presentación de información
Es la PMI (Physical Mobile Interaction) más simple el cual se utiliza un dispositivo móvil activo para leer información de alguna objeto, refiere a una característica homónima al contexto, dependiendo de este directamente, se puede decidir que hacer con dicha información, por ejemplo podemos encontrar aplicaciones como estas en museos o posters.

Ligas físicas
Se habla de ligas físicas cuando se tiene un objeto que contiene un acceso a algún otro servicio utilizando diferentes tecnologías, entre ellas, por ejemplo NFC, bluetooth, QR-code, etc.

Etiquetas
Sistemas que leen información de alguna etiqueta utilizada para escribir información del mundo real presentando información complementaria utilizando tecnologías como RFID o geo-tagging. (Fig 2.a) se puede ver una aplicación PMA en la cual se coloca información relevante en un objeto.


Broadcasting
Por la popularidad de etiquetas RFID y marcadores visuales, muchas PMA incluyen objetos pasivos y etiquetas para dar información de manera activa en los dispositivos móviles, usando objetos con tecnología explícita, el poner información cuando el usuario no la necesita, nos dice en el paper, que podría de cierta manera ofenderlos, por lo que en broadcasting se permite filtrar información por el usuario, básicamente podemos decir que este tipo de aplicaciones es consciente al contexto del usuario (Fig 2.b)



Tag emulation
Esta inspirada en el uso de la tecnología NFC el cual explícitamente permite a los dispositivos leer información de forma activa mediante un aparato diferente el cual emite de forma pasiva, estos son comúnmente utilizados por ejemplo en tarjetas inteligentes, como de identificación, de tickets, de registros, etc. Igualmente que las Ligas físicas, estos tienen una interacción PMI simple, por ejemplo cuando se interactua con una vending machine, puertas o alguna estación.

Interacción de 2 caminos.
Es cuando los dispositivos moviles adquieren información de objetos físicos en un paso de interacción simple, por citar el ejemplo del paper, es un proyecto llamado SMS el cual es un aparato para hacer check-in en un aeropuerto sin muchos pasos, simplemente mostrando tu celular al terminal.


Para realizar un estudio y diseño de prototipos del proyecto SMS, ellos utilizaron entre los diferentes campos, un video corto introduciendo los beneficios del proyecto, por lo que las personas realizaron una encuesta sobre que les parecía las ligas físicas, las etiquetas e interacción de dos caminos, en el cual tuvieron resultados entre 12 personas 6 mujeres y 6 hombres, entre 22 y 36 años que han utilizado celulares en aproximadamente 5,8 años.

Como conclusión, se hace un estudio demográfico entre las diferentes clasificaciones, teniendo como resultado que la mayoría de las personas (en la fecha de la publicación del paper), eran usuarios que prefieren lo tradicional para resolver sus dudas, por ejemplo ellos dicen que las personas votaron en el que es preferible pedir ayuda a una persona que usar tu celular, aunque yo creo que actualmente las personas están muy conectadas con sus aparatos móviles y que las personas prefieren tener el control de todo en ese tipo de aparatos, por lo que la combinación del cómputo ubicuo y la ingeniería de dispositivos móviles podemos tener sistemas inteligentes que ayuden a generar nuevos servicios, incluidos entre las dominos que se hablan en el paper.

Bibliografía.
Acceptance and Usability of Physical Mobile Applications, Tanja Herting. Liga.

lunes, 22 de abril de 2013

Tarea 6: Detección de agujeros

Se nos pide para esta tarea que detectemos agujeros con un relleno morado y marcar el centro con un punto amarillo, agregar un ID a cada agujero.

Por lo que primero que nada pongo algunos ejemplos que corrí con mi programa, los resultados no son muy buenos en todos los casos, para detectar los puntos mínimos utilizo como referencia la función de MATLAB peakdet en python aquí.













Este es el código

miércoles, 17 de abril de 2013

Extra points: Huffman coding

2. Table4.1 gives the relative frequencies,in English prose minus punctuation and blanks, ignoring capitalization, of the alphabetic characters a, b, . . . , z, estimated by examination of a large block of English prose, believed to be typical. This table is copied, with one small change, from [6, Appendix 1]. Find an optimal (with respect to average code word length) prefix-condition encoding scheme for S = {a, b, ... , z} if


(a) A={0,1};
(b) A={0,1,∗}.
(c) What are the lengths of the shortest fixed-length encoding schemes, resulting in uniquely decodable codes, for S, in cases (a) and (b), above?

For do this exercise I made a program that are pretty similar that my last homework where by doing the huffman tree we have the optimal prefix-condition, this is the code.



So we have like result for the question a:

  • 'a': '0000', 
  • 'c': '010001', 
  • 'b': '0111000',
  •  'e': '1', 
  • 'd': '00011', 
  • 'g': '0111011',
  •  'f': '001101', 
  • 'i': '01101', 
  • 'h': '01010', 
  • 'k': '00110011', 
  • 'j': '0011001011',
  •  'm': '001111', 
  • 'l': '00010', 
  • 'o': '01111',
  • 'n': '01100', 
  • 'q': '0011001001', 
  • 'p': '0111001', 
  • 's': '01011',
  •  'r': '01001', 
  • 'u': '010000', 
  • 't': '0010', 
  • 'w': '001110',
  •  'v': '0011000', 
  • 'y': '0111010', 
  • 'x': '0011001010', 
  • 'z': '0011001000'
Then I modified the code to have another node, so in the alphabet we have a new character and also a new coding data.


  • 'a': '11', 
  • 'c': '*01',
  •  'b': '*0**', 
  • 'e': '1'
  • 'd': '*11', 
  • 'g': '*1**', 
  • 'f': '0*0',
  •  'i': '01', 
  • 'h': '**1', 
  • 'k': '*0*1*', 
  • 'j': '*0*10', 
  • 'm': '0**', 
  • 'l': '*10',
  •  'o': '10', 
  • 'n': '00', 
  • 'q': '*0*111', 
  • 'p': '*1*0', 
  • 's': '***', 
  • 'r': '**0', 
  • 'u': '*00', 
  • 't': '1*', 
  • 'w': '0*1', 
  • 'v': '*0*0', 
  • 'y': '*1*1', 
  • 'x': '*0*11*', 
  • 'z': '*0*110'

For the next question we have that e are the last in the list and only have a number 1 as a bit of codification and for the question b also have e with one bit, but in general we have a code more shorter in the second one than in the first one.

Lab: Relleno de elipses/círculos

Se nos pide que del código que detecte elipses y/o círculos

• Identificar cada elipse/círculo individual
• Rellénalo de un color aleatorio
• Sigue marcando su centro con bolita & ID con etiqueta
• Imprime un listado de los áreas de los círculos/elipses
• En porcentaje de la imagen completa

Por lo que para realizar esto, utilicé las mismas funciones que he estado reutilizando durante el curso, para identificar el elipse o círculo lo que se hace es verificar sus radios y comparar que si el radio calculado obtenido es igual para ambos lados (o sea, vertical y horizontal) quiere decir que tenemos un círculo, por el contrario tenemos un elipse.

Estos se rellenan con mi subrutina BFS con un color aleatorio, se marca una bolita en el centro y se identifican para proceder a obtener un listado de los que son círculos y elipses, al igual que su porcentaje en base a la figura completa.

Estas son las capturas del programa.





En donde podemos ver que el programa sabe satisfactoriamente si es un circulo o un elipse al igual que información en base a la imagen en general

A continuación expongo el código modificado.