22 lines
831 B
Python
22 lines
831 B
Python
import numpy as np
|
|
from scipy.optimize import leastsq
|
|
|
|
def hfitoff(data, xdeg):
|
|
"""
|
|
Harmonic fit with offset
|
|
"""
|
|
start, end = min(xdeg), max(xdeg)
|
|
guess_amplitude = 4 * np.std(data)
|
|
guess_phase = 0
|
|
guess_offset = np.mean(data)
|
|
optimize_func = lambda x: x[0] * np.sin((xdeg + x[1]) * np.pi / 180) + x[2] - data
|
|
fit_amplitude, fit_phase, fit_offset = leastsq(optimize_func, [guess_amplitude, guess_phase, guess_offset])[0]
|
|
if fit_amplitude < 0:
|
|
fit_amplitude = -fit_amplitude
|
|
fit_phase = fit_phase + 180
|
|
fit_xdeg = np.linspace(start, end, 100)
|
|
fit_data = fit_amplitude * np.sin((fit_xdeg + fit_phase) * np.pi / 180) + fit_offset
|
|
ph_crest = 90 - fit_phase
|
|
ph_crest = ph_crest % 360
|
|
return (fit_amplitude, fit_phase, fit_offset, ph_crest, fit_xdeg, fit_data)
|