Time for action – fitting to a sine
In the Time for action – filtering a detrended signal section we created a simple filter for detrended data. Now let’s use a more restrictive filter that will leave us only with the main frequency component. We will fit a sinusoidal pattern to it and plot our results. This model has four parameters—amplitude, frequency, phase, and vertical offset. Perform the following steps to fit to a sine:
Define a
residuals
function based on a sine wave model.def residuals(p, y, x): A,k,theta,b = p err = y-A * np.sin(2* np.pi* k * x + theta) + b return err
Transform the filtered signal back to the original domain.
filtered = -fftpack.irfft(fftpack.ifftshift(amps))
Guess the values of the parameters for which we are trying to estimate a transformation from the time domain into the frequency domain.
N = len(qqq) f = np.linspace(-N/2, N/2, N) p0 = [filtered.max(), f[amps.argmax()]/(2*N), 0, 0] print “P0”, p0
The initial values would be shown as follows:
P0 [2...