¿Existe algún algoritmo que pueda usarse para determinar si una muestra de datos tomada a intervalos de tiempo fijos se aproxima a una onda sinusoidal?Determinar si un conjunto de datos se aproxima a una onda sinusoidal
Respuesta
Tome la transformada de Fourier que transforma los datos en una tabla de frecuencias (busque fft, transformación rápida de Fourier, para una implementación. Por ejemplo, FFTW). Si es un seno o un coseno, la tabla de frecuencias contendrá un valor muy alto correspondiente a la frecuencia que está buscando y un poco de ruido en otras frecuencias.
Alternativamente, haga coincidir varias sinussen en varias frecuencias e intente hacerlas coincidir con la correlación cruzada: la suma de cuadrados de las diferencias entre su señal y el seno que está tratando de encajar. Tendría que hacer esto para sinussen en un rango de frecuencias, por supuesto. Y necesitarías hacer esto mientras traduces el seno a lo largo del eje x para encontrar la fase.
Sinussen - sini? –
Plural parece ser sinusal también ... Ese es el problema cuando no se escribe en la lengua materna. Sinai entonces :)? –
Una buena estimación de la calidad será la altura del pico muy alto, dividido por la suma de las alturas de otros picos. Usando esta medida, 1 significa un ajuste perfecto, 0 significa que no se ajusta en absoluto. – Martijn
Compruebe el least squares method.
@CookieOfFortune: Estoy de acuerdo, pero el ajuste de la serie de Fourier es óptimo en el sentido de mínimos cuadrados (como se dice en el artículo de Wikipedia).
Si quiere jugar primero con sus propios datos de entrada, consulte Discrete Fourier Transformation (DFT) en Wolfram Alpha. Como se señaló anteriormente, si desea una implementación rápida, debe consultar uno de varios FFT-libraries.
La onda sinusoidal probablemente tiene una desviación de fase, lo que haría que el uso del método de mínimos cuadrados sea más difícil de implementar. – CookieOfFortune
Disparo en el azul: Puede aprovechar el hecho de que la integral de a*sin(t)
es a*cos(t)
. Hacer un seguimiento de los mínimos/máximos de sus datos debe permitirle saber a
.
∫ (a · sin (k · t + m) + b) dt = (-a/k) · cos (k · t + m) + b · t + C –
No estoy seguro de que esta sea una dirección fructífera para entrar. Sin embargo, puede ser útil señalar que la segunda derivada de un seno es proporcional ay negativa del original. d2/dx2) sin (kx) = -k^2 sin (x). Para reducir los efectos del ruido y el error de redondeo, use un derivado suavizado: lea sobre el filtrado Savitzky-Golay. – DarenW
Puede calcular la transformada de Fourier y buscar una sola espiga. Eso le diría que el conjunto de datos se aproxima a una curva sinusoidal en esa frecuencia.
que desafortunadamente solo funciona si la onda sinusoidal tiene exactamente la misma frecuencia que un fft-bin. Si está en algún lugar entre los contenedores, obtienes un espectro completamente diferente. –
Obtendrá un único pico prominente sin importar la frecuencia. La pregunta no pregunta para determinar la frecuencia; solo para determinar si es un seno o no. – endolith
- 1. dibujando onda sinusoidal usando opencv
- 2. Dibujar una onda sinusoidal móvil suavizada
- 3. Crear onda sinusoidal o cuadrada en C#
- 4. NAudio tocando una onda sinusoidal durante x milisegundos usando C#
- 5. Generación de sonido de onda sinusoidal en Python
- 6. Ruido en el fondo al generar onda sinusoidal en Java
- 7. onda sinusoidal que ralentiza lentamente la frecuencia de f1 a f2 durante un tiempo determinado
- 8. ¿Cómo determinar si algo es miembro de un conjunto ordenado?
- 9. Valores promedio de un conjunto de datos de punto a un conjunto de datos de cuadrícula
- 10. Cómo determinar si una dirección IP pertenece a un país
- 11. determinar si una cadena contiene cualquiera de un conjunto de cadenas
- 12. ¿Cómo se aproxima "Quiso decir?" sin usar Google?
- 13. Cómo determinar si una excepción es de un tipo particular
- 14. Determinar si un UIViewController se presenta de manera modal
- 15. ¿Cómo determinar si una ruta es un subdirectorio de otra?
- 16. Determinar si se ha producido un cambio de día
- 17. Determinar si se redirige stdout para un proceso de Python
- 18. ¿Cómo puedo determinar si se muestra un botón de retroceso?
- 19. clases de ajuste sinusoidal para C#
- 20. ¿Cómo puedo determinar si se lanza una IOException debido a una infracción de uso compartido?
- 21. Detecta una frecuencia/tono específico a partir de datos de onda sin procesar
- 22. Determinar si el contenido de un elemento HTML se desborda
- 23. En CakePHP, ¿cómo se puede determinar si un campo se cambió en una acción de edición?
- 24. Python: determinar si un objeto es similar a un archivo
- 25. ¿Cómo determinar si se está manejando una excepción .NET?
- 26. ¿Cómo detectar si un conjunto de conjuntos contiene otro conjunto?
- 27. ¿Cómo puedo determinar si se difiere un objeto jQuery?
- 28. Cómo determinar rápidamente si un método se reemplaza en Java
- 29. Cómo determinar si una aplicación web se está ejecutando actualmente
- 30. ¿Cómo puedo determinar si se gestiona un proceso en C#?
Estoy bastante seguro de que, dado * cualquier * * finito * conjunto de datos (con distintos valores X), puede encontrar una onda senoidal que se ajuste exactamente, si no pone algún tipo de restricciones en la frecuencia (a medida que aumenta la frecuencia, la onda sinusoide se aproxima a una curva de llenado de espacio). – AakashM
Esa es la definición de la transformada de Fourier continua. En la práctica, solo puede tomar la transformada discreta de Fourier, y estará limitado a las frecuencias finitas (ya que la expansión de la integral de Fourier pasa al infinito en el caso continuo). La mayoría de las funciones "curvas" se pueden ajustar muy bien utilizando la transformada de Fourier, pero las funciones "rectangulares" siempre tendrán distorsión en los bordes, incluso cuando la expansión se prolonga durante un tiempo prolongado. (Las líneas verticales son similares al delta Dirac, que es 1 para TODAS las frecuencias). – CookieOfFortune
La mejor manera dependerá de cómo espere que los datos se aparten de la sinuosidad. Ruido aleatorio? ¿Forma de onda distorsionada (por ejemplo, picos triangulares o recortados)? Una suma de varios senos vs. un seno puro? – DarenW