SMuRF Resonator Frequency Measurement
date | topic | link |
---|---|---|
4/26/21 | eta scans, firmware | |
4/27/21 | eta scans, firmware | |
4/28/21 | eta scans, tracking/flux ramp demodulation | |
4/29/21 | pilot tones | |
5/3/21 | polyphase filters, filter bank | |
5/5/21 | uMUX tracking, demodulation | |
5/6/21 | SMuRF tutorial | |
5/10/21 | Closed Loop Tracking Transfer Function uMUX simulator |
Here I'll generate an S21 curve. What eta params should we use?
close all clear Fdsp = 2.4e6; % can place resonator +/- Fdsp/2 fres = 300e3; fnorm = fres/Fdsp; z0 = 0.98*exp(1j*2*pi*fnorm); p0 = 0.95*exp(1j*2*pi*(fnorm+0.002)); b = [1, -z0]; a = [1, -p0]; fvtool([1, -z0], [1, -p0], 'Fs', Fdsp) theta = 0.5; % arbitrary phase offset, rad tau = 1e-9; % 1 ns delay % digital frequency -- -pi to pi maps to -Fs/2 to Fs/2 w = linspace(-pi, pi, 2^13); f = w*Fdsp/2/pi; % frequencies in Hz [s21, w] = freqz(b, a, w); % resonator S21 s21 = s21.*exp(-1j*theta); % apply arb phase offset s21 = s21.*exp(-1j*2*pi*f*tau); % apply time delay figure subplot(2,1,1) plot(f, 20*log10(abs(s21)), 'LineWidth', 2) title('Resonator Transfer Function', 'FontSize', 12) grid minor xlabel('Frequency', 'FontSize', 12) ylabel('Magnitude (dB)', 'FontSize', 12) subplot(2,1,2) plot(f, unwrap(angle(s21)), 'LineWidth', 2) grid minor xlabel('Frequency', 'FontSize', 12) ylabel('Phase (rad)', 'FontSize', 12) figure plot(real(s21(1:10:end)), imag(s21(1:10:end)), '.', 'LineWidth', 2) grid minor title('S_{21}', 'FontSize', 12) xlabel('Real S_{21}', 'FontSize', 12) ylabel('Imag S_{21}', 'FontSize', 12)
Here's my result
%% Here's the real test -- move the resonator and see how it responds apply_eta = @(x, eta_offset, eta) (x + eta_offset)*eta; % can place resonator +/- Fdsp/2 dfres = 1e3; % move the resonator from it's original frequency fres = 300e3 + dfres; fnorm = fres/Fdsp; z0 = 0.98*exp(1j*2*pi*fnorm); p0 = 0.95*exp(1j*2*pi*(fnorm+0.002)); b = [1, -z0]; a = [1, -p0]; [s21, w] = freqz(b, a, w); % resonator S21 s21 = s21.*exp(-1j*theta); % apply arb phase offset s21 = s21.*exp(-1j*2*pi*tau*f); % apply time delay s21_eta = apply_eta(s21, eta_offset, eta); % apply eta disp(['We moved the resonator ', num2str(dfres), 'Hz and measured ', num2str(round(imag(s21_eta(ftone)))), ' Hz error']) >> We moved the resonator 1000Hz and measured -984 Hz error
You may need to install vncviewer, or for windows use RealVNC
sudo apt-get install tigervnc-viewer
SSH to smurf-srv24
ssh -L 5902:localhost:5902 cryo@smurf-srv24.slac.stanford.edu
Launch VNC viewer
vncviewer localhost:5902
cryo@smurf-srv24:~$ cd /home/cryo/docker/smurf/dev_sw/slotN/v5.0.1 cryo@smurf-srv24:~/docker/smurf/dev_sw/slotN/v5.0.1$ ./run.sh -N 3; sleep 5; docker logs smurf_server_s3 -f
cryo@smurf-srv24:~$ cd docker/pysmurf/dev/v4.1.0/ cryo@smurf-srv24:~/docker/pysmurf/dev/v4.1.0$ ./run.sh cryo@smurf-srv24:/usr/local/src/pysmurf$ jupyter-notebook