Introducción a Matlab






















Hoy tuve una conversación con alguien que leyó mi blog y me dijo: "Estaba entendiendo tu explicación hasta que empezaste con matlab"; por eso decidí hacer este mini tutorial de introducción a Matlab que me habría encantado encontrar a tiempo.

Lo haré lo más corto y práctico posible para un estudiante universitario de electrónica o afín.

fig1
Figura 1



Matlab es un entorno genial de trabajo porque trabaja con VECTORES y MATRICES.

Un vector, en la programación, no es más que UNA VARIABLE compuesta por un avlor en una posición o espacio de memoria.

Los vectores pueden ser "columna" o "fila" como en la figura 1 y la figura 2 respectivamente.



fig 2
Figura 2

Ahora, las matrices son variables que constan de filas y columnas como en la figura 3.
Fig 3
Figura 3

 La manera de crear un vector o una matriz es la siguiente:

fila=[1 2 3 -5 8 9];      ó      fila=[1,2,3,-5,8,9];
columna=[1; 2; 3; -5; 8; 9];
matriz=[1 2 3; 4 5 6; 7 8 9];


De este ejemplo se nota que se puede separar una columna de otra se usa un espacio " " o una coma ",". Por otro lado, para separar una fila de otra fila se usa un punto y coma ";".

Además, el punto y coma ";" al final de cada línea, es para que el resultado de ea línea de cálculo NO SE IMPRIMA en la consola de Matlab. Si le quitas ese caracter, el cálculo de la línea de trabajo que ejecutes se imprimirá en esta zona.

Puedes acceder a una posición de un vector usando el número de la posición dentro de paréntesis inmediatamente luego de la variable. Así:

fila=[1 2 3 -5 8 9];
a=fila(1)

Y "a" será igual a "1" porque fila=[fila(1) fila(2) fila(3) fila(4) fila(5) fila(6)]; como ves en la foto del inicio.

Siempre empieza desde "1". Si escribes "a=fila(0)" te retornará un error.




0 comentarios:

RFID (RF522) Altium PCB

En esta entrada voy a hablar sobre un capricho que hice hace poco: La placa del lector RFID de Arduino.




Yo diseño en Altium solamente porque mi universidad cuenta con esa licencia. Tú puedes sentirte libre de usar el software que prefieras.

Lo primero que hice fue averiguar qué integrado usa (porque me fijé que solo tiene un integrado cpequeñito) y luego leí su hoja de datos (Link al final del post).

Resulta que el poderosito RF522 es un circuito integrado con comunicaciones ISP / I2C / UART que es capáz de enviar y recibir información a travez de una interfaz de radio de diferentes frecuencias (13.56 MHz para el caso del lector común de adruino).

Encontré varios circuitos por internet así que busqué el que más se repetía en diferentes páginas y diseñé ese.

Harto de no encontrar las librerías correctas por falta de una licencia pagada, o una cuenta en Altium, diseñé mis propios footprints basados en las hojas de datos de los componentes (aunque en el siguiente post de PCB les enseñaré cómo conseguir PCBs correctamente).

El resultado es una maravilla como ven en las imágenes.
Les adjunto el Esquemático del proyecto y las librerías usadas porque el PCB que yo hice fue algo diferente.


0 comentarios:

Modelamiento de tráfico con P1P

Link de programa: 

Link de publicación: https://ieeexplore.ieee.org/document/8317034/ 



Les hablaré sobre un método de modelamiento de tráfico llamado P1P.

P1P significa "Potential Polynomial of Degree 1" o "Polinomios potenciales de grado1".

Se trata de una simple regresión polinomial (sencilla regresión matemática) pero utilizando el modelo de polinomio P1P:

eq1
         eq(1).

Ó si tienes 3 variables:

B_barrita = c0 + c1*x + c2*y + c3*z + c4*x*y + c5*x*z + c6*y*z + c7*x*y*z                 eq(2).

Si pretendes usar más de 3 variables (m variables), la ecuación de P1P se va tornando de la siguiente manera:

B_barrita= coeficiente independiente (a0) + un coeficiente por cada variable multiplicando a cada variable (a1*x1 + a2*x2+ a3*x3 + .... + an*xm)  + un coeficiente PARA CADA COMBINACIÓN POIBLE DE LAS VARIABLES (b1*x1*x2 + b2*x1*x3 + ... + bn*x1*xn  + ... + cn*x1*...*xm).

Una regresión polinomial consiste en encontrar los coeficientes "c0", "c1"... "ck" de tal manera que un vector "B_barrita" sea lo más parecido a un vector "B_real". Siempre que el vector "B_barrita" sea una ecuación formada por unas variables "x1",, "x2", "x3" ... "xm" (vectores de datos) y los coeficientes mencionados.

En esta entrada, "m" es la cantidad de variables que se usan. "n" es la longitud de cada vetor (cantidad de datos en cada variable) y "k" es la cantidad de coeficientes "c" de la ecuación P1P.

La manera más sencilla de entender esto es de la siguiente forma:

e=B_real - B_barrita            (eq3).

     
eq4
 (eq4  "Bi" es B_real y "B_barrita" es nuestro modelo P1P).
O lo que es lo mismo:

eq5
(eq5)    

De la ecuación 4 ó 5 (eq4; eq5) podemos rescatar un par de cosas.

-Al tratarse de una sumatoria, debemos notar que "B_barrita" y "B_real" son VECTORES (o sea un conjunto de datos de la forma B=[ B(1) B(2) B(3) B(4) ... B(n-1) B(n)]) ambos de longitud "n".

-El vector "B_barrita" ya está formado por la ecuación de P1P cómo (eq1) o (eq2), es decir, tenemos un vector con variables incógnitas (variables simbólicas si usas Matlab) que son los coeficientes "c1", "c2" ... "ck".


El problema de "encontrar" los valores de los coeficientes "c" que MINIMICEN el error cuadrático de la ecuación 4 o ecuación 5 (eq4; eq5) está en una derivada e igualación a cero.

Recuerda que cuando quieres encontrar EL MÍNIMO en una curva, lo que haces es igualar su primera derivada a cero (como en este video https://www.youtube.com/watch?v=CZbA2ckCjXA).

Entonces, derivando en fucnión de CADA COEFICIENTE "c":


eq6
(eq 6, 7, 8, 9)

De la ecuación 6 obtendremos el coeficiente "c0".
De la ecuación 7 obtendremos el coeficiente "c1".
De la ecuación 8 obtendremos el coeficiente "c2".
De la ecuación 9 obtendremos el coeficiente "c3".

Si necesitas información más detallada y una explicación más adecuada, puedes encontrarlo en mi publicación en IEEE https://ieeexplore.ieee.org/document/8317034/  



Aplicación al tráico de red.

Ahora que hemos entendido cómo se usaría P1P, imagínense el siguiente escenario.

Si se pueden contar los paquetes TCP y UDP que circulan en un enlace de red durante un segundo (como lo hacen otros autores que cito en mi paper) y obtener una euación "B_barrita" con coeficientes "c" que describan el comportamiento aproximado de "B_real"... en un futuro solo tendremos que contar cuántospaquetes TCP y cuántos paquetes UDP pasan durante OTRO egundo desconocido y luego reemplazarlos por las variables "x" y "y" de nuestra ecuación y PRESTO!
Tendremos un APROXIMADO del tráfico real que pasó por ese enlace en Bits por segundo.

Para hacer esto les indicaré.

-El vector "B_real" es un vector de datos de Bits por segundo REALES atrapados de un enlace que podemos monitorear con Wireshark (puedes descargarlo gratis de: https://www.wireshark.org/download.html).

-El vector "x" o "TCP" es un vector de CUÁNTOS PAQUETES TCP circularon por el enlace en un segundo.

-El vector "y" o "UDP" es un vector de CUÁNTOS PAQUETES UDP circularon por el enlace en el mismo segundo que el vector TCP o B_real.

Los tres vectores tienen el mismo tamaño.

Puedes "olfatear" o "capturar" todos los mensajes que pasan por un enlace con Wireshark y luego exportarlos en formato "*.csv".

Una vez hecho esto, bastará con crear un programa que ejecute la matemática expuesta y tendras como resultado un modelador y predictor bastante bueno y simple con P1P.




La importancia de usar este polinomio es que a pesar de que realiza operaciones lineales (todas de grado1) combina las variables de tan buena manera que la aproximación de "B" a un vector real "A" es siempre la mejor cuando se trata de polinomios.

Les dejé un enlace a una función de Matlab que usa P1P y mínimos cuadrados para hallar un vector "B" usando 3 variables y un vector "B_rea".


Además, si quieren entender mejor su dinámica y beneficios, les dejé el link para que lean mi publicación en el congreso Ruso en St. Petersburg en Enero de 2018.


Buena suerte.




0 comentarios: