La Pontificia Universidad Católica de Peru (PUCP) es una de las 20 mejores universidades de Latinoamérica. Recientemente me entero que tienen un enorme repositorio de tesis de acceso público que van desde nivel bachillerato hasta doctorado en un amplio número de áreas como Ciencias Sociales, Filosofía e Ingeniería y Ciencias Exactas. Me ha ayudado bastante a informarme sobre el estado del arte y para citar trabajos en mi tesis de licenciatura. Definitivamente un gran aporte al conocimiento para el mundo hispanohablante.
domingo, 23 de octubre de 2016
viernes, 21 de octubre de 2016
Small Ku Band Radio Telescope (1m)
Early this year I started to build a small radio telescope for my undergraduate thesis.The idea came to me as a smaller and open (without Radio Eyes) version of the Robert Arrowsmith's SDR radio telescope. In order to make a contribution to other students and educators all over the world, the main goals of the project are the following:
And this is how the system looks like when is assembled:
Once the mount is calibrated after add a magnetometer and an IMU, I will take some data using a FunCube and a RSA306B USB Spectrum Analyzer (which is not mine, sadly, but my adviser is letting me use it).
This post is only a brief teaser, but I promise I will release everything as soon as I get my degree!
- Create an open hardware and affordable altazimuth mount
- Create Python modules for control and coordinate conversions
- Start a complete open hardware/software astronomical platform for educational proposes in long term.
And this is how the system looks like when is assembled:
Once the mount is calibrated after add a magnetometer and an IMU, I will take some data using a FunCube and a RSA306B USB Spectrum Analyzer (which is not mine, sadly, but my adviser is letting me use it).
This post is only a brief teaser, but I promise I will release everything as soon as I get my degree!
martes, 6 de septiembre de 2016
Morelia Vol. 2
![]() |
| Yo aparentando saber de lo que hablo. |
miércoles, 31 de agosto de 2016
Identificación de la función de transferencia de un motor de Lego Mindstorms NXT
Utilizando la App de System Identification Toolbox de Matlab es muy sencillo estimar experimentalmente la función de transferencia de un sistema dinámico. Básicamente, existen 3 formas de identificar la planta de un sistema dinámico: el modelo de caja negra, el modelo de caja blanca y el modelo de caja gris. En el modelo de caja blanca se obtiene la función de transferencia a partir de los principios físicos conocidos sobre el sistema (que es lo que suele hacerse en un primer curso de sistemas de control al obtener la planta de un sistema masa-resorte-amortiguador). Sin embargo, cuando se trata de sistemas reales esto o suele ser muy complicado. El método de modelado por caja negra se encarga de estimar la función de transferencia con herramientas estadísticas utilizando únicamente una función de entrada de prueba y la función de respuesta de la planta ante dicha función:
Para la que la identificación sea certera es un requisito que u(t) tengo un ancho de banda muy amplio. Esto le permite al algoritmo de estimación tener más información disponible para la estimación del modelo. Idealmente la función que cumple con ancho de banda infinito es la delta de Dirac, sin embargo, al ser imposible de generar físicamente se opta en la practica por usar secuencias pseudoaleatorias binarias (PRBS's). Estas secuencias pueden generarse con un registro de corrimiento de retroalimentación lineal (LFSR) y tienen características espectrales de ruido blanco lo que las hace ideales para ser usadas como señales de prueba. La descripción de los generadores de PRBS's es todo un tema aparte del que espero escribir a detalle más adelante, pero pueden darse muy buena idea de como funcinan con este documento.
Para esta práctica se requiere tener instalar el paquete de soporte de Lego Mindstorms para Simulink. Pueden instalarlo ejecutando el comando supportPackageInstaller en la ventana de comandos de Matlab y buscando Lego Mindstorms NXT. El modelo implementado en el NXT es el siguiente:
Este diagrama nos permite adquirir los datos tanto de la función de entrada como la de salida y los envía al workspace. Para poder hacer la adquisición a la PC debe ejecutarse en modo external. [Aquí pueden ver un video tutorial para hacer esto]. Los datos obtenidos son los siguentes:
Estas dos señales son las que utilizaremos en al app para realizar la identificación. Esta aplicación tiene una interfaz gráfica muy sencilla de utilizar.[Aquí hay un videotutorial en español para aprender a usarla]. Después de experimentar con varias combinaciones de polos y ceros, el modelo preliminar que logró un acierto del 96.12 % fue el siguiente:
Este aún es el modelo crudo encontrado por el identificador y es necesario ajustarlo. Lo primero que salta a la vista el el termino 5,434e-11 que es despreciable y eliminaremos en el modelo final. Lo que resta es hacer un ajuste de ganancia. Para ello requerimos la respuesta experimental en lazo cerrado del motor ante un escalón unitario. Ejecutamos entonces el siguiente diagrama a bloques para poder obtenerlo:
Teniendo los datos de la respuesta experimental, debemos ahora compararlo con la respuesta teórica de nuestro modelo ajustando la ganancia hasta observar resultados favorables (debe haber algún procedimiento analítico para esto, pero lo he realizado de forma empírica). El diagrama del modelo teórico, junto con el modelo de caja blanca realizado por la Universidad Politécnica de Madrid[1] como segunda referencia, es el siguiente:
Las respuestas fueron las siguientes:
Con esto queda verificado que la función de transferencia final de posición angular (en grados) contra potencia (%) nos queda:
La ventaja de este proceso es que puede repetirse para caracterizar la función de transferencia de los motores con carga como puede ser un brazo robótico o un robot móvil, algo que representaría un proceso tedioso con el enfoque de caja blanca. Adelantantome a la petición de los archivos:
Para la que la identificación sea certera es un requisito que u(t) tengo un ancho de banda muy amplio. Esto le permite al algoritmo de estimación tener más información disponible para la estimación del modelo. Idealmente la función que cumple con ancho de banda infinito es la delta de Dirac, sin embargo, al ser imposible de generar físicamente se opta en la practica por usar secuencias pseudoaleatorias binarias (PRBS's). Estas secuencias pueden generarse con un registro de corrimiento de retroalimentación lineal (LFSR) y tienen características espectrales de ruido blanco lo que las hace ideales para ser usadas como señales de prueba. La descripción de los generadores de PRBS's es todo un tema aparte del que espero escribir a detalle más adelante, pero pueden darse muy buena idea de como funcinan con este documento.
Para esta práctica se requiere tener instalar el paquete de soporte de Lego Mindstorms para Simulink. Pueden instalarlo ejecutando el comando supportPackageInstaller en la ventana de comandos de Matlab y buscando Lego Mindstorms NXT. El modelo implementado en el NXT es el siguiente:
Este diagrama nos permite adquirir los datos tanto de la función de entrada como la de salida y los envía al workspace. Para poder hacer la adquisición a la PC debe ejecutarse en modo external. [Aquí pueden ver un video tutorial para hacer esto]. Los datos obtenidos son los siguentes:
Estas dos señales son las que utilizaremos en al app para realizar la identificación. Esta aplicación tiene una interfaz gráfica muy sencilla de utilizar.[Aquí hay un videotutorial en español para aprender a usarla]. Después de experimentar con varias combinaciones de polos y ceros, el modelo preliminar que logró un acierto del 96.12 % fue el siguiente:
Este aún es el modelo crudo encontrado por el identificador y es necesario ajustarlo. Lo primero que salta a la vista el el termino 5,434e-11 que es despreciable y eliminaremos en el modelo final. Lo que resta es hacer un ajuste de ganancia. Para ello requerimos la respuesta experimental en lazo cerrado del motor ante un escalón unitario. Ejecutamos entonces el siguiente diagrama a bloques para poder obtenerlo:
Teniendo los datos de la respuesta experimental, debemos ahora compararlo con la respuesta teórica de nuestro modelo ajustando la ganancia hasta observar resultados favorables (debe haber algún procedimiento analítico para esto, pero lo he realizado de forma empírica). El diagrama del modelo teórico, junto con el modelo de caja blanca realizado por la Universidad Politécnica de Madrid[1] como segunda referencia, es el siguiente:
Las respuestas fueron las siguientes:
Con esto queda verificado que la función de transferencia final de posición angular (en grados) contra potencia (%) nos queda:
La ventaja de este proceso es que puede repetirse para caracterizar la función de transferencia de los motores con carga como puede ser un brazo robótico o un robot móvil, algo que representaría un proceso tedioso con el enfoque de caja blanca. Adelantantome a la petición de los archivos:
Etiquetas:
Control,
Lego Mindstorms NXT,
Matlab,
Motores,
Simulink
jueves, 11 de agosto de 2016
miércoles, 20 de julio de 2016
Concepto de frecuecia en tiempo discreto
Este es un tema que si no se entiende bien al principio de un curso de procesamiento digital de señales puede acarrear muchos problemas al ir avanzando en temas más complicados. En esta entrada trataré de explicar lo más claro posible lo que es la frecuencia de una señal discreta. Primero, comencemos describiendo a una función cosenoidal en tiempo continuo con la notación del Proakis [1]:
El subindice a se utiliza para denotar que x_a(t) es una señal analógica y no confundirla con su contraparte discreta x[n]. Ahora, tomemos esta misma señal discreta y multipliquémosla por tren de pulsos unitarios con un periodo de muestreo Ts (proceso conocido como muestreo). Gráficamente, el resulto obtenido es el siguiente:
Tenemos ahora una nueva función que depende de una variable entera n multiplicada por el periodo de muestreo Ts. Es este escalamiento por Ts lo que permite que la señal discreta x[n] coincida en el tiempo con la señal x_a(t). x[n] es una nueva señal que está definida en función de una secuencia de números enteros que representan una posición en un arreglo de datos (estas posiciones pueden tomar valores negativos si se toman con respecto a un origen arbitrario en el arreglo):
Como consecuencia del teorema de muestreo de Nyquist-Shannon, sólo es posible obtener información sobre una señal o componente a una frecuencia dada sin riesgo de ambigüedades (conflictos con sus alias) mientras su frecuencia sea menor o igual a la mitad de la frecuencia de muestreo (que es simplemente el inverso de su periodo de muestreo Fs = 1/Ts). Por lo tanto, la frecuencia relativa (también llamada frecuencia normalizada) esta limitada al intervalo:
Si se grafica un ejemplo numérico, resulta bastante intuitivo visualizar que cuando un coseno discreto tiene una frecuencia relativa de pi radianes por muestra se alcanza el periodo mínimo distinguible para una función periódica discreta. Los sinusoides en tiempo discreto muestran periodicidad en frecuencia. Esto significa que los sinusoides discretos que guarden una diferencia en frecuencia de 2*pi son idénticos. Esto puede verse más claramente en esta animación que hice en Matlab:
Naturalmente, lo que nos interesan son los parámetros físicos a los que las señales en tiempo discreto hacen referencia. El periodo de muestreo Ts es el puente clave para darle significado en tiempo continuo a estas señales. Resumiendo las transformaciones de frecuencia:
Referencias:
Sec. 1.3 "Concepto de frecuencia en señales continuas y discretas en el tiempo", "Tratamiento Digital de Señales", John G. Proakis
Teorema del Muestreo, L. Javier Morales Mendoza, UGto
Como consecuencia del teorema de muestreo de Nyquist-Shannon, sólo es posible obtener información sobre una señal o componente a una frecuencia dada sin riesgo de ambigüedades (conflictos con sus alias) mientras su frecuencia sea menor o igual a la mitad de la frecuencia de muestreo (que es simplemente el inverso de su periodo de muestreo Fs = 1/Ts). Por lo tanto, la frecuencia relativa (también llamada frecuencia normalizada) esta limitada al intervalo:
Si se grafica un ejemplo numérico, resulta bastante intuitivo visualizar que cuando un coseno discreto tiene una frecuencia relativa de pi radianes por muestra se alcanza el periodo mínimo distinguible para una función periódica discreta. Los sinusoides en tiempo discreto muestran periodicidad en frecuencia. Esto significa que los sinusoides discretos que guarden una diferencia en frecuencia de 2*pi son idénticos. Esto puede verse más claramente en esta animación que hice en Matlab:
Naturalmente, lo que nos interesan son los parámetros físicos a los que las señales en tiempo discreto hacen referencia. El periodo de muestreo Ts es el puente clave para darle significado en tiempo continuo a estas señales. Resumiendo las transformaciones de frecuencia:
Referencias:
Sec. 1.3 "Concepto de frecuencia en señales continuas y discretas en el tiempo", "Tratamiento Digital de Señales", John G. Proakis
Teorema del Muestreo, L. Javier Morales Mendoza, UGto
martes, 12 de julio de 2016
¿Qué tan lejos están las estrellas que podemos ver a simple vista?
Hace unos años se había abierto una discusión en reddit (también en Quora)a causa de la tira de xkcd de arriba. Hoy me encontré con una discusión similar ahora por un post en Facebook. Como ni las respuestas en reddit ni Quora me convencieron, decidí encontrar la respuesta yo mismo analizando algunos datos.
Primero, descargué la base de datos HYG (Hipparcos, Yale Bright Star, and Gliese) desde aquí, que nos da la información combinada de los 3 catálogos estelares mencionados, una muestra de cerca de 120,000 estrellas. Teniendo el archivo, escribí un programa en Python usando la librería Pandas [pueden bajarlo aquí] para analizar los datos. Y esto fue lo que encontré para la todas las estrellas resueltas [que pueden distinguirse como fuentes puntuales individuales] con una magnitud menor a 6:
De acuerdo al catálogo, el 98% de las estrellas que podemos ver a simple vista en la Tierra (muy lejos de las ciudades y sin luna) se encuentran a menos de 1000 años luz. Aún más interesante, las distancias de estas estrellas tienen una media de sólo 145 años luz con una desviación estándar de 136 años luz . Considerando los porcentajes en una distribución normal:
estamos hablando de que el 95% de esas estrellas se encuentran a menos de 417 años luz. Debe notarse también de que el 2% de las estrellas que se encuentran a más de 1000 años luz en este catalogo tienen una incertidumbre considerable y todas ellas se redondean a 10,000 años luz. En conclusión, cuando uno mira una estrella en la noche, lo más probable es que esté a menos de 400 años luz de distancia.
miércoles, 29 de junio de 2016
Convolución de dos señales en Matlab
La convolución continua de dos funciones esta dada por:
De esta forma, lo que esperaríamos ver al convolucionar dos pulsos cuadrados de amplitud y ancho unitario se muestra en la siguiente animación:
Para implementar la convolución de dos señales en Matlab se debe considerar que la función conv() [ver documentación] está realizando la operación de convolución discreta que está expresada como:
Si uno utiliza esta función esperando los resultados de una convolución continua, se lleva la sorpresa de que los valores de la convolución resultante son muchos más altos que los valores correctos. Esto se ocurre porque hace falta considerar que una convolución continua se aproxima como el producto del periodo de muestreo por la convolución discreta de las mismas señales evaluadas en tiempo discreto. Esto es:
Referencias:
Using MATLAB with the Convolution Method, California State University Northridge
De esta forma, lo que esperaríamos ver al convolucionar dos pulsos cuadrados de amplitud y ancho unitario se muestra en la siguiente animación:
Para implementar la convolución de dos señales en Matlab se debe considerar que la función conv() [ver documentación] está realizando la operación de convolución discreta que está expresada como:
Si uno utiliza esta función esperando los resultados de una convolución continua, se lleva la sorpresa de que los valores de la convolución resultante son muchos más altos que los valores correctos. Esto se ocurre porque hace falta considerar que una convolución continua se aproxima como el producto del periodo de muestreo por la convolución discreta de las mismas señales evaluadas en tiempo discreto. Esto es:
Así, el programa en Matlab nos queda:
Ts = 0.01;
t = -2:Ts:2;
f = (t>-0.5) - (t>0.5);
g = f;
%Convolución
cnv = Ts*conv(f,g,'same');
subplot(3,1,1),plot(t,f), ylim([0 1.5]),title('f(t)'),grid on
subplot(3,1,2),plot(t,g,'r'), ylim([0 1.5]),title('g(t)'),grid on
subplot(3,1,3),plot(t,cnv,'g'), ylim([0 1.5]),title('conv(f(t),g(t))'),grid on
t = -2:Ts:2;
f = (t>-0.5) - (t>0.5);
g = f;
%Convolución
cnv = Ts*conv(f,g,'same');
subplot(3,1,1),plot(t,f), ylim([0 1.5]),title('f(t)'),grid on
subplot(3,1,2),plot(t,g,'r'), ylim([0 1.5]),title('g(t)'),grid on
subplot(3,1,3),plot(t,cnv,'g'), ylim([0 1.5]),title('conv(f(t),g(t))'),grid on
Using MATLAB with the Convolution Method, California State University Northridge
miércoles, 1 de junio de 2016
Language Barriers
sábado, 14 de mayo de 2016
Duloxetina
![]() |
| A Quay at Caen - Stanislas Lépine |
![]() |
| Atkinson Grimshaw |
Suscribirse a:
Entradas (Atom)
























