Book Image

NumPy: Beginner's Guide

By : Ivan Idris
Book Image

NumPy: Beginner's Guide

By: Ivan Idris

Overview of this book

Table of Contents (21 chapters)
NumPy Beginner's Guide Third Edition
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface
NumPy Functions' References
Index

Time for action – fitting to a sine


In the previous Time for action 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.

  1. 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
  2. Transform the filtered signal back to the original domain:

    filtered = -fftpack.irfft(fftpack.ifftshift(amps))
  3. Guess the values of the parameters of 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 appear as follows:

    P0 [2.6679532410065212, 0.00099598469163686377, 0, 0]
    
  4. Call the leastsq()function:

    plsq...