from mathutils import estimate_peak_indexes, fit_gaussians, create_fit_point_list, Gaussian from mathutils import fit_polynomial,fit_gaussian, fit_harmonic, calculate_peaks from mathutils import PolynomialFunction, Gaussian, HarmonicOscillator, LaguerreSolver import math def hfit(ydata, xdata = None): if xdata is None: xdata = frange(0, len(ydata), 1) max_y= max(ydata) index_max = ydata.index(max_y) max_x= xdata[index_max] start,end = min(xdata), max(xdata) (amplitude, angular_frequency, phase) = fit_harmonic(ydata, xdata) fitted_harmonic_function = HarmonicOscillator(amplitude, angular_frequency, phase) print "amplitude = ", amplitude print "angular frequency = ", angular_frequency print "phase = ", phase f = angular_frequency/ (2* math.pi) print "frequency = ", f resolution = 0.01 fit_y = [] for x in frange(start,end,resolution, True): fit_y.append(fitted_harmonic_function.value(x)) fit_x = frange(start, end+resolution, resolution) p = plot(ydata,"data", xdata, title="HFit")[0] p.addSeries(LinePlotSeries("fit")) p.getSeries(1).setData(fit_x, fit_y) #m = (phase + math.pi)/ angular_frequency m = -phase / angular_frequency if (m