lunes, 8 de octubre de 2012

Reporte de avance medio curso



Durante la primera mitad del semestre junto con mi compañero Adán implementamos una red neuronal que utilizaremos en nuestro proyecto para reconocer huellas digitales.
Antes que nada, investigué cosas relacionadas con huellas digitales, sus características y formas en las que se podían representar para obtener una entrada de datos para la neurona. 

A lo largo de este tiempo, estuve leyendo el libro de redes neuronales que nos recomendó la maestra, con esto y las presentaciones de la maestra logré entender como funciona una red neuronal.

Empecé con el desarrollo de la neurona en algunas clases, con ayuda de mi compañero realizamos lo principal que era la entrada de datos y la sumatoria de las entradas con sus pesos correspondientes para después compararla con el umbral y obtener una salida. Después de que mi compañero finalizó esto, yo me encargue de implementar la tasa de aprendizaje para la neurona, para esto se le pedía al usuario la salida esperada, la cual se utiliza después para compararla con la salida obtenida en la función de activación y si estas son diferentes se realiza una modificación en los pesos. Implementé la ecuación con la tasa de aprendizaje para modificar la línea de separación de las clases.

Esta implementado para que se modifique este vector las veces que sea necesario para que pueda separar las clases adecuadamente. Al final tiene un contador que te dice cuantas veces falló y se tuvieron que modificar los pesos.

En la parte de la presentación grupal aporté algunas ideas así como también realicé el diagrama de arquitectura de la red neuronal. También estuve realizando pruebas para mostrar el resultado de la neurona gráficamente, pero tuve unos pequeños problemas que solucionaré para mostrarlo en la siguiente entrega. También estoy investigando sobre la red multicapa y el uso de más neuronas en nuestra red, actualmente estoy tratando de acoplar las entradas de datos binarios que se generaron de las imágenes que se encuentran en la base de datos para poder obtener una resultado real.

Código.
#!/usr/bin/python 
                                                                                                                                            
import random

x=[]
w=[]  #pesos
wn=[]  #pesos nuevos
wi=[]      #pesos nuevos insertados
alpha = 0.05
umbral = 0.5
t = 0
p = 0
res = 0
res2 = 0
suma = 0
mult = 0
i = 1
countErr=0

def inicio():

    global n
    n = input("Dame el numero de entradas ")
    for i in range(n):
        x.insert(i,random.uniform(0,2)) #generar cadena de entradas binarias aleatorias 
        w.insert(i,random.uniform(-1.0,1.0)) #generar cadenas de pesos random

    x.append(-1)   #agregar al vector de entradas un -1 al final
    print '\nVector de elementos de entrada generado \n', x[:]
                                                                                                       
    w.append(umbral)   #agregar al vector de pesos el umbral al final
    print '\nVector de elementos de pesos generado \n', w[:]
    
    sumatoria()      #brincar a la funcion sumatoria

    return n

def sumatoria():
    
    global suma
    suma=0
    res=0
    
    res = x[i] * w[i]   #sumatoria del producto de elementos de entrada por elmentos del peso
    suma = suma + res   #actualizar sumatoria
                                                                                                          
    #t = raw_input("\nSalida Esperada (0 o 1): ") #pedir al usuario salida esperada
    t = random.randint(0,1)  #generar solucion esperada aleatoria entre 0 y 1
    #t = int(t)
    print '\nLa salida aleatoria deseada es \n', t
                                                                                                  
    print '\nLa sumatoria de productos de entradas por pesos es:', suma #imprimir la sumatoria total del producto de entradas por pesos
    
    comparacion(t,n)   #brincar a la funcion comparacion
    
    return t

def comparacion(t,n):
    global countErr
    if(suma>=umbral): #comparar suma con el umbral
        
        p=1  #suma mayor o igual a 1, salida obtenida = 1
        print '\nLa salida obtenida = 1'
    
    else:
                                                                   
        p=0  #de lo contrario, salida obtenida = 0 
        print '\nLa salida obtenida = 0'
        
    i=1
    if(t!=p):  #si la salida esperada difiere de la salida producida, se realiza un cambio en el vector de pesos

        countErr +=1         
        wn[:]=[]
        for i in range(n+1):
            mult = alpha*(t-p)*x[i] #agregamos la tasa de aprendizaje alpha para modificar los pesos
            wi.insert(i,w[i] + mult)
            wn.insert(i,wi[i])  #agregamos a un vector nuevo los nuevos pesos
        wn.append(umbral)  #agregamos el umbral al final del vector de pesos nuevo
        w[:]=[]
        for i in range(n+1):
            w.insert(i,wn[i])
        
        print '\nVector de elementos de pesos nuevos generado es \n', wn[:] #imprimimos el vector nuevo de pesos
        
        sumatoria() #brincamos a la funcion sumatoria para volver a hacer calculas

        
    else:
        
        print 'La salida esperada fue diferente que la obtenida', countErr, 'veces'             

    return countErr, w[:]

def main():
    global x,n,w,wn,wi,umbral
    inicio()




main()    

Version 2. http://www.mediafire.com/?25edyd5tdznr38p
Version 4. http://www.mediafire.com/?sduxz5qa7myqda7



Screenshots

Version 2.




Version 4.



Presentación.






Compañeros de equipo.

Daniel Martínez: Link a blog

Sergio Hernández: Link a blog

Adán Cuellar: Link a blog

miércoles, 19 de septiembre de 2012

Diagramas de flujo de señales


Para esta semana en el laboratorio se nos asignó un ejercicio de sistemas de control.

Comenzaré con una pequeña introducción al tema. Primero que nada debemos saber las definiciones principales.

Un sistema es un conjunto de componentes que actúan juntos para realizar un objetivo determinado. Se le denomina sistema de control si la salida puede ser controlada de manera que pueda adoptar un valor o un cambio en particular de una manera definida.

 Por ejemplo:



Un modelo matemático de un sistema dinámico es un conjunto de ecuaciones que representan la dinámica del sistema con precisión.

Variable controlada (Salida). Es la condición o cantidad que se mide y se controla.

Variable manipulada. Es la variable que se modifica con el fin de poder modificar la variable controlada.

Proceso. Es el desarrollo de un acontecimiento que tiene una serie de eventos o cambios y que tienden a un resultado final.

Planta. Conjunto de piezas de una maquinaria que tienen el fin de realizar cierta actividad en conjunto. En sistemas de control, se refiere al sistema que se quiere controlar.

Perturbaciones. Es un suceso que afecta el desarrollo de algún proceso, si se genera dentro del sistema se le denomina perturbación interna, si es afuera del sistema se dice que es perturbación externa.

Control realimentado. Es una operación que normalmente mantiene una relación de una variable del sistema con otra, comparando las funciones y utilizando sus diferencias como medio de control.

Sistema de control realimentado. Es un sistema de control que tiene alguna relación entre la variable de salida y alguna variable de referencia como medio de control.


Sistemas de control de lazo abierto.

Es un sistema de control en el que la salida (variable controlada) no tiene efecto sobre la acción de control (variable de control).

Características
  •     No se compara la salida del sistema con el valor deseado de la salida del sistema (referencia).
  •         Cada entrada de referencia tiene una condición de operación fija.
  •         La precisión de la salida del sistema depende de la calibración del controlador.

ü Si hay perturbaciones, estos sistemas de control no cumplen con su función   adecuadamente.



Ejemplos
  •         Lavadora automática
  •         Calefactor eléctrico
  •         Un sistema que opere mediante tiempos
  •         Motor


Sistemas de control de lazo cerrado

Son sistemas que tienen una relación entre la salida, comparándolas y utilizando la diferencia como medio de control. La señal de salida del sistema (variable controlada) tiene efecto directo sobre la acción de control (variable de control).



Ejemplos
  •         Calefactor eléctrico con termostato
  •         Aire acondicionado
  •         Refrigerador
  •         Boiler
  •         Tinaco


Control realimentado, es una operación que en presencia  de perturbaciones tiende a reducir la diferencia entre la salida del sistema y alguna entrada de referencia. La reducción se hace manipulando una variable de entrada del sistema, donde la magnitud de la variable de entrada es la función de la diferencia entre la variable de referencia y la salida del sistema.

La mayor ventaja del sistema de lazo cerrado es que al usar la realimentación, regresa la respuesta del sistema relativamente a las perturbaciones externas y a las variaciones internas en los parámetros del sistema.

Una desventaja en lazo cerrado es que se pueden presentar problemas de estabilidad al corregir en exceso los errores y producir oscilaciones en su respuesta.



Diagramas de bloques

Permiten representar la relación matemática entre las variables de un sistema.
Símbolos más usados.

Señal. Línea con causalidad asignada mediante una flecha.



Sumador ó restador.  Es la suma o resta de dos o más señales.



Ramificación.  Es una señal que toma varios caminos.



Relación dinámica o estática Es una relación entre dos variables mediante su función de transferencia o respuesta en frecuencia.



Ejercicio 2.26

Calcúlese la función de transferencia Y(s)/D(s) para el siguiente sistema:



Efecto de la realimentación sobre perturbaciones externas o ruido. Todos los sistemas de control están expuestos a algunos tipos de señales exógenas o ruido durante su proceso. Algunos ejemplos de estas señales son el voltaje de ruido térmico en circuitos electrónicos y el ruido de conmutación en motores eléctricos. En el diseño de un sistema de control se debe considerar que el sistema pueda tener perturbaciones externos y ruidos. El efecto de realimentación de dichas señales depende de en que parte del sistema ocurren. La mayoría de las veces la realimentación reduce los efectos del ruido y las perturbaciones en el desempeño de sistema.

En el sistema anterior, se tiene la señal de comando R(s) y D(s) es la señal de ruido, en ausencia de realimentación, es decir H(s)=0, la salida y debido a la señal D(s) actuando sola es:



Con la presencia de realimentación, la salida del sistema debido a la señal D(s) actuando sola es:



Con esto obtenemos lo que nos piden.



Referencias

lunes, 17 de septiembre de 2012

Lógica Predictiva

Para esta tarea cada uno eligió un problema de un documento que se encuentra en el siguiente enlace. 
The World According to Predicate Logic

El problema que elegí fue el siguiente:

Exercise 4.2 Express ¬(x < y < z) in terms of the binary predicate < and propositional connectives, using the fact that x < y < z is an abbreviation of x < y ^ y < z.



Expresa ¬(x < y < z) en términos de predicados binario < (menor que) y conectivos proposicionales, usando el hecho que x < y < z es una abreviación de x < y ^ y < z.

Para empezar podemos decir que:

La expresión ¬(x < y < z) nos dice que "No es cierto que Y es mayor a X y Y es menor que Z", o sea Y no se encuentra en el rango que hay de X a Z.

Para realizar este ejercicio tenemos que realizar predicados binarios, esto quiere decir que tener dos parámetros en cada expresión y también agregar conectivos lógicos. Para esto podemos decir que:

Predicados binarios con conectivos lógicos:

¬[(x
ó
(y<=x) ^ (z<=y)

Este último se puede expresar también de la siguiente manera:

(x>y>z) v (x=y=z)


martes, 11 de septiembre de 2012

Lógica Predictiva


Para esta semana, se nos dio a elegir unas sentencias y trabajaremos con lógica predictiva.


Las sentencias que elegí fueron.



"No pigs can fly;
All pigs are greedy."

"Ningún cerdo puede volar
Todos los cerdos son codiciosos"


Para esto se definen equivalencias:
P(x) = Cerdo
F(x) = Vuela
G(x) = Codicioso


Combinando los conectivos con los predicados, constantes, variables y los cuantificadores, pueden crearse estas sentencias.

Cuantificadores.

∃x = Por lo menos uno
∀x = Todos

Formulación de expresiones

Ningún cerdo puede volar

¬∃x P(x) ⇒ F(x)

Todos los cerdos son codiciosos

x P(x) G(x)

Con esto podemos decir que:

Los cerdos son codiciosos y no pueden volar

x P(x) (G(x)^¬F(x))


Referencias

lunes, 10 de septiembre de 2012

Reporte 1 - Función de transferencia

Para esta semana en la clase de Automatización y Control de Sistemas se nos pidió encontrar la función de transferencia del sistema que controlaremos.

Control de un ventilador a partir de la temperatura


El proyecto consiste en que a partir de la temperatura que se presente, habrá una variación de la velocidad del ventilador. El propósito es permitir que el ventilador permanezca apagado cuando la temperatura no amerite que este encendido. Cuando el ventilador se encuentre encendido la velocidad variará dependiendo de la temperatura.




Para analizar esto, podemos analizar el caso de un amplificador de sonido donde la ventilación forzada produce un ruido imposible de escuchar cuando el equipo se encuentre a buena potencia de salida, en cambio cuando la potencia sea baja o no haya potencia, los ventiladores harán ruido o zumbidos.

Con el circuito que queremos implementar, la velocidad de rotación del ventilador se hace a partir de la modulación por ancho de impulso (PWM) haciendo que el ventilador gire a baja velocidad sin pérdida de fuerza.  El circuito integrado 555 conectado como multivibrador astable utiliza un oscilador controlado, el cual es condicionado por el valor presente en el pin 5. Aquí mismo se conecta una resistencia termistora (NTC) y un capacitor de amortiguación. 

En las terminales de alimentación se encuentran un zener y un capacitor. El diodo zener se construyó para usarse en zonas de rupturas, es la parte esencial de los reguladores de tensión casi constantes con independencia de que se presenten grandes variaciones de temperatura. Esto se implementa con el fin de evitar que los cambios de velocidad en el ventilador no afecten al valor de alimentación del circuito. 

El transistor puede estar en función de la corriente que maneje el motor del ventilador. La corriente es igual al voltaje entre la resistencia (Ley de Ohm).


La frecuencia de oscilación está definida por la fórmula:



Función de transferencia:

Referencias:







miércoles, 5 de septiembre de 2012

Laboratorio Semana 2 - Transformadas de Laplace


Para esta semana se nos asignó un problema de Transformadas de Laplace a cada uno y tuvimos que resolverlo.





Hice una comprobación en Wolfram Alpha y salió lo siguiente: