martes, 30 de octubre de 2012

Estabilidad de nuestro programa

Para ésta entrada, se nos pidió, hacer pruebas en nuestra función de transferencia y determinar si ésta es o no es estable.

Función de transferencia:

Diagrama de bode & nyquist:
El diagrama de bode y nyquist, nos servirá para determinar en forma gráfica que tan estable o inestable es, como se menciono con anterioridad, si en nuestro plano, observamos que va a la derecha, nuestro sistema es inestable, caso contrario si tiende a la izquierda.

Imagen diagrama de impulso:
El impulso, nos sirve de otra forma gráfica para determinar que tan estable o inestable es nuestro sistema, ya que dependiendo del impulso que se le de nos mostrará como se va comportando en forma de onda.

Código:
function estabilidad%(num, den)
k = 1;
v = 2.5;
num = [k v];
den = [3 4 1 434]; #Este ultimo es la constante de distancia del sensor determ.objeto
sys = tf(num, den)
figure (1)
nyquist (sys)
figure (2)
rlocus (sys)
figure (3)
impulse (sys)
raices = roots (den)

contador = 0
for i = 1:length(raices)
if real(raices(i)) > 0
contador + 1; 
endif
endfor

if contador > 0
printf("Sistema Inestable")
else printf("Sistema Estable \n")
endif

endfunction

Salidas:
duda

duda

duda

Conclusiones:
En las salidas mostradas, se puede ver en las gráficas de nyquist es semi-estable, ya que hasta cierto punto la gráfica se queda en el semiplano de la izquierda.


Notas:
La función de transferencia empleada, fue convertida a ecuación lineal, para pasarla a numerador y denominador, aunque se necesitan otras pruebas para verificar su correcta converción.


Referencia:
http://octave-online.blogspot.mx/2010/05/impulse.html
http://es.wikipedia.org/wiki/Teorema_de_Routh-Hurwitz
http://www.slideshare.net/tonivi99/sistemas-de-control

lunes, 29 de octubre de 2012

Sistema de Transiciones

Para ésta entrada se nos pidió realizar un sistema de transiciones, el sistema que modelaré, será lago básico del llenado y vaciado de una cisterna.

Componentes:
  • Contenedor: Es donde se almacena el agua.
  • Sensor: Es el que nos indica si ya esta lleno o vacío el contenedor.
  • Válvula: Es el que abre o cierra la llave, para llenar o vaciar el contenedor.
Descripción de los componentes con estados y acciones:
  • Contenedor:
    • Estados:
      • Vacío
      • Llenando
      • Lleno
      • Vaciando
    • Acciones
      • get_agua
      • set_agua

  • Sensor:
    • Estados:
      • Activo, indicando el sensor que aún se puede ir llenando
      • Inactivo, indicando el sensor que ya no puede estar llenando
    • Acciones
      • get_agua
      • set_agua

  • Válvula:
    • Estados:
      • Activo, es cuando abrimos la válvula
      • Inactivo, es cuando abrimos la válvula
    • Acciones
      • Abrir
      • Cerrar


Diagrama de transiciones:
Estados:
  • Vacío, llenando, lleno, viciando (0,1,2,3)
  • Activo, Inactivo (0,1)
  • Activo, Inactivo (0,1)
Transiciones:
  • get_agua, set_agua, abriendo, cerrando (1,2,3,4)


Referencias:

miércoles, 24 de octubre de 2012

Stream Cipher - SOBER-128

Introduction:
The sober-128 stream cipher, was develop for Philip Hawkes, Michael Paddon and Gregory G. Rose, in Gladesville Australia for Qualcomm Autralia. (Curiosity, this same people develop Turing Cipher).

Why?
The reason by the article is have a stream cipher primitive constructor that having a some characteristics by:
  • quickly
  • easy
  • open source
  • secure
"SOBER-128 is based on simple 32 bit operations*. Keys and optional nonces of arbitrary length are supported. Enumeration of keys is thought to be the most efficient attack for key lengths of 128 bits or less. SOBER-128 may be configured to calculate an arbitrary length Message AuthenticationCode (MAC) as part of the encryption or decryption process." 

*(such as 32-bit XOR and addition modulo 232), and references to small fixed arrays.

Implementations
SOBER-128 is use in many computing environments (smart cards to large computers), but principally in mobile systems.

Description:
SOBER-128 is constructed from a linear feedback shift register (LFSR), a non-linear filter (NLF)* and a nonlinear plaintext feed back function (PFF)**.

* Is used to generate the keystream.
** Is used to perturb the LFSR when a MAC is desired.

Sober-128 operate in two modes:

  • Synchronous mode:
  • MAC (Message authentication mode:)

The first is use to when a MAC isn't required, where in the keystream generation is independent of the plaintext. And the second utilizes the PFF to perturb the LFSR with plaintext during encryption or decryption. After the message has been processed, the keystream generator is used to produce a MAC (MAC is required).

LFSR
This consists of 17 words of state, designated R[0] through R[16].

pseudocode:

Step(R):
              x = R[15] ^ R[4] ^ (R[0] << 8)
                  ^ Multab[(R[0] >> 24) & 0xff];
              for (i = 0 to 15):
                  R[i] = R[i + 1];
              R[16] = x;


Where Multab is a table of 256 constants.

NLF

pseudocode:

NLF(R, Konst) = f((((f(R[0] + R[16]) >>> 8) + R[1]) ^ Konst)
                          + R[6]) + R[13];



where "f" is a substitution box function and "Konst" is a constant that is calculated during cipher initialization. The function f is defined by:


f(x) = SBox[x >> 24] ^ x;



Where SBox is a table of 256 constants.

PFF
pseudocode:

PFF(R, Konst, x) = f((f(R[4] + x) >>> 8) + Konst);





Encryption and Decryption:
Encryption is achieved by producing a keystream, which is then combined with the plaintext. The keystream is generated in groups of 4 octets.
pseudocode:


        Step(R);
          x = NLF(R, Konst);
          for (i = 0 to 3):
              v[i] = x & 0xff;
              x = x >> 8;


Encryption:

        for (i = 0 to p.length - 1):
              c[i] = p[i] ^ v[i];


Decryption:

        for (i = 0 to p.length - 1):
              p[i] = c[i] ^ v[i];


*p is the plaintext
*c is the ciphertext
*v is the keystream

Security:
Searching in the web I found this comment in a forum, about the security:
"The base attack on SOBER-128 is an exhaustive key search, (complexity of 2^128).In all attacks, it is assumed that the attacker observes a certain amount of keystream produced by one or more secret keys, and the attacker knows the corresponding plaintext and nonces. This is considered to resist an attack if either the attack requires the owner of the secret key(s) to generate more than 2^80 key stream words, or the computational complexity of the attack is equivalent to the attacker rekeying the cipher 2^128 times and generating at least 5 words of output each time."

Code example:
c
java

Tables:
http://tools.ietf.org/html/draft-paddon-sober128-01#appendix-A
http://tools.ietf.org/html/draft-paddon-sober128-01#appendix-B

Referencias:
http://en.wikipedia.org/wiki/SOBER-128
http://tools.ietf.org/html/draft-paddon-sober128-01
https://opensource.qualcomm.com/index.php?sober128
https://opensource.qualcomm.com/assets/pdf/SOBER-128-v2.pdf
http://www.ietf.org/mail-archive/web/cfrg/current/msg00293.html
http://www.ietf.org/mail-archive/web/cfrg/current/msg00280.html

lunes, 22 de octubre de 2012

Red Petri

Red Petri:
Es una representación de un sistema a eventos, en la que se describe el flujo de la información, ésta a su vez sirve como herramienta para modelar los sistemas.

Actividad:
Para esta entrada se nos encargo modelar un sistema concurrente, para el modelado de éste se empleo snakes de python, donde pueden descargarlo del siguiente link.

Mi sistema a modelar, será sobre las peticiones a un servidor y será algo básico, donde éste se encuentra esperando alguna entrada, una vez que tiene recibe algún dato, ésta la procesa para determinar si arroja un error, de lo contrario manda la información solicitada.


Codigo:

Diagrama:

jueves, 18 de octubre de 2012

Tarea 4: Laboratorio Automatización

Para ésta entrada se nos encargo realizar el problema 6.1, en la cuál me piden dibuar el siguiente sistema:


Teniendo la función de transferencia, ponemos nuestro angulo de condición:


Donde (K(s+1))-s^2 puede ser sustituido por la siguiente ecuación:

Una vez obtenido éste sustituimos todas las s, por δ + jw.

El libro nos mensiona que δ + jw, puede ser sustituido por tan^-1, asi que sustituyendo lo anterior y quitando el 2, para reordenarlo obtenemos:


Podemos reducir la ecuación anterior agregando tan a ambos lados, para despues quitar y asi tener w/δ, reducido .

Igualamos a cero la ecuación, para poder llegar a w/δ y así simplificar valores iguales:

Apoyandome con el libro, mensionan que podemos sustituir por lo siguiente:

donde obtenemos:

Teniendo ésta ecuacion, podemos igualar a cero teniendo lo siguiente:


Teniendo ésta ecuación seguimos a graficarla, donde w = 0, es nuetro eje de los reales de s = - 1 a s = infinito, nuestra segunda ecuación es la ecuación de nuestro circulo donde el centro es δ = -1, w = 0 y el radio es igual a 1 




Referencias:
http://autoycontrolave.blogspot.mx/ 
 Libro de Modern Control Engineering, Fourth Edition, de Katsuhiko Ogata
http://www.google.com.mx/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&ved=0CD4QFjAG&url=http%3A%2F%2Fes.scribd.com%2Fdoc%2F19150402%2FLazo-Abierto-y-Cerrado&ei=I26AUIrVPKSC4gSEx4CYAQ&usg=AFQjCNEc8ICl6bn7EJuJRZDLTmFOUA6a2Q&sig2=PmbObgDAPms1dbXhN9xlJA&cad=rja

martes, 16 de octubre de 2012

Algoritmos Bloque/Bloque ciphers

Who and Where?
The new Block Cipher Rainbow, is the title of an article written by Chang-Hyi Lee and Jeong-Soo Kim in the  Samsung Advance Institute of Technology.

Type of math
Where propose another model of Block Cipher. This type of cipher has the substitution and permutation. similar to the block ciphers Square and SHARK 



Why?
In the article, the authors mention:
"the motivation for develop the algorithm came out from the hope that, first, the block cipher has the structure of parallelism, second, it has a self-reciprocal structure and third its round encryption  involves no linear and efficient key dependent diffusion layer".
The authors implement the algorithm and obtain that the proposal its acceptable, encrypting of 9 to 10mb/secs on a 133 MHz Pentium PC.

How it works?
This type of cipher works by 3 layers related to the round key active diffution and the others ones relates to the non linear sustitution with simple permutation.

G-Function
Where Xi are 32 bit subblocks and K be a 128 bit round key and  \oplus denotes bit by bit logic XOR.

B-Function
Taking that x and k are the same that the previous.

Where ^ denotes bit by bit logic AND.

R-Function
This function consists in 3 types of components functions, P1, P2, P3, which all are defined in the following as functions of the sub-data block, GF(2³²) to GF(2³²). Let x = (x3, x2, x1, x0), Xi \in GF(2⁸) and so x \in GF(2³²). Let's define:

f be a bijective nonlinear function of GF(2⁸) to GF(2⁸)

f and f⁻¹ tables:


Performance:

Comments
Searching I found that this type of cipher is mentioned by hackers for auditories of passwords and aplicated in telecommunications between satellites and smart cards.

References:

martes, 9 de octubre de 2012

Reporte 2: Diagrama de Bloques

Para ésta entrada, lo buscado será realizar un diagrama de bloques de la función de transferencia obtenida del proyecto.

Función de transferencia:
Para mi función de transferencia es el de un sistema de abrir y cerrar un cerrojo de una puerta, dependiendo de un sensor ultrasónico(La persona se encuentra cerca de la puerta), éste es mi entrada y como salida, da el movimiento del servomotor.

Video proyecto anterior:
 
Función de Transferencia:

Más abajo dejaré explicada de como saque mi función de transferencia, que fue lo que me quedo pendiente del reporte anterior.

Donde (TmS+1) y Km  ésta denonata por el servomotor(velocidad del servo, flujo angular, inercia y fricción), debo de mencionar que ésta ecuación de la función del servomotor la saque de un libro mencionado de las referencias.

stD(s))  y 2, esta denotado por la función del sensor ultrasónico

Nota: Explicación mas profunda en otra entrada.

Diagrama de Bloques

Ayuda:



Traducido ésto en diagrama de bloques queda dado por la siguiente imagen, si quieren más información de como pasar  la función de transferencia en diagrama de bloques pueden visitar ésta liga.


Referencias:
http://www.scribd.com/doc/39580374/Modelo-Matematico-de-Sistemas-Dinamicos
https://docs.google.com/viewer?a=v&q=cache:le0jciU-XBYJ:gama.fime.uanl.mx/~agarcia/materias/ingco/apclas/03%2520-%2520Diagramas%2520de%2520Bloques.pdf+&hl=es&gl=mx&pid=bl&srcid=ADGEESg40f8PkHfRFcKXh3_Y1aCYLpbCp7v1gXrVUNlT7VMhf7BP481V4CHKA2eWdtVB2lStVGyhlIgMs5pmoYm-Hgx9XXPZqHoKpdnET2JL-WTjfR_3Bzya1b2AdLBbX2qyY9uyzLxa&sig=AHIEtbQ6s9vfCg_r40E8t47kfA1zgKpOXg

lunes, 8 de octubre de 2012

Reporte Individual Redes Neuronales

Proyecto seleccionado:

La idea es tomar la red neuronal para poder predecir un suceso que pueda acontecer en alguna zona o tiempo, lo buscado es poder aplicar ésto o usarlo de complemento para PlusReport, que es un proyecto que se lleva con otros compañeros.

Así que los parámetros de entrada sería el historial que se tenga de la base de datos.

Pero por lo pronto serán unos valores que serán ingresados por cierto usuario.

Mis aportaciones en el proyecto:

1.- Interfaz entrada:


En la interfaz desarrollada, fue hecha en php y jquery, en ésta se buscará que el usuario suba un archivo .cvs que éste deberá contener dos columnas con n cantidad de filas, la primera columna es de fecha y la segunda de la cantidad. Una vez aceptado el script lo limpia y manda llamar el script de la red neuronal


2.- Valores entrada y salida
Para los valores de entrada del cvs, estos hay que normalizarlos, ya que es así como la neurona los lee (-1 a 1), para normalizarlos se utilizo la siguiente fórmula:






3.- Salida
Una vez que pyhton arrojo un resultado éste es nuevamente normalizado a los valores originales, para posteriormente mostrarlos en la interfaz de salida.



Aprendido:
En lo que se aprendió, fue principalmente el la interpretación de los valores (pre-procesado & post procesado), en el funcionamiento de la neurona (ya que por diversión cada uno de los integrantes, realizaba una neurona hasta determinada fase) y como algunos temas de control y automatización son también aplicados en la predicción y/o aprendizaje de la red neuronal.

Notas:
Tratar de escalar valores en php es muy malo, ya que por experiencias propias, php tiene problemas al trabajar con valores grandes, así que sus resultados tienden a ser erróneos a comparación si éstos se hacen en python así que se hizo un script en pyhton donde te los devuelve.

Referencias:
http://www.neural-forecasting.com/Downloads/EVIC05_tutorial/EVIC%2705%20Slides%20-%20Forecasting%20with%20Neural%20Networks%20Tutorial%20SFCrone.pdf
http://www.obitko.com/tutorials/neural-network-prediction/prediction.html