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

7 comentarios:

Alejandro dijo...

Roco:
al fin revise tu sistema de medición, aun cuando no comprendo bien el funcionamiento de la FFT creo tener una idea para solucionar el problema del avión. Esta es usar dos micrófonos con rango de medición distintos pero que si se intersecten , es decir, que el micrófono para bajas RPM sea capas de pasar el mínimo rango de medición del de altas RPM que va con los paños, luego seria cosa de decirle al softaware que tome los datos desde el micrófono de alta y en el caso contrario cuando bajen desde el de baja.

Eso, dime que piensas y si has hecho algun ensayo midiendo a microfono descubierto a bajas RPM

Wai-Nate dijo...

loocoo, yo te lo dije una vez y te lo vuelvo a decir ahora, sabi q no leo tu blog por q no entiendo nada, Jua!
NVAC y QND
Chauu

¡Aguante el Metal!

electronic_ dijo...

muy buenas!!!!
escribo para haber si me podrias solucionar una pequeña duda que tengo.
si tengo un circuito con matlab y quiero analizar los armonicos de tensió e intensidad, o poderlos observar en una gráfica como lo tendria que hacer.
cual es la comanda que tengo que usar y como la tengo que usar.

muchisimas gracias !! ;)

Francisco Roco dijo...

hola, para analizar los armonicos en matlab debes usar la FFT. Por lo general se usa Y=FFT(X), pero el cómo usarla bien depende de como has calculado la señal a la que le quieres hacer la transformada, te recomiendo ver el ejemplo de FFT que aparece en la pag de la mathworks:

http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/ref/fft.html&http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=matworks+fft


nos vemos

Anónimo dijo...

Hola, tengo una duda.

Si escuchasemos una sola explosión del motor, esta no tendría una frecuencia propia?

Si es así, al escuchar las explosiones escuchariamos la frecuencia con que estas se producen o una suma de las frecuencias de cada explosión individual.

Mi pregunta, viene al caso de que quiero averiguar la frecuencia de sonido que produce un motor de 6 cilindros a 300 rpm, entonces, haciendo cuentas analogas a las tuyas (considerando que un motor de 6 cilindros explota 3 veces por vuelta del cigueñal) llego a que

300 rpm = 20 f (Hz) de donde
f= 15 Hz . Lo que me da una frecuencia por debajo de los 20 Hz
(umbral de audición humana) . Pero.., el motor se esucha. Y aqui es donde me pierdo..,

Agradecería cualquier tipo de ayuda.

Saludos,

Juan.

Francisco Roco dijo...

P: Si escuchásemos una sola explosión del motor, esta no tendría una frecuencia propia?

R: Al producirse una explosión esta genera un ruido que dura poco tiempo, durante ese período se producen variaciones en la presión del aire, lo que percibimos como ruido, el que depende del tipo de explosión y de donde se haga, las características del material, etcétera. Esas variaciones en la presión pueden ser aleatorias - por lo que no tendrían necesariamente frecuencias bien definidas, tendrían una suma de muchas frecuencias, al hacer la DFT se pueden ver-.

¿Por qué entonces se habla de la frecuencia de explosiones del motor?

Lo que escuchamos es una suma de las vibraciones en al aire, producidas por cada explosión. Cada explosión es una variación de la presión en el aire. Como este fenómeno es periódico, sin importar como sea su contenido frecuencial, la explosión se repite. por eso que cuando hacemos el análisis de frecuencia del motor aparecerá como frecuencia el de las explosiones. También aparecerán otras componentes en frecuencia , de menor valor , debido a las frecuencias de cada explosión.

En síntesis el ruido del motor posee varias frecuencias:
-Posee la frecuencia de las explosiones, con mayor amplitud
-Posee frecuencias de cada explosión con menor amplitud.

¿Que escuchamos?

El oído capta frecuencias de los 20 Hz hacia arriba. Si nuestra frecuencia protagonista, la de las explosiones, esta debajo de los 20, el oído no la captará. Pero captará el resto de frecuencias presentes en dicho ruido.

Cuando el motor - en un caso hipotético - hace 1 explosión por segundo ,1[Hz], también escuchamos. No la frecuencia del motor, que es muy baja, pero escuchamos las frecuencias de cada explosión.



Ojo, el micrófono que usé "escucha" sobre los 100[Hz], y las frecuencias medidas están bajo este rango, ¿Cómo midió? Se puso el micrófono en contacto con la superficie del motor, y de suerte la vibración de este logró mover el micrófono a la frecuencia bajo 100 [Hz] haciéndolo oírla.


Para calcular la frecuencia de las explosiones deben considerarse: la configuración del motor, en v línea, el ángulo de desfase de los pistones, ,si es de 4 o 2 tiempos, etc.

¿De que tipo es tu motor?

chao

Unknown dijo...

Hola, me parece super tu idea, creo que en vez de usar el micrófono para grabar el sonido que emite el motor, no sería quizás mejor, utilizar el micrófono como un "estetoscopio" de un médico, asi puedes usar un transductor de menor impedancia y cuando se sature, cambias la ganancia del preamp, es una idea..

saludos

Juan

PD, no leo mucho el blog, me lo pille buscando otra cosa.. mi mail es juan.la.rivera@gmail.com, avisa como te va con esto, que tb me interesa

Saludos