Skip to main content

Simple Python package for the design and modelling of Interdigital Transducers (IDTs).

Project description

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 matplotlib or conda install matplotlib
  • Gdspy - pip install gdspy or conda 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

  1. Download the source from github
  2. Open Anaconda prompt
  3. Go to the directory of the idtpy project
  4. 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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

idtpy-0.1.1.tar.gz (16.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

idtpy-0.1.1-py3.8.egg (35.9 kB view details)

Uploaded Egg

idtpy-0.1.1-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file idtpy-0.1.1.tar.gz.

File metadata

  • Download URL: idtpy-0.1.1.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using 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

File hashes

Hashes for idtpy-0.1.1.tar.gz
Algorithm Hash digest
SHA256 91c213511f25f8163ea47d45e002f89b08da86059c53ee27fec8d7efd1ab5012
MD5 a82f7904a46640a61f8639ea615ef2b0
BLAKE2b-256 f303554429c296c92b0fad8dfe0fcf6bb2776735f64bf2ad33f935d889c0f434

See more details on using hashes here.

File details

Details for the file idtpy-0.1.1-py3.8.egg.

File metadata

  • Download URL: idtpy-0.1.1-py3.8.egg
  • Upload date:
  • Size: 35.9 kB
  • Tags: Egg
  • Uploaded using 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

File hashes

Hashes for idtpy-0.1.1-py3.8.egg
Algorithm Hash digest
SHA256 b8e93ea600481e8da613f9f56974f616feec9f8b18e6329881769d1a9810cb09
MD5 28e2736a7aa8d3c2e04278cbf4284808
BLAKE2b-256 25648cf57c6b219447c439337ab96fb666b4f363cf784a18bf1256cb8c02988d

See more details on using hashes here.

File details

Details for the file idtpy-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: idtpy-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 14.9 kB
  • Tags: Python 3
  • Uploaded using 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

File hashes

Hashes for idtpy-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9d4cada3d557c1afecc504791936a2cf19a42762c0064fd071ac719b3045aaa8
MD5 dbf9f605d7f6797c0c4e8eca268d22f3
BLAKE2b-256 d83fe35c654c5e83354c695efdc06d00b9f3b8245980fe1a5bc343e5c34c459f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page