Tengo datos que creo que es sinusoidal, pero no tengo una integral
número de períodos. ¿Cómo puedo encontrar el "mejor ajuste" Sin/Cos
función,
compensación por esto, y por el feo constante que aparece? EJEMPLO:
-
Aquí hay algunos datos que sigue un patrón sinusoidal (Mathematica formato)
t4 = N[Table[Sin[3.17*2*Pi*x/200], {x,1,200}]];
Ahora, con sólo
t4
, quiero volver aSin[3.17*2*Pi*x/200]
o el equivalente.Tenga en cuenta que
Mean[t4]
es distinto de cero (se trata de0.0281886
). El los análisis que he probado hasta ahora "sacar" esto significa (como "0.0281886 + ...
"). Esto es malo porque es raro voy a volver a mi forma original con esa constante sacó.-
El uso de j0ker5 excelente técnica de http://stackoverflow.com/questions/4463481/continuous-fourier-transform-on-discrete-data-using-mathematica puedo compensar la no integral período y obtener:
0.0281886 + 0.983639 Cos[1.49867 - 0.0992743 x]
Tenga en cuenta que el x
plazo es 3.16*2*Pi*x/200
, muy cerca de mi original.
- He modificado j0ker5 la técnica ligeramente. La función real que he utilizado para conseguir lo anterior:
superfourier2[data_] :=Module[
{pdata, n, f, pos, fr, frpos, freq, phase, coeff},
pdata = data;
n = Length[data];
f = Abs[Fourier[pdata]];
pos = Ordering[-f, 1][[1]] - 1;
fr = Abs[Fourier[pdata*Exp[2*PiIposRange[0,n-1]/n],
FourierParameters -> {0, 2/n}]];
frpos = Ordering[-fr, 1][[1]];
freq = (pos + 2(frpos - 1)/n);
phase = Sum[Exp[freq*2*PiIx/n]*pdata[[x]], {x,1,n}];
coeff = N[{Mean[data], 2*Abs[phase]/n, freq*2*Pi/n, Arg[phase]}];
Function[x, Evaluate[coeff[[1]] + coeff[[2]]*Cos[coeff[[3]]*x - coeff[[4]]]]]
]
Además de la mala término constante, tenga en cuenta que la adición de "
0.983639*Cos[1.49867 - 0.0992743 x]
" parax=1..200
rendimientos0.0279175*200
, que estoy convencido de que hace las cosas peor, no mejor.Creo que el
0.0279175*200
suma desde el coseno y la200*0.0281886
de la media de alguna manera se puede "cancelar" para ceder parte de atrás de mi puraSin[]
función.
Los pensamientos?