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
El resultado de la autocorrelación:
matlab
discrete-signals
Motor
fuente
fuente
Respuestas:
Aquí hay un intento de hacer lo que necesita en
scilab.
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_peaks
funció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 tomadiffs = diff(peaks);
y luegomean(diffs(10:173))
rinde11.195122
.Código a continuación.
fuente
¡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:
¡Al final encuentra la posición máxima y felicidades por el período!
¿Cómo hacerlo en matlab aquí?
fuente
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.
fuente