Fits y(x) = A + B sin(Cx + D) using the FFT.
SINFIT(series)
(fit, coef) = SINFIT(series)
series |
- |
A series or array. |
A series, the fitted sine curve.
(fit, coef) = sinfit(series)
returns both the fit and the coefficients as a series.
W1: 5 + 3 * gsin(100, .01, 4, pi) + gnorm(100, .01)
W2: sinfit(w1);overp(W1, lred)
overplots the original data with the calculated sine fit.
(fit, coef) = sinfit(W1)
fit is the same series as in W2
coef == {5.0034, 3.0299, 25.0144, 3.0835}
Note: since C == coef[3] == 2*pi*F, in this case, F = 25.0144 / (2π) = 3.9812
SINFIT uses the FFT to find the dominant frequency present in the series and fits the following equation:
The input series is multiplied with a HANNING window and Hanning window interpolation is performed in the frequency domain to estimate the frequency, magnitude and phase of the sine. The Hanning window interpolation scheme handles estimated frequencies that do not precisely correspond to FFT frequency bin values.
The frequency term, C == coef[3] and phase term, D == coef[4], are in radians.
See SINFIT3 for a similar routine that uses rectangular window interpolation and returns the frequency coefficient in Hertz.
See SINTREND to perform a sine fit with a linear trend as per the following equation: