Fitting
In [ ]:
Copied!
import numpy as np
import qubex as qx
import numpy as np
import qubex as qx
In [ ]:
Copied!
t = np.linspace(0, 200, 20)
A = 1.0
f = 12.5e-3
phi = np.pi / 2
C = 0.5
noise = 0.1
data = qx.fit.func_cos(
t=t,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.plot(
x=t,
y=data,
title="Cosine data",
xlabel="Time (ns)",
ylabel="Amplitude",
)
result = qx.fit.fit_cosine(
t,
data,
xlabel="Time (ns)",
ylabel="Amplitude",
)
t = np.linspace(0, 200, 20)
A = 1.0
f = 12.5e-3
phi = np.pi / 2
C = 0.5
noise = 0.1
data = qx.fit.func_cos(
t=t,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.plot(
x=t,
y=data,
title="Cosine data",
xlabel="Time (ns)",
ylabel="Amplitude",
)
result = qx.fit.fit_cosine(
t,
data,
xlabel="Time (ns)",
ylabel="Amplitude",
)
In [ ]:
Copied!
t = np.linspace(0, 200, 20)
A = 1.0
f = 12.5e-3
phi = np.pi / 2
C = 0.5
tau = 100
noise = 0.1
data = qx.fit.func_damped_cos(
t=t,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
tau=tau,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.plot(
x=t,
y=data,
title="Cosine data",
xlabel="Time (ns)",
ylabel="Amplitude",
)
result = qx.fit.fit_cosine(
t,
data,
is_damped=True,
xlabel="Time (ns)",
ylabel="Amplitude",
)
t = np.linspace(0, 200, 20)
A = 1.0
f = 12.5e-3
phi = np.pi / 2
C = 0.5
tau = 100
noise = 0.1
data = qx.fit.func_damped_cos(
t=t,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
tau=tau,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.plot(
x=t,
y=data,
title="Cosine data",
xlabel="Time (ns)",
ylabel="Amplitude",
)
result = qx.fit.fit_cosine(
t,
data,
is_damped=True,
xlabel="Time (ns)",
ylabel="Amplitude",
)
In [ ]:
Copied!
t = np.linspace(0, 200, 20)
A = 1.0
C = 0.5
tau = 100
noise = 0.1
data = qx.fit.func_exp_decay(
t=t,
A=A,
C=C,
tau=tau,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.plot(
x=t,
y=data,
title="Exponential decay data",
xlabel="Time (ns)",
ylabel="Amplitude",
)
result = qx.fit.fit_exp_decay(
t,
data,
xlabel="Time (ns)",
ylabel="Amplitude",
xaxis_type="linear",
)
t = np.linspace(0, 200, 20)
A = 1.0
C = 0.5
tau = 100
noise = 0.1
data = qx.fit.func_exp_decay(
t=t,
A=A,
C=C,
tau=tau,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.plot(
x=t,
y=data,
title="Exponential decay data",
xlabel="Time (ns)",
ylabel="Amplitude",
)
result = qx.fit.fit_exp_decay(
t,
data,
xlabel="Time (ns)",
ylabel="Amplitude",
xaxis_type="linear",
)
In [ ]:
Copied!
f = np.linspace(7.0, 8.0, 100)
A = 1.0
f0 = 7.5
gamma = 0.1
C = -0.5
noise = 0.1
data = qx.fit.func_lorentzian(
f=f,
A=A,
f0=f0,
gamma=gamma,
C=C,
) + np.random.default_rng().normal(0, noise, len(f))
qx.viz.plot(
x=f,
y=data,
title="Lorentzian data",
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
result = qx.fit.fit_lorentzian(
f,
data,
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
f = np.linspace(7.0, 8.0, 100)
A = 1.0
f0 = 7.5
gamma = 0.1
C = -0.5
noise = 0.1
data = qx.fit.func_lorentzian(
f=f,
A=A,
f0=f0,
gamma=gamma,
C=C,
) + np.random.default_rng().normal(0, noise, len(f))
qx.viz.plot(
x=f,
y=data,
title="Lorentzian data",
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
result = qx.fit.fit_lorentzian(
f,
data,
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
In [ ]:
Copied!
f = np.linspace(7.0, 8.0, 100)
A = -1.0
f0 = 7.5
Omega = 0.1
C = -0.5
noise = 0.1
data = qx.fit.func_sqrt_lorentzian(
f=f,
A=A,
f0=f0,
Omega=Omega,
C=C,
) + np.random.default_rng().normal(0, noise, len(f))
qx.viz.plot(
x=f,
y=data,
title="Square root Lorentzian data",
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
result = qx.fit.fit_sqrt_lorentzian(
f,
data,
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
f = np.linspace(7.0, 8.0, 100)
A = -1.0
f0 = 7.5
Omega = 0.1
C = -0.5
noise = 0.1
data = qx.fit.func_sqrt_lorentzian(
f=f,
A=A,
f0=f0,
Omega=Omega,
C=C,
) + np.random.default_rng().normal(0, noise, len(f))
qx.viz.plot(
x=f,
y=data,
title="Square root Lorentzian data",
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
result = qx.fit.fit_sqrt_lorentzian(
f,
data,
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
In [ ]:
Copied!
t = np.linspace(0, 200, 20)
A = -1.0 + 0.5j
f = 12.5e-3
phi = 0.1
C = 0.5 + 0.5j
noise = 0.1
data = qx.fit.func_cos(
t=t,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.scatter_iq_data(data)
qx.viz.plot_waveform(data)
result = qx.fit.fit_rabi(
target="Q00",
times=t,
data=data,
)
t = np.linspace(0, 200, 20)
A = -1.0 + 0.5j
f = 12.5e-3
phi = 0.1
C = 0.5 + 0.5j
noise = 0.1
data = qx.fit.func_cos(
t=t,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.scatter_iq_data(data)
qx.viz.plot_waveform(data)
result = qx.fit.fit_rabi(
target="Q00",
times=t,
data=data,
)
In [ ]:
Copied!
t = np.linspace(0, 200, 20)
A = -1.0 + 0.5j
f = 12.5e-3
phi = 0.1
C = 0.5 + 0.5j
tau = 100
noise = 0.1
data = qx.fit.func_damped_cos(
t=t,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
tau=tau,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.scatter_iq_data(data)
qx.viz.plot_waveform(data)
result = qx.fit.fit_rabi(
target="Q00",
times=t,
data=data,
is_damped=True,
)
t = np.linspace(0, 200, 20)
A = -1.0 + 0.5j
f = 12.5e-3
phi = 0.1
C = 0.5 + 0.5j
tau = 100
noise = 0.1
data = qx.fit.func_damped_cos(
t=t,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
tau=tau,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.scatter_iq_data(data)
qx.viz.plot_waveform(data)
result = qx.fit.fit_rabi(
target="Q00",
times=t,
data=data,
is_damped=True,
)
In [ ]:
Copied!
f_control = np.linspace(7.0, 8.0, 20)
f_resonance = 7.5
f_rabi = 0.1
noise = 0.01
data = np.sqrt(
f_rabi**2 + (f_control - f_resonance) ** 2,
) + np.random.default_rng().normal(0, noise, len(f_control))
qx.viz.plot(
x=f_control,
y=data,
title="Detuned Rabi data",
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
result = qx.fit.fit_detuned_rabi(
target="Q00",
control_frequencies=f_control,
rabi_frequencies=data,
)
f_control = np.linspace(7.0, 8.0, 20)
f_resonance = 7.5
f_rabi = 0.1
noise = 0.01
data = np.sqrt(
f_rabi**2 + (f_control - f_resonance) ** 2,
) + np.random.default_rng().normal(0, noise, len(f_control))
qx.viz.plot(
x=f_control,
y=data,
title="Detuned Rabi data",
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
result = qx.fit.fit_detuned_rabi(
target="Q00",
control_frequencies=f_control,
rabi_frequencies=data,
)
In [ ]:
Copied!
t = np.linspace(0, 200, 50)
A = 1.0
f = 0.05
phi = np.pi / 2
C = 0.5
tau = 100
noise = 0.1
data = qx.fit.func_damped_cos(
t=t,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
tau=tau,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.plot(
x=t,
y=data,
title="Cosine data",
xlabel="Time (ns)",
ylabel="Amplitude",
)
result = qx.fit.fit_ramsey(
target="Q00",
times=t,
data=data,
xlabel="Time (ns)",
ylabel="Amplitude",
)
t = np.linspace(0, 200, 50)
A = 1.0
f = 0.05
phi = np.pi / 2
C = 0.5
tau = 100
noise = 0.1
data = qx.fit.func_damped_cos(
t=t,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
tau=tau,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.plot(
x=t,
y=data,
title="Cosine data",
xlabel="Time (ns)",
ylabel="Amplitude",
)
result = qx.fit.fit_ramsey(
target="Q00",
times=t,
data=data,
xlabel="Time (ns)",
ylabel="Amplitude",
)
In [ ]:
Copied!
n = np.arange(0, 1000, 100)
A = 1.0
p = 0.99
C = 0
noise = 0.1
data = A * p**n + C + np.random.default_rng().normal(0, noise, len(n))
qx.viz.plot(
x=n,
y=data,
title="Randomized benchmarking data",
xlabel="Number of Cliffords",
ylabel="Survival probability",
)
result = qx.fit.fit_rb(
target="Q00",
x=n,
y=data,
)
n = np.arange(0, 1000, 100)
A = 1.0
p = 0.99
C = 0
noise = 0.1
data = A * p**n + C + np.random.default_rng().normal(0, noise, len(n))
qx.viz.plot(
x=n,
y=data,
title="Randomized benchmarking data",
xlabel="Number of Cliffords",
ylabel="Survival probability",
)
result = qx.fit.fit_rb(
target="Q00",
x=n,
y=data,
)
In [ ]:
Copied!
amplitude_range = np.linspace(0.0, 1.0, 20)
A = 1.0
f = 1.0
phi = np.pi
C = 0.1
noise = 0.1
data = qx.fit.func_cos(
t=amplitude_range,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
) + np.random.default_rng().normal(0, noise, len(amplitude_range))
qx.viz.plot(
x=amplitude_range,
y=data,
title="Amplitude calibration data",
xlabel="Amplitude (arb. units)",
ylabel="Signal (arb. units)",
)
result = qx.fit.fit_ampl_calib_data(
target="Q00",
amplitude_range=amplitude_range,
data=data,
)
amplitude_range = np.linspace(0.0, 1.0, 20)
A = 1.0
f = 1.0
phi = np.pi
C = 0.1
noise = 0.1
data = qx.fit.func_cos(
t=amplitude_range,
A=A,
omega=2 * np.pi * f,
phi=phi,
C=C,
) + np.random.default_rng().normal(0, noise, len(amplitude_range))
qx.viz.plot(
x=amplitude_range,
y=data,
title="Amplitude calibration data",
xlabel="Amplitude (arb. units)",
ylabel="Signal (arb. units)",
)
result = qx.fit.fit_ampl_calib_data(
target="Q00",
amplitude_range=amplitude_range,
data=data,
)
In [ ]:
Copied!
f = np.linspace(7.0, 8.0, 100)
f_r = 7.5
kappa_ex = 0.1
kappa_in = 0.05
A = -1.0
tau = 0.0
phi = np.pi
noise = 0.1
data = (
qx.fit.func_resonator_reflection(
f=f,
f_r=f_r,
kappa_ex=kappa_ex,
kappa_in=kappa_in,
A=A,
tau=tau,
phi=phi,
)
+ np.random.default_rng().normal(0, noise, len(f))
+ 1j * np.random.default_rng().normal(0, noise, len(f))
)
qx.viz.plot(
x=f,
y=np.abs(data),
title="Resonance data",
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
qx.viz.plot_waveform(data)
result = qx.fit.fit_reflection_coefficient(
target="Q00",
freq_range=f,
data=data,
)
f = np.linspace(7.0, 8.0, 100)
f_r = 7.5
kappa_ex = 0.1
kappa_in = 0.05
A = -1.0
tau = 0.0
phi = np.pi
noise = 0.1
data = (
qx.fit.func_resonator_reflection(
f=f,
f_r=f_r,
kappa_ex=kappa_ex,
kappa_in=kappa_in,
A=A,
tau=tau,
phi=phi,
)
+ np.random.default_rng().normal(0, noise, len(f))
+ 1j * np.random.default_rng().normal(0, noise, len(f))
)
qx.viz.plot(
x=f,
y=np.abs(data),
title="Resonance data",
xlabel="Frequency (GHz)",
ylabel="Amplitude",
)
qx.viz.plot_waveform(data)
result = qx.fit.fit_reflection_coefficient(
target="Q00",
freq_range=f,
data=data,
)
In [ ]:
Copied!
import numpy as np
import qubex as qx
def delayed_cosine(t, t_start, A, f, offset):
"""Return a delayed cosine waveform."""
return np.where(
t < t_start,
A + offset,
A * np.cos(2 * np.pi * f * (t - t_start)) + offset,
)
t = np.arange(0, 1000, 2)
t0 = 160
A = 1.0
f = 0.01
C = 0.0
noise = 0.1
data = qx.fit.func_delayed_cos(
t,
t0=t0,
A=A,
omega=2 * np.pi * f,
C=C,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.plot(
x=t,
y=data,
title="Delayed cosine signal",
xlabel="Time (ns)",
ylabel="Signal (arb. units)",
)
result = qx.fit.fit_delayed_cosine(
t,
data,
xlabel="Time (ns)",
ylabel="Amplitude",
)
import numpy as np
import qubex as qx
def delayed_cosine(t, t_start, A, f, offset):
"""Return a delayed cosine waveform."""
return np.where(
t < t_start,
A + offset,
A * np.cos(2 * np.pi * f * (t - t_start)) + offset,
)
t = np.arange(0, 1000, 2)
t0 = 160
A = 1.0
f = 0.01
C = 0.0
noise = 0.1
data = qx.fit.func_delayed_cos(
t,
t0=t0,
A=A,
omega=2 * np.pi * f,
C=C,
) + np.random.default_rng().normal(0, noise, len(t))
qx.viz.plot(
x=t,
y=data,
title="Delayed cosine signal",
xlabel="Time (ns)",
ylabel="Signal (arb. units)",
)
result = qx.fit.fit_delayed_cosine(
t,
data,
xlabel="Time (ns)",
ylabel="Amplitude",
)