no puedo averiguar el período de mi señal

7

Tengo una señal ruidosa, que es el sonido del motor con una velocidad constante, por lo que el sonido "debería" ser periódico, sé que hay una manera de usar la función de autocorrelación para obtener el período, lo hice, pero No puedo entender el período. Alguna idea de cómo hacer eso debajo de la señal y el resultado de la autocorrelación: la señal señal

El resultado de la autocorrelación: autocorrelación

Motor
fuente
Si tiene una nueva pregunta, hágala haciendo clic en el botón Hacer pregunta . Incluya un enlace a esta pregunta si ayuda a proporcionar contexto. - De la opinión
MBaz

Respuestas:

6

Aquí hay un intento de hacer lo que necesita en scilab.

ingrese la descripción de la imagen aquí

La gráfica superior muestra algunos datos que sinteticé. La segunda gráfica muestra la autocorrelación de los datos sin procesar (ampliada alrededor del pico central de la autocorrelación). Los círculos rojos muestran los picos encontrados usando esta find_peaksfunción .

La gráfica final muestra la diferencia entre todas las ubicaciones de los picos. Esta será una estimación del período. Debido a que no está realmente garantizado de que el período subyacente sea un número entero de muestras, probablemente debería encontrar la media de estos valores.

En este caso, el período "verdadero" es 1/f0 = 11.191996, y toma diffs = diff(peaks);y luego mean(diffs(10:173))rinde 11.195122.


Código a continuación.

N = 1000;
f0 = 0.0893495634;
phi = rand(1,1,'uniform')*2*%pi;
sigma = 0.5;

x = sin(2*%pi*[0:N-1]*f0 + phi) + sigma*rand(1,N,'normal');
XC = xcorr(x);

clf
subplot(311)
plot(x);

subplot(312)
plot(XC);

peaks=peak_detect(XC,0);

plot(peaks,XC(peaks),'ro')

a = get('current_axes');
a.data_bounds=[950 1050 -500 800];

subplot(313)
plot(diff(peaks));
Peter K.
fuente
4

¡parece que está aplicando alguna función de ventana en su señal (el gráfico de autocorrelación parece en ventana)!

Para hacer su trabajo, divida su señal en datos enmarcados constantes superpuestos o no, aplique la función de autocorrelación:

y(k)=n=0N1x(k)x(n+k)

¡Al final encuentra la posición máxima y felicidades por el período!

¿Cómo hacerlo en matlab aquí?

ederwander
fuente
No, no lo sé, y hablando de picos, ¿a qué te refieres?
Motor
¡el pico es el valor máximo en su vector de autocorrelación!
ederwander
mi período no puede ser 10000 mi vector tiene 10000 elementos?
Motor
2
No es necesario que se aplique una función de ventana. El estimador de autocorrelación estándar (sesgado) producirá una envoltura triangular a la autocorrelación. Además, el pico de la correlación automática siempre estará en el centro, por lo que debe explicar un poco más lo que quiere decir con "encontrar la posición máxima". Sospecho que te refieres a encontrar el pico principal y luego encontrar el siguiente pico más grande más cercano a él; La distancia entre los dos será una estimación del período.
Peter K.
tienes razón, la trama de @Engine parece ser una autocorrelación estándar :-) Lo hice usando matlab aquí
ederwander
0

Mi forma preferida de averiguar el "período" de su señal es mirar el espectro. Parece que su señal tiene una onda sinusoidal fuerte con algo de ruido. Si toma la FFT y traza la magnitud, podrá ver qué frecuencias son más fuertes (probablemente corresponderán a las RPM a las que está funcionando el motor). El "período" de su señal será 1 dividido por la frecuencia de la señal. Si tiene una onda sinusoidal de 10Hz, su período será de 0.1 segundos.

Jeremy
fuente