43 lines
1.3 KiB
Python
Executable File
43 lines
1.3 KiB
Python
Executable File
from mathutils import *
|
|
from plotutils import *
|
|
|
|
if is_ui():
|
|
start = 0.0
|
|
end = 360.0
|
|
step = 10.0
|
|
plt = plot(None, title="Harmonic Fit")[0]
|
|
|
|
#Plot setup
|
|
plt.clear()
|
|
plt.removeMarker(None)
|
|
plt.addSeries(LinePlotSeries("data", color = Color.RED))
|
|
plt.setLegendVisible(True)
|
|
plt.getAxis(plt.AxisId.X).setRange(start, end)
|
|
|
|
#Creating an averager of the BPM
|
|
avg = create_averager(bpm_x, 3, 0.100)
|
|
|
|
#The scan command
|
|
def after(rec, scan):
|
|
plt.getSeries(0).appendData(rec.positions[0], rec.values[0].mean)
|
|
|
|
r = lscan(phase, [avg], start, end, step, latency=0.2, after_read=after)
|
|
|
|
#Fitting
|
|
rf_phase = r.getPositions(0)
|
|
energy = [val.mean for val in r.getReadable(0)]
|
|
(fit_ampl, fit_freq, fit_phase) = fit_harmonic(energy, rf_phase)
|
|
ph_crest = round(-fit_phase / fit_freq, 3)
|
|
function = HarmonicOscillator(fit_ampl, fit_freq, fit_phase)
|
|
x = frange(min(rf_phase), max(rf_phase), 4.0, True, True)
|
|
plot_function(plt, function, "fit", x, show_points=False, color=Color.BLUE)
|
|
plt.addMarker(ph_crest, None, "ph_crest="+str(ph_crest), Color.MAGENTA)
|
|
|
|
#Return values
|
|
print "ph_crest = ", ph_crest
|
|
phase.write(ph_crest)
|
|
phase_offset = round(90.0 - ph_crest, 3)
|
|
amplitude_scale = round(fit_ampl / amplitude.read(), 3)
|
|
power_scale = round(power.read() / math.pow(fit_ampl,2), 3)
|
|
set_return([phase_offset, amplitude_scale,power_scale ])
|