This commit is contained in:
sfop
2017-05-17 08:52:23 +02:00
parent ee6689d661
commit e0cb8c5abe
11 changed files with 112 additions and 19 deletions

23
script/CPython/hfitoff.py Normal file
View File

@@ -0,0 +1,23 @@
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 = 2 ** 0.5 * np.std(data)
guess_phase = 0
guess_offset = np.mean(data)
xrad = xdeg / 180 * np.pi
optimize_func = lambda x: x[0] * np.sin(xrad + x[1]) + x[2] - data
fit_amplitude, fit_phase, fit_offset = leastsq(optimize_func, [guess_amplitude, guess_phase, guess_offset])[0]
fit_xdeg = np.linspace(start, end, 100)
fit_data = fit_amplitude * np.sin(fit_xdeg / 180 * np.pi + fit_phase) + fit_offset
ph_crest = 90 - fit_phase / np.pi * 180
xdeg_max = xdeg[np.argmax(data)]
if start <= ph_crest <= end:
return (fit_amplitude, fit_phase, fit_offset, True, ph_crest, fit_xdeg, fit_data)
else:
return (fit_amplitude, fit_phase, fit_offset, False, xdeg_max, fit_xdeg, fit_data)