def fit_rabi(xdata, ydata):
"""Analyze Rabi amplitude data to find pi-pulse amplitude and phase offset.
Arguments:
xdata: ndarray of calibration amplitudes. length should be even.
ydata: measurement amplitudes
Returns:
pi_amp: Fitted amplitude of pi pulsed
offset: Fitted mixer offset
fit_pts: Fitted points."""
#seed Rabi frequency from largest FFT component
N = len(ydata)
yfft = fft(ydata)
f_max_ind = np.argmax(np.abs(yfft[1:N//2]))
f_0 = 0.5 * max([1, f_max_ind]) / xdata[-1]
amp_0 = 0.5*(ydata.max() - ydata.min())
offset_0 = np.mean(ydata)
phase_0 = 0
if ydata[N//2 - 1] > offset_0:
amp_0 = -amp_0
popt, _ = curve_fit(rabi_model, xdata, ydata, [offset_0, amp_0, f_0, phase_0])
f_rabi = np.abs(popt[2])
pi_amp = 0.5/f_rabi
offset = popt[3]
return pi_amp, offset, popt
评论列表
文章目录