def GetFr(sweepdata_folder, sweepdata_file, IQCalibrationfile, IQReffolder, IQReffilename): ### Read IQ Sweep data freq, I, Q = reader.ReadSweep(sweepdata_folder, sweepdata_file) ### Get IQ Mixer calibration data for sweep data frequency paras = IQ.IQ_GetPara(IQCalibrationfile, int(round(freq[len(freq)/2]/1e6))) ### Calibrate IQ Sweep data I_mixercalibrated, Q_mixercalibrated = IQ.IQ_CorrtBarends(paras,I,Q) ### Normalize calibrated IQ Sweep data to IQ reference data ### Get complex IQ IQ_normalized = IQ.IQ_Normalize_Sweep(freq, I_mixercalibrated, Q_mixercalibrated, IQReffolder, IQReffilename) x_c, x_c_err, y_c, y_c_err, radius, radius_err, circle_fit_report, theta0, theta0_err, fr, fr_err, Qr, Qr_err, Qc, Qc_err, Qi, Qi_err, fit_report_phase = Fit_IQ_Sweep(freq, IQ_normalized) return int(round(fr))
noiselist_file = 'noiselist' noiselist = [] with open(data_folder + noiselist_file + '.txt', 'r') as f: for line in f: noiselist.append(line.replace("\n", "")) num = len(sweeplist) plt.figure(figsize=(18.5, 10.5)) for n in range(0, num): ### Get file name and resonance frequency sweepdata_file = sweeplist[n] noisedata_file = noiselist[n] resfreq = float(resfreqlist[n]) # Read data sweepfreq, sweepI, sweepQ = reader.ReadSweep(data_folder, sweepdata_file) fsample, number, noiseI, noiseQ = reader.ReadNoise(data_folder, noisedata_file) meastime = len(number) / float(fsample) # Get IQ Mixer calibration parameter resfreqinMHz = int(round(sweepfreq[len(sweepfreq) / 2] / 1e6)) paras = IQ.IQ_GetPara(IQCalibrationfile, resfreqinMHz) # Calibrate IQ data I_mixercalibrated, Q_mixercalibrated = IQ.IQ_CorrtBarends( paras, sweepI, sweepQ) noiseI_mixercalibrated, noiseQ_mixercalibrated = IQ.IQ_CorrtBarends( paras, noiseI, noiseQ) # Normalize calibrated IQ Sweep data to IQ reference data
folder = "../../../MeasurementResult/" filename = 'Sweep_5000MHz_IQMixerCalibrated' ### Get IQ measurement data data = [] with open(folder + filename + '.csv', 'r') as f: for line in f: data.append(map(str, line.split(','))) frequency = np.asarray([int(data[i][0]) for i in range(0, len(data))]) I = np.asarray([float(data[i][1]) for i in range(0, len(data))]) Q = np.asarray( [float(data[i][2].replace("\n", "")) for i in range(0, len(data))]) folder_sweep = "../../../MeasurementResult/" filename_sweep = 'Sweep_3868MHz' freq, Iraw, Qraw = reader.ReadSweep(folder_sweep, filename_sweep) interpolate_start = int(freq[0] / 1e6) - 2000 - 5 interpolate_end = int(freq[len(freq) - 1] / 1e6) - 2000 + 5 fI = interpolate.interp1d(frequency[interpolate_start:interpolate_end], I[interpolate_start:interpolate_end], kind='cubic') fQ = interpolate.interp1d(frequency[interpolate_start:interpolate_end], Q[interpolate_start:interpolate_end], kind='cubic') IQnormalized = (Iraw + 1j * Qraw) / (fI(freq / 1e6) + 1j * fQ(freq / 1e6)) #plt.plot(frequency[interpolate_start:interpolate_end], I[interpolate_start:interpolate_end], '.') #plt.plot(freq/1e6, fI(freq/1e6), '.')
import numpy as np import csv import matplotlib.pyplot as plt import IQMixer.IQCalib as IQ import Analyse_Fit_SingleKID as FitSingle import Analyse_PSD as PSD import FileReader as reader IQCorrectionfile = 'IQMixer_Calib/20160803_1M_BOX/EllipseFit_0dBm_2000MHz_8000MHz.csv' sweepdata_folder = "../../../MeasurementResult/20160814_Al_Noguchi/" sweepdata_file = 'Sweep_4579MHz' freq, I, Q = reader.ReadSweep(sweepdata_folder, sweepdata_file) paras = IQ.IQ_GetPara(IQCorrectionfile, int(round(freq[len(freq) / 2] / 1e6))) I_mixercalibrated, Q_mixercalibrated = IQ.IQ_CorrtBarends(paras, I, Q) #### CUT #### bandwidth = 1e6 freq, real, imag = reader.CutSweep(bandwidth, freq, I_mixercalibrated, Q_mixercalibrated) comp = np.asarray([real[i] + imag[i] * 1j for i in range(0, len(real))]) ### Fit ### tau = 45e-9 a, a_err, alpha, alpha_err, tau, tau_err, phi0, phi0_err, fr, fr_err, Qr, Qr_err, Qc, Qc_err, Qi = FitSingle.Fit_7parameterIQ1( freq, comp, tau) fitIQ1 = a * np.exp(1j * alpha) * np.exp( -2 * np.pi * 1j * freq * tau) * (1 - (Qr / Qc * np.exp(1j * phi0)) / (1 + 2 * 1j * Qr * (freq - fr) / fr)) comptilt = comp * np.exp(2 * np.pi * 1j * freq * tau) plt.axis('equal') plt.plot(I_mixercalibrated, Q_mixercalibrated, 'b')