Lo que he aprendido: pintar matrices de MAC en Matlab

Hoy vengo con una cosa megaespecífica para lo que yo hago en la vida: comparar cosas de simulación y experimentales. Concretamente comparo ruido y vibración y en este caso (más concretamente) comparo modos de vibración. ¿Por qué os voy a contar esto? Pues por varios motivos, hermanos míos. El primero es que alguien en el vasto mundo del Interneto puede querer hacer lo mismo que yo y así no tendría que empezar de cero. El segundo es que algún día no muy lejano tendré que buscar currelo y si mis futuros empleadores buscan mi nombre y lo ven relacionado con cosas técnicas dirán ¡oh! esta pava sabe lo que hace y me darán trabajo y me pagarán bien de dinero. Luego está el tercero y más importante: al explicar cosas a los demás es cuando entiendes si tú mismo las captas o no1. Dejémonos de rollos y vamos al lío: pintemos una matriz de MAC todo colorinesca en Matlab.


Primero y para los neófitos en el tema ingeniería mecánica, el MAC o Modal Assurance Criterion es un número entre 0 y 1 que nosotros los ingenieros de la piedra y el palo usamos para decir si dos modos de vibración (ignorar esto y leed vectores) son parecidos o no. Si el MAC es 0 pues son totalmente diferentes y si es 1 pues son iguales. ¿Cómo hacemos esto? Pues dividiéndolos entre su módulo y multiplicándolos escalarmente:

\mathrm{MAC}(\varphi_1, \varphi_2) = \frac{|{\varphi_1}^\intercal{\varphi_2}^*|}{({\varphi_1}^\intercal{\varphi_1}^*) ({\varphi_2}^\intercal{\varphi_2}^*)}

Las Ts y los asteriscos son porque son vectores complejos y verticales.

La particularidad de esto es que nos sirve para ver cómo de parecido es nuestro modelo de simulación a la realidad. Básicamente le damos a un programa nuestros modos de simulación y nuestros modos experimentales le decimos que compare todos con todos y nos haga una matriz rellena de MACs. Si tenemos muchos MACs grandes pues decimos que nuestro modelo es la repera y vamos por ahí muy ufanos. Así de simples somos, ya veis.

Después de esta miniintro teórica para que todo el mundo aprenda algo vamos a centrarnos en la gente que tiene una matriz de MAC en un xls exportada de algún programa y vamos a pintarla.

Cosas que necesitamos:

  • Este hilo de Stack Overflow. Vamos a adaptar el código que dan aquí a nuestras necesidades

  • Entender como van las cells y las funciones lambda en Matlab. Bueno, más o menos.

  • Un archivo xls2 con un formato concreto. Me he basado en los xls que exporta el programa Virtual Lab que es lo que tengo que usar para generar las matrices de MAC3. Abajo en el código está explicado.

  • Paciencia

Tenemos que hacer lo siguiente:

  1. Importar el xls separando los valores de MAC por un lado (lo que pintaremos) y las frecuencias por otro (los ticks los ejes)
  2. Pintar una imagen con cuadrados de colores según el valor de MAC y que contengan el numerito. Para esto adaptaremos el código de Stack Overflow.
  3. Tratar el texto que indica las frecuencias
  4. Poner el texto del eje horizontal en vertical

Siguiendo ese esquema he llegado a esta solución:

Esta en pitinglis y debe ser mejorada pero de momento la podéis ir mirando (y criticando).

Para que la historieta funcione tal vez tengáis que descargar xticklabel_rotate dependiendo de la versión de Matlab que uséis, ya que hasta la versión R2014b Matlab no dejaba girar los nombres de los ticks (el muy). A mí no me queda otra que usarlo porque tengo la R2014a en el curro (al palo). Aquí lo tenéis, por cierto.

Los pros de la versión moderna cambiáis la línea del xticklabel_rotate con algo del tipo:

ejes = gca;
ejes.XTickLabelRotation = 90;

Si os parece interesante otro día explico bien bien los pasos. Me contáis 😉


  1. Recuerden si no a aquellos profesores explicando qué pasa al dividir por cero. 
  2. Y NO Excel 
  3. Al loro con el tengo, lo uso porque no tengo alternativa. Pero ese programa es Satán. 
Anuncios

2 pensamientos en “Lo que he aprendido: pintar matrices de MAC en Matlab

  1. Pingback: El 2016 | Onda Hostil

  2. Pingback: Compilación: Matlab | Onda Hostil

¡Opina sin miedo! (Puedes usar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s