martes, julio 24, 2007

Audio - Tacómetro con Matlab ( Como medir las RPM con Matlab y un microfono)

Introducción

Los sonidos que emite un motor de explosiones- o alternativo- son más agudos al incrementar las RPM -su velocidad de rotación del cigüeñal, aumenta su frecuencia-. Por otro lado, los sonidos son más graves cuando las RPM son más bajas. El Objetivo es usar esta idea para hacer un "Audio-Tacómetro" que funcione con la frecuencia del sonido ¿ la nota musical- que haga el motor, usando la Trasformada de Fourier -FFT- y Matlab. La idea es hacer una especie de afinador para el motor que en vez de mostrar la nota muestre la frecuencia del sonido. Conocida la frecuencia del sonido hay que saber como se relaciona esta con las RPM.

Supuestos



La fuerza de la explosión del motor es de forma cualquiera, pero es periódica, por lo que puede usarse la transformada de Fourier ¿La FFT - para descomponerla en una suma de fuerzas periódicas de la forma.
El periodo de la fuerza, es el periodo de tiempo entre cada explosión producida. La velocidad angular, las RPM, que es lo que queremos medir, dependen del movimiento sube-baja de cada pistón, y este a su vez depende de la periodicidad de las explosiones. Por lo tanto, podemos dejar la velocidad angular en función de la frecuencia de las explosiones, que es lo que vamos a medir.


Midiendo la frecuencia de las explosiones con sonido



Hay varias formas de medir el periodo de las explosiones, por ejemplo con el encendido de las bujías. En realidad lo que se busca es la frecuencia fundamental del sonido que musicalmente, es la nota que hace el motor.
La respuesta del sistema a la fuerza excitadora ¿la Fuerza de la explosión-es el movimiento de forma de vibración. Esta vibración se transmite al aire, y es el sonido, que se mide por micrófono. Se supone el sistema lineal, entonces la respuesta de este es la suma de las respuestas provocadas por cada sumando de la descomposición de la fuerza periódica del motor por la serie de Fourier. Suponiendo que la fuerza es no impulsiva, con periodo mayor al periodo natural de vibración de la estructura que produce el sonido. Esto para suponer que la respuesta tiene una parte transiente y una estacionaria. Esta última es la que nos importa porque contiene la frecuencia de la fuerza excitadora.

En el mejor de los casos, la fuerza excitadora es sólo una sinusoide, que en el espectro se ve una sola línea a la frecuencia de la fuerza, pero esto no pasa, pues hay más componentes múltiplos en el espectro, entonces lo que se que se debería obtener para una RPM constante, debería mostrar las respuestas provocadas por cada sumando de la fuerza excitadora. Como cada respuesta de cada sumando de serie de la fuerza corresponde a un múltiplo de la frecuencia fundamental -por los n de la serie-, la diferencia entre cada línea del espectro corresponde a la frecuencia fundamental. Como la frecuencia fundamental depende de la velocidad angular del cigüeñal si se conoce esta, se puede conocer la velocidad angular del cigüeñal.





Relación de la frecuencia fundamental con la velocidad angular


Para un motor de 4 tiempos de 4 cilindros, tenemos 2 explosiones por cada vuelta o revolución de cigüeñal.
la frecuencia de las explosiones es:
Así las RPM en función de la frecuencia de las explosiones es
Para un motor de dos tiempos y un pistón, correspondiente a un avión aeromodelo, como el del avioncito del GIANT, se calcula de la misma manera y la relación da
El régimen de funcionamiento para este motor esta aproximadamente entre las 2000 rpm correspondientes al ralentí, y un poco mas de 9000 que es el máximo.

Esto es 33,3[Hz] y 150[Hz] por lo que las notas musicales que se podrían hacer con el motor - poco más de una octava- se ven en el gráfico.

Las Mediciones


Para medir se usa un micrófono de PC que en las especificaciones dice que tiene una respuesta de frecuencia de 100 Hz a 10 kHz, es decir, que deja fuera las frecuencias que queremos medir.
Curiosamente cerca del motor de mi auto, el micrófono registra señales de bajas frecuencias, ¿Cómo ocurre esto? No sé, sólo sé que se puso cerca del motor del auto y mostraba una señal y su frecuencia correspondía con las RPM. Para el caso del avioncito del GIANT, el micrófono no es capaz de registrar las frecuencias bajas, pero empieza a registrar una señal periódica concordante con las RPM del motor a las 5500-6000 rpm unos 100[Hz] Aproximadamente.


Para medir se hace un programa en Matlab que grabe un tiempo pequeño, le haga la FFT, y muestre el gráfico. La grabación se hace con el comando wavread, donde TM es el tiempo de la grabación y FS es la frecuencia de muestreo.
Y=wavrecord(TM*FS,FS);


Para hacer el FFT hay que tener ciertas consideraciones. El algoritmo que hace el FFT se puede bajar de la página de The MathWorks ¿ Support , este entrega todo listo, yo la hice una funcion que se llama mifft (aunque no es mía) . Usamos como frecuencia de muestro el doble de la máxima frecuencia que puede alcanzar el motor, 600[Hz] (Criterio de Nyquist). Graficamos para cada instante el espectro, para tratar de hacerlo en tiempo real y ver los resultados. A continuación el FFT instantáneo.

clear all
FS=1000; %input(' Frecuencia de Muestreo: ');
TM=.1;
while 1
    Y=wavrecord(TM*FS,FS); 
    [x,y]=mifft(Y,FS);
    hold off   
    plot(0,0)
    [yo,i]=max(y);
    xo=x(i);
    frecf=num2str(xo);  
    frecf=['La fundamental :',frecf];
    text(3*FS/8,3/4*max(y),frecf)
    text(3*FS/8,2/4*max(y),frecf)
    hold on
    
    stem(x ,y ) 
    pause(TM)
    clc
    %fprintf(1,'RPM         %.0f \n',30*xo)
    %fprintf(1,'frecuencia  %.0f  ',xo)
    if max(Y) >=.99 | min(Y)<=-.99
        fprintf(1,'\n\n   ¡ONDA SATUDADA!',xo)
    end 
end


Un problema que puede ocurrir es que la señal medida puede estar saturada y el FFT mostrará muchos armónicos que no están presentes. Por eso graficamos para cada instante la señal que graba el computador, de forma parecida a un osciloscopio, esto para asegurar que no existe la saturación, y para ver la forma de onda y asegurarnos de que sea periódica. En este caso ocupamos una frecuencia de muestreo alta para ver la forma de la onda, 44100 [Hz] La idea es tener ambos gráficos. A continuación el "Osciloscopio Hechizo"

clear all
FS=44100/2;
TM=.1;
amx=.01;
while 2<3
    Y=wavrecord(TM*FS,FS); 
    hold off
    X=linspace(0,length(Y)/FS,length(Y));
    plot(0,-amx)
    hold on
    plot(TM,amx)
    plot(X,Y)
    pause(.5*TM)
end


Aquí se ve la diferencia de un La440 Hz con la señal saturada y no saturada
Espectro de de la onda saturada


Vista de la onda saturada

Espectro de onda no saturada
Onda no saturada

La prueba



Poniendo el micrófono en un lugar seguro y no caliente, cerca del motor de un Suzuki Aerio® para las 1500 rpm medidas en el tacómetro del vehículo que tiene una sensibilidad de 500 rpm (se mantuvo lo más cerca de la rayita de los 1500) y asegurando que no esta saturada la señal.

Aca esta la grabación del motor del Suzuki Aerio® para las 1500 rpm.


El fft de la grabación es:

La línea mide mayor amplitud esta cercana a los 50[Hz]

La onda muestreada a 44100[Hz]es esta, notar que no está saturada.


La onda muestreada a 600[Hz]es esta.


El espectro es como en el mejor caso, es decir, solo muestra una línea de frecuencia, que corresponde a los 50[Hz] que son las 1500[rpm]=30*50[Hz]. Esto pasa porque se ocupa una frecuencia de muestreo baja, y no se muestran los armónicos mayores a 300[Hz], Los armónicos menores a 300 [Hz] existen, pero son muy pequeños. La onda muestreada a 44100[Hz] tiene forma periódica pero no de sinusoide, por esto debe tener armónicos.

El problema de estas mediciones ocurre cuando se acelera de forma rápida, pues la muestra que se graba y se analiza no es una sinusoide de periodo constante, como lo exige el FFT. El periodo de la señal cambia, y el programa entrega una frecuencia que no corresponde necesariamente al sonido del motor.


Caso del avión del GIANT

La idea era montar un medidor de RPM, o tacómetro dentro de un avión no tripulado del Grupo de Interés de Aviones No Tripulados (GIANT) de la UdeC.

El sistema funciona con el avión midiendo las RPM más altas que 5000~6000 RPM. Hay dos problemas para medir las RPM con este método para el avión:

1) La saturación de la señal medida por la gran amplitud del sonido del motor a altas RPM, esto se soluciona cubriendo el micrófono con géneros o esponjas aislantes, pero ocurre que cuando esta funcionando al ralentí el sonido es muy bajo y el micrófono no lo registra de buena forma.

2) Los sonidos producidos por el motor cuando este funciona a 5000-6000 RPM son cercanos a 100 Hz, limite inferior del rango de frecuencias que capta el motor. A diferencia de lo que ocurre en el auto, el micrófono no es capaz de captar estas ondas de baja frecuencia.

Por lo anterior, el sistema no fue implementado.

Cualquier ayuda, sugerencia comentario es bienvenida

Francisco Roco