miércoles, 21 de noviembre de 2012

Lab 7: Matriz de ganancia K

Ejercicio 11.3: Determinar la matriz de ganacia K de manera que los polos en lazo cerrado del sistema



sean s1 = -1 y s2 = -2.

Utilizar la retroalimentación de estados u = -Kx

Podemos decir que, dado el sistema de una o varias entradas y un vector p deseados en ubicaciones auto-conjugadas para polos en lazo cerrado, se utiliza la función place en octave la cual calcula una matriz de ganancia K tal que la retroalimentación de estado u = -Kx colocando los polos en lazo cerrado en p ubicaciones.

octave:1> A = [0, 1; -1, 2]
A =

   0   1
  -1   2

octave:2> B = [1;1]
B =

   1
   1

octave:3> C = [1;-1]
C =

   1
  -1

octave:4> polos = [-1, -2]
polos =

  -1  -2

Esto quiere decir que los valores propos de A - BK coinciden con las entradas de p.

K = place(A, B, p) pone el lazo cerrado según los polos p calculado una matriz de ganancia de retroalimentación, todas las entradas de la planta asumen que  son entradas de control y la longitud del vector p debe concidir con el tamaño menor de la fila de las matrices, funciona en sistemas de múltiples entradas y se basa en un algoritmo que usa los grados de libertad adicionales para encontrar una solución que minimice la sensibilidad de los polos en lazo cerrado en las perturbaciones A o B.

octave:5> [K, prec] = place(A, B, polos)
K =

   1   1

prec =

  scalar structure containing the fields:

    nfp = 0
    nap =  1
    nup =  1
    z =

       0.70711  -0.70711
       0.70711   0.70711

Como resultado [K, prec] = place(A, B, p)devuelve en prec una estimación de la precisión con los valores propios de A-BK especificadas en p, midiendo el número de dígitos decimales exactos en el actual ciclo cerrado y la matriz de ganancia K.

octave:6> plot(place(A,B,polos))


Vemos la gráfica no cambia ya que la matriz de ganancia K generada tiene como valores 1, por lo que tenemos una ganancia de retroalimentación nula.

martes, 20 de noviembre de 2012

Reporte final automatización.

Para la materia de automatización y control de sistemas dinámicos del semestre Agosto-Diciembre 2012, estuvimos trabajando en el proyecto de ajuste de volumen de sistemas en donde controlamos el volumen del sonido en una bocina o altavoz, que depende directamente del ruido que se encuentra en el entorno.

Por lo tanto, para nuestro proyecto podemos decir que si por ejemplo estamos reproduciendo una canción en una habitación y en determinado momento entra gente a platicar o hay algún ruido externo inesperado, el volumen del dispositivo que está emitiendo el sonido de la canción va aumentando paulatinamente para que se continue escuchando la canción.

Podemos decir que la importancia de nuestro proyecto es por ejemplo en sistemas en automóviles, en donde el volumen de la música dentro del auto aumenta cuando el motor emite mucho ruido, en cambio cuando este está detenido, el volumen baja, cuando las personas en alguna empresa tienen audifonos en donde se les transmiten comandos a realizar, pero el sonido de la planta es muy fuerte, se controla el volumen de lo que se emite.

Diagrama de bloques.

En donde tenemos como entrada y salida:

  • Salidas: 
    • El audio de la canción o video reproduciendo actualmente a un volumen ajustado automáticamente por el programa.
  • Entradas:
    •  El ruido del ambiente y en base a esto se hace un cambio en el volumen.

En donde generamos la función de tranferencia:


Usamos Python como lenguaje de programación, haciendo uso de las siguientes librerias.

  • Alsaaudio:
    •  Sirve para controlar el nivel del volumen.
  • Audioop:
    •  Regresa el valor máximo absoluto de un tramo de datos captado como sonido.
  • Time: 
    • Usamos esta librería para controlar el tiempo de ejecución en la recepción del ruido.

En el siguiente diagrama vemos la arquitectura de sistema lógico en donde podemos ver la secuencia que realiza el sistema y cómo va cambiando el volumen.


Diapositivas.

Código.
Demo

Reporte Speaker Recognition

Como reporte final de la materia de Redes Neuronales Artificiales de la Dra. Elisa Schaeffer en el semestre Ago-Dic 2012, voy a exponer en lo que he colaborado en el equipo de Speaker Recognition System, en donde básicamente lo que estamos implementando es una red neuronal que pueda clasificar entre si es una persona, o no en base a su voz, validando mediante una serie de pasos y entrenando la red neuronal para poder saber si esta persona es la que está utilizando el sistema, para posteriormente realizar algún otro tipo de acción, en este caso estamos solamente trabajando de lado de la validación.

Este es el Repositorio de nuestro proyecto.

Para esta mitad después de medio curso estuve contribuyendo con el proyecto haciendo una integración de la interfaz que habiamos desarollado anteriormente con la que utilizamos en nuestro prototipo final, ahora las ventanas van en cadena y están relacionadas según los datos que obtenemos en la red neuronal  y así detectar si es o no una persona.

Estas serían las capturas actualizadas del prototipo final.




Esta sería la interfaz de salida que tendría el usuario con unos script integrados con la grabadora, que en donde utilicé TK con python y desplegamos si la persona es identificada o no.

Después, trabajé en base a lo que estuvimos haciendo en equipo, decidimos hacer un análisis de compomtentes principales (PCA), por lo que yo estuve a cargo de desarrollarla y hacer pruebas para saber si esta forma de obtener los datos nos pudiera servir para tener un mejor resultado, basicamente lo que hice fue seguir los pasos del análisis y luego hice un archivo de prueba en donde utilizo el array de las frecuencia de MEL obtenidas anteriormente.

Este análisis es un proceso matemático que calcula los datos más significativos por medio de una descomposición de valores en la matriz de covarianza.

Estos son los resultados que obtuvimos de este análisis.



Como pueden ver entre Ramón y yo no tenemos mucha diferencia, cuando con Cecilia tenemos un valores completamente diferentes, de hecho también hice el análisis gráfico y vemos que el vector de coeficientes y el vector de puntuación se posiciona de manera contraria.

CECILIA

RAMON

ROBERTO

Después de algunas pruebas, utilizando el PCA, determinamos que los valores que obtuvimos eran muy parecidos entre Ramon y Roberto, por lo que decidimos utilizar los valores obtenidos del análisis de audio.

Los códigos del análisis y un código de prueba lo pueden ver en el repositorio, este sería mi reporte de la materia de redes neuronales, si tienen alguna duda acerca del proyecto, pueden dejar un comentario en el blog.

Por último muestro las diapostivas grupales, en donde exponemos el prototipo en equipo:

miércoles, 14 de noviembre de 2012

Lab 6: Observable y Controlable

B.12.1   Sea el sistema definido por



donde


Transforme la ecuación del sistema en

  • (a) la matiz controlable.
  • (b) la matriz observable.

Después concluir sobre su resultado.

Por lo tanto, como sabemos Octave tiene las funciones en donde podemos obtener dichos resultados, primero que nada vamos a hacer la forma canónica controlable, en donde vamos a utilizar la función ctrb(A, B) del paquete de control, obtenemos lo siguiente:

octave:1> A = [-1,0,1;1,-2,0;0,0,-3] 
A =
  -1   0   1     
   1  -2   0    
   0   0  -3

octave:2> B = [0;0;1] 
B =
   0    
   0    
   1

octave:3> pkg load control

octave:4> Pc = ctrb(A, B) 
Pc =
   0   1  -4    
   0   0   1    
   1  -3   9

Ahora, en esta matriz de controlabilidad tenemos un sistema que es lineal completamente controlable si y sólo si la matriz Pc = [B AB A^2*B ... A^N*B] tiene un rango completo, donde tenemos la A como una matriz de n x n para sistemas lienales de una entrada, el sistema es controlable si y solo si el determinante de la matriz de controlabilidad Pc es distinto a cero, por lo que vamos a verificarlo.

octave:5> det(Pc) 
ans =  1

Por lo tanto concluimos que el sistema es completamente controlable.

Después se nos pide sacar la matriz de observabilidad, lo vamos a sacar con la función obsv(A, C), y analizamos su resultado.

octave:6> A = [-1,0,1;1,-2,0;0,0,-3] 
A =
  -1   0   1    
   1  -2   0    
   0   0  -3

octave:7> C = [1,1,0] 
C =
   1   1   0

octave:8> Po = obsv(A, C) 
Po =
   1   1   0    
   0  -2   1  
  -2   4  -3

octave:9> det(Po)ans = 0

Ahora se nos dice en la teoria matriz de observabilidad vemos que el sistema lienal es completamente observable si y solo si la matriz de observabilidad Po tiene un rango completo, Para sistemas lineales con una unica entrada y una unica salida, el sistema es observable si y solo si el determiante de la matriz de observabilidad Po es distinto a 0, en nuestro caso podemos decir que nuestro sistema no es completamente observable ya que el determinante de dicha matriz nos da como resultado exactamente 0.

Fin de la actividad.