Package: idtpy
idtpyidtpyis a user-friendly Python package forInterdigital Transducers (IDTs).
Our goal is tosimplify the design processby focusing in physical parameters (e.g. resonant frequency) and providingsimple modelling toolsto predict the transducer response, both in the frequency and in the time domain.idtpyfurther allowsexporting easily the IDT designto a common CAD format, GDSII, thus it smoothly integrates with
standard fabrication processes.Currently, theavailable IDT designsare:Regular IDT: standard and uniform design.Exponential Chirp IDT: non-uniform design. See Junliang Wang et al. XXX (2022)Linear Chirp IDT: non-uniform design. See Junliang Wang et al. XXX (2022)Split52 IDT: generation of higher harmonics. See Florian Schulein et al. Nature Nanotechnology (2015)Dart IDT: unidirectional SAW emission. See Etienne Dumur et al. Applied Physics Letters (2019)What is an Interdigital Transducer (IDT)?IDTs are widely used in telecommunication industries as filters or delay lines, and recently also found its applications
in quantum technologies.
It is composed by surface metallic electrodes deposited on a piezoelectric substrate.
Applying an oscillating input signal, a surface acoustic wave (SAW) is generated thanks to the piezoelectric coupling.
The properties of this emitted SAW is determined by the design of the electrodes.
Changing the unit cell pattern allows for instance extension in the frequency band response (chirp IDT),
unidirectional emission (Dart IDT) or generation of higher harmonics (Split 52 IDT).CiteIf you useidtpyin any scientific publication, please, cite it as XXX.InstallationRequirementsYou need a working Python installation to be able to useidtpy.
We highly recommend installing Anaconda which takes care of installing Python and managing packages.
Make sure to download Python 3.8 or later.Dependencies:Python- tested with 3.8NumPy-conda install numpySciPy-conda install scipyMatplotlib-pip install matplotliborconda install matplotlibGdspy-pip install gdspyorconda install -c conda-forge gdspyLinux / OS X / WindowsOption 1: UsingpipSimply open Anaconda prompt and type:pipinstallidtpyOption 2: From the source codeDownload the source fromgithubOpen Anaconda promptGo to the directory of theidtpyprojectBuild/install by typing:pythonsetup.pyinstallExamplesMore examples can be found in the folder'examples'.Create an IDTfromidtpyimportdesignerreg=designer.Regular(freq=1,# resonant frequencyvsaw=1,# SAW speedNp=10,# number of periodsw=30,# overlap width between opposite electrodesl=20,# vertical length after the overlapNehp=1,# number of electrodes per half period. 1=single-finger, 2=double-finger...tfact=1,# thickness factor)Preview it with matplotlibimportmatplotlib.pyplotaspltfig,ax=plt.subplots(1)reg.show(ax,color='k')Make it double finger easilyreg=designer.Regular(freq=1,# resonant frequencyvsaw=1,# SAW speedNp=10,# number of periodsw=30,# overlap width between opposite electrodesl=20,# vertical length after the overlapNehp=2,# number of electrodes per half period. 1=single-finger, 2=double-finger...tfact=1,# thickness factor)Add dummy electrodesdummies=reg.dummies(gap=5)reg.show(ax,color='k')dummies.show(ax,color='r')Create a chirp IDTchirp=designer.ExpChirp(fmin=1,# minimum frequencyfmax=4,# maximum frequencyT=10,# IDT length in timevsaw=1,w=30,l=20,Nehp=2,tfact=1,)Model the frequency responseimportnumpyasnpfromidtpyimportmodelfreq=np.arange(1,6,0.001)idt=model.ExpChirp(fmin=2,fmax=5,T=40,phi0=0,t0=0)f_res=idt.freq_response(freq,apodized=False,db=True,shp=1).realplt.plot(freq,f_res,'k')Predict the SAW shape with an input voltagedt=0.001input_signal=model.ExpChirp(fmin=2,fmax=5,T=40)ideal_wf=idt.apply_waveform(input_signal,dt)time=np.arange(0,80,dt)t_res=ideal_wf.time_response(time).realplt.plot(time,t_res,'k')Split52 designsplit=designer.Split52(freq=0.5,vsaw=1,Np=5,w=30,l=20,tfact=1,)Dart designdart=designer.Dart(freq=1,vsaw=1,Np=10,w=30,l=20,tfact=1,direction='r',)Export to GDSfromidtpyimportGdsAssistantidt=designer.Regular(freq=2.77,vsaw=2.77,Np=40,w=30,l=50,Nehp=2,tfact=[0.8,0.64,20])gds=GdsAssistant('library')top=gds.new_cell('top')top.add(gds.get_gds_polygons(idt,layer=0))gds.save('idt.gds')Version 0.1.0 (December 16th, 2021)Initial release