idtpy
idtpy is a user-friendly Python package for Interdigital Transducers (IDTs).
Our goal is to simplify the design process by focusing in physical parameters (e.g. resonant frequency) and providing
simple modelling tools to predict the transducer response, both in the frequency and in the time domain.
idtpy further allows exporting easily the IDT design to a common CAD format, GDSII, thus it smoothly integrates with
standard fabrication processes.
Currently, the available IDT designs are:
- 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).
Cite
If you use idtpy in any scientific publication, please, cite it as XXX.
Installation
Requirements
You need a working Python installation to be able to use idtpy.
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.8
- NumPy -
conda install numpy - SciPy -
conda install scipy - Matplotlib -
pip install matplotliborconda install matplotlib - Gdspy -
pip install gdspyorconda install -c conda-forge gdspy
Linux / OS X / Windows
Option 1: Using pip
Simply open Anaconda prompt and type:
pip install idtpy
Option 2: From the source code
- Download the source from github
- Open Anaconda prompt
- Go to the directory of the
idtpyproject - Build/install by typing:
python setup.py install
Examples
More examples can be found in the folder 'examples'.
Create an IDT
from idtpy import designer
reg = designer.Regular(
freq=1, # resonant frequency
vsaw=1, # SAW speed
Np=10, # number of periods
w=30, # overlap width between opposite electrodes
l=20, # vertical length after the overlap
Nehp=1, # number of electrodes per half period. 1=single-finger, 2=double-finger...
tfact=1, # thickness factor
)
Preview it with matplotlib
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1)
reg.show(ax, color='k')
Make it double finger easily
reg = designer.Regular(
freq=1, # resonant frequency
vsaw=1, # SAW speed
Np=10, # number of periods
w=30, # overlap width between opposite electrodes
l=20, # vertical length after the overlap
Nehp=2, # number of electrodes per half period. 1=single-finger, 2=double-finger...
tfact=1, # thickness factor
)
Add dummy electrodes
dummies = reg.dummies(gap=5)
reg.show(ax, color='k')
dummies.show(ax, color='r')
Create a chirp IDT
chirp = designer.ExpChirp(
fmin=1, # minimum frequency
fmax=4, # maximum frequency
T=10, # IDT length in time
vsaw=1,
w=30,
l=20,
Nehp=2,
tfact=1,
)
Model the frequency response
import numpy as np
from idtpy import model
freq = 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).real
plt.plot(freq, f_res, 'k')
Predict the SAW shape with an input voltage
dt = 0.001
input_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).real
plt.plot(time, t_res, 'k')
Split52 design
split = designer.Split52(
freq=0.5,
vsaw=1,
Np=5,
w=30,
l=20,
tfact=1,
)
Dart design
dart = designer.Dart(
freq=1,
vsaw=1,
Np=10,
w=30,
l=20,
tfact=1,
direction='r',
)
Export to GDS
from idtpy import GdsAssistant
idt = 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
Release files for idtpy 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| idtpy-0.1.1.tar.gz | 16.6 kB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| idtpy-0.1.1-py3.8.egg | Legacy Egg format | - | - | Details |
| idtpy-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 67.4 kB
Release files / idtpy-0.1.1.tar.gz
| Download URL | idtpy-0.1.1.tar.gz |
|---|---|
| Size | 16.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
91c213511f25f8163ea47d45e002f89b08da86059c53ee27fec8d7efd1ab5012
|
|
BLAKE2b-256 checksum How to use checksums |
f303554429c296c92b0fad8dfe0fcf6bb2776735f64bf2ad33f935d889c0f434
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.0.1 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.11
|
Release files / idtpy-0.1.1-py3.8.egg
| Download URL | idtpy-0.1.1-py3.8.egg |
|---|---|
| Size | 35.9 kB |
| Tags | Egg |
|
SHA-256 checksum How to use checksums |
b8e93ea600481e8da613f9f56974f616feec9f8b18e6329881769d1a9810cb09
|
|
BLAKE2b-256 checksum How to use checksums |
25648cf57c6b219447c439337ab96fb666b4f363cf784a18bf1256cb8c02988d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.0.1 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.11
|
Release files / idtpy-0.1.1-py3-none-any.whl
| Download URL | idtpy-0.1.1-py3-none-any.whl |
|---|---|
| Size | 14.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9d4cada3d557c1afecc504791936a2cf19a42762c0064fd071ac719b3045aaa8
|
|
BLAKE2b-256 checksum How to use checksums |
d83fe35c654c5e83354c695efdc06d00b9f3b8245980fe1a5bc343e5c34c459f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.7.1 importlib_metadata/4.0.1 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.11
|