In [1]:
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
import scipy as sy
import scipy.optimize as op
import scipy.signal as signal
import scipy.fftpack as fftpack
from scipy.signal import lombscargle as lb
%matplotlib inline

In [2]:
ls


Experimental data.ipynb
Program Recover IQ from pulsed data.ipynb
Simulation cavity qubit filter.ipynb
data/

In [3]:
cd data


/Users/rouxinol/Python/Manuscripts/CPW-Filter-qubit/data

In [4]:
data = np.loadtxt('manytraces.csv',dtype=np.int32 ,delimiter=',') # get data

In [5]:
# Initial parameters 
size = 1024 # size pulse
initial = 0 # plot head
final = 2*size # plot tail
head = size*0.2 # head fit 
tail = size*0.8 # tail fit

In [6]:
data2 = data[0,:]-128

In [6]:


In [7]:
Fs = 250e6                        # sampling rate
Ts = 1.0/Fs                      # sampling interval
# print(Ts)
A,B = np.hsplit(data2,2) # divide chA chB
# plt.plot(A)
# plt.plot(B)

# A.shape,B.shape,A[0],B[0]
signal = A[head:tail]
signalB = B[head:tail]
n = signal.size
time = Ts*np.arange(0,n)/1e-9
# plt.plot(time,signal)
# plt.plot(time,signalB)


# plt.xlabel('Time (ns)')
# plt.xlim(0,200)
FTT = np.fft.rfft(signal)
idx = np.argmax(np.abs(FTT))

freq = np.fft.rfftfreq(n,Ts)
freqmax = freq[idx]

Period = 1/freqmax
# print(freqmax/1e6,Period)
# plt.plot(freq,np.abs(FTT))
# plt.xlim(0,10e6)
DataPeriod = np.around(Period/Ts)
DataPeriod
# plt.plot(signal)
# plt.xlim(0,31)
C = np.roll(A,int(-DataPeriod/4))

# plt.plot(A,'k-')
# plt.plot(B,'r-')
# plt.plot(C,'g-')
# plt.xlim(0,200)

Sin = np.multiply(A,B)

Cos = np.multiply(C,B)
# i = 1
# C[i],B[i],C[i]*B[i],Cos[i]
# plt.plot(Sin[0:size],'ko')
# plt.plot(Cos[0:size],'ro')
# plt.xlim(0,500)

# Sin.shape
# Cos.shape
# plt.plot(Sin[0:size],'ko')
# plt.plot(Cos[0:size],'ro')
# Sin.shape[0]/size
SinA = np.asarray(np.hsplit(Sin,Sin.shape[0]/size),dtype=np.int32)
CosA = np.asarray(np.hsplit(Cos,Cos.shape[0]/size),dtype=np.int32)

I = np.mean([SinA[i][head:tail].mean() for i in range(int(Sin.shape[0]/size))])
Q = np.mean([CosA[i][head:tail].mean() for i in range(int(Sin.shape[0]/size))])
I,Q


Out[7]:
(81.527691315008369, 2542.761020876143)

In [7]:


In [7]:


In [7]:


In [7]:


In [7]:


In [7]:


In [7]:


In [7]:


In [8]:
def IQ(data2,Fs = 250e6,LC=0.2,HC=0.8):
    '''
    data: data
    Fs : sampling rate
    '''
    head = size*LC # head fit 
    tail = size*HC # tail fit                        
    Ts = 1.0/Fs                      # sampling interval
    # print(Ts)
    A,B = np.hsplit(data2,2) # divide chA chB
    # plt.plot(A)
    # plt.plot(B)

    # A.shape,B.shape,A[0],B[0]
    signal = A[head:tail]
    signalB = B[head:tail]
    n = signal.size
    time = Ts*np.arange(0,n)/1e-9
    # plt.plot(time,signal)
    # plt.plot(time,signalB)


    # plt.xlabel('Time (ns)')
    # plt.xlim(0,200)
    FTT = np.fft.rfft(signal)
    idx = np.argmax(np.abs(FTT))

    freq = np.fft.rfftfreq(n,Ts)
    freqmax = freq[idx]

    Period = 1/freqmax
    # print(freqmax/1e6,Period)
    # plt.plot(freq,np.abs(FTT))
    # plt.xlim(0,10e6)
    DataPeriod = np.around(Period/Ts)
#     DataPeriod
    # plt.plot(signal)
    # plt.xlim(0,31)
    C = np.roll(A,int(-DataPeriod/4))

    # plt.plot(A,'k-')
    # plt.plot(B,'r-')
    # plt.plot(C,'g-')
    # plt.xlim(0,200)

    Sin = np.multiply(A,B)

    Cos = np.multiply(C,B)
    # i = 1
    # C[i],B[i],C[i]*B[i],Cos[i]
    # plt.plot(Sin[0:size],'ko')
    # plt.plot(Cos[0:size],'ro')
    # plt.xlim(0,500)

    # Sin.shape
    # Cos.shape
    # plt.plot(Sin[0:size],'ko')
    # plt.plot(Cos[0:size],'ro')
    # Sin.shape[0]/size
    SinA = np.hsplit(Sin,Sin.shape[0]/size)
    CosA = np.hsplit(Cos,Cos.shape[0]/size)

    I = np.mean([SinA[i][head:tail].mean() for i in range(int(Sin.shape[0]/size))])
    Q = np.mean([CosA[i][head:tail].mean() for i in range(int(Sin.shape[0]/size))])
    return I,Q

In [9]:
%timeit IQ(data2)


10 loops, best of 3: 155 ms per loop

In [10]:
%load_ext cythonmagic

In [11]:
%reload_ext cythonmagic

In [12]:
%%cython_pyximport foo
def primes(int kmax):
    cdef int n, k, i
    cdef int p[1000]
    result = []
    if kmax > 1000:
        kmax = 1000
    k = 0
    n = 2
    while k < kmax:
        i = 0
        while i < k and n % p[i] != 0:
            i = i + 1
        if i == k:
            p[k] = n
            k = k + 1
            result.append(n)
        n = n + 1
    return result

In [13]:
%%cython
#--annotate
from __future__ import division
import numpy as np
cimport cython
cimport numpy as np
# DTYPE = np.int32
# ctypedef np.int32_t DTYPE_t
def Test(np.ndarray data2, double Fs ,double  LC, double HC, double size ):
    '''
    data: data
    Fs : sampling rate
    '''
#     assert data2.dtype == DTYPE_t 
    cdef double Ts
    cdef double head
    cdef double tail
    cdef np.ndarray signal 
#     cdef np.ndarray signalB
    cdef int n
    cdef np.ndarray time
    cdef np.ndarray FTT
    cdef int idx 
    cdef np.ndarray freq
    cdef double freqmax
    cdef double Period
    cdef int DataPeriod
    cdef np.ndarray C
    cdef np.ndarray Sin 
    cdef np.ndarray Cos 
    cdef np.ndarray SinA 
    cdef np.ndarray CosA    
    cdef double I
    cdef double Q
    cdef np.ndarray A
    cdef np.ndarray B
    
    
    A,B = np.hsplit(data2,2)
    
    
    head = size*LC # head fit 
    tail = size*HC # tail fit                        
    Ts = 1/Fs  
  
    
    signal = A[head:tail]
#     signalB = B[head:tail]
    n = signal.size
    time = Ts*np.arange(0,n)/1e-9
    
    
    FTT = np.fft.rfft(signal)
    idx = np.argmax(np.abs(FTT))

    freq = np.fft.rfftfreq(n,Ts)
    freqmax = freq[idx]

    Period = 1/freqmax
    
    
    
    DataPeriod = np.around(Period/Ts)
    
    C = np.roll(A,int(-DataPeriod/4))
    
    
    Sin = np.multiply(A,B)

    Cos = np.multiply(C,B)
    
    SinA = np.asarray(np.hsplit(Sin,Sin.shape[0]/size),dtype=np.int32)
    CosA = np.asarray(np.hsplit(Cos,Cos.shape[0]/size),dtype=np.int32)
    
    
    I = np.mean([SinA[i][head:tail].mean() for i in range(int(Sin.shape[0]/size))])
    Q = np.mean([CosA[i][head:tail].mean() for i in range(int(Sin.shape[0]/size))])
    
    return I,Q

In [14]:
%timeit Test(data2,250e6,.2,.8,1024)


10 loops, best of 3: 135 ms per loop

In [15]:
%%cython
#--annotate
from __future__ import division
import numpy as np
cimport cython
cimport numpy as np
DTYPE = np.int32
ctypedef np.int32_t DTYPE_t
np.import_array()
def Test2(np.ndarray[DTYPE_t, ndim=1] data2, double Fs ,double  LC, double HC, double size ):
    '''
    data: data
    '''
    cdef np.ndarray[DTYPE_t, ndim=1] A
    cdef np.ndarray[DTYPE_t, ndim=1] B
    cdef double Ts
    cdef double head
    cdef double tail
    cdef np.ndarray[DTYPE_t, ndim=1] signal 
# #     cdef np.ndarray signalB
    cdef int n
    cdef np.ndarray time
    cdef np.ndarray FTT
    cdef int idx 
    cdef np.ndarray freq
    cdef double freqmax
    cdef double Period
    cdef int DataPeriod
    cdef np.ndarray[DTYPE_t, ndim=1] C
    cdef np.ndarray[DTYPE_t, ndim=1] Sin 
    cdef np.ndarray[DTYPE_t, ndim=1] Cos 
    cdef np.ndarray[DTYPE_t, ndim=1] SinA 
    cdef np.ndarray[DTYPE_t, ndim=1] CosA    
    cdef double I
    cdef double Q
    
    
    A,B = np.hsplit(data2,2)
    head = size*LC # head fit 
    tail = size*HC # tail fit                        
    Ts = 1/Fs  

    signal = A[head:tail]  
    
    n = signal.size
    time = Ts*np.arange(0,n)/1e-9
    FTT = np.fft.rfft(signal)
    idx = np.argmax(np.abs(FTT))
    
    freq = np.fft.rfftfreq(n,Ts)
    freqmax = freq[idx]
    
    Period = 1/freqmax
    DataPeriod = np.around(Period/Ts)
    
    C = np.roll(A,int(-DataPeriod/4))
    

    
    Sin = np.multiply(A,B)
    Cos = np.multiply(C,B)
    
    SinA = np.asarray(np.hsplit(Sin,Sin.shape[0]/size)[0],dtype=np.int32)
    CosA = np.asarray(np.hsplit(Cos,Cos.shape[0]/size)[0],dtype=np.int32)
    
    I = SinA.mean()
    Q = CosA.mean()
    
    return I,Q

In [18]:
%timeit
Test2(data2,250e6,.2,.8,1024)


Out[18]:
(67.0693359375, 2197.0234375)

In [ ]: