2009-06-14 6 views
8

¿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

+1

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

+0

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

+0

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

Respuesta

16

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.

+0

Sinussen - sini? –

+0

Plural parece ser sinusal también ... Ese es el problema cuando no se escribe en la lengua materna. Sinai entonces :)? –

+3

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

0

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.

+3

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

0

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.

+0

∫ (a · sin (k · t + m) + b) dt = (-a/k) · cos (k · t + m) + b · t + C –

+0

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

7

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.

+0

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. –

+1

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

Cuestiones relacionadas