Skip to content

garrettj403/CZT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

20e4042 · Dec 20, 2024
Dec 20, 2024
Dec 20, 2024
Oct 20, 2021
Oct 20, 2021
Oct 25, 2021
Mar 29, 2022
Nov 25, 2020
Oct 25, 2021
Dec 20, 2024
Oct 16, 2021
Feb 9, 2021
Oct 20, 2021
Dec 20, 2024

Repository files navigation

Chirp Z-Transform (CZT)

PyPI version ci flake8

From Wikipedia:

The chirp Z-transform (CZT) is a generalization of the discrete Fourier transform (DFT). While the DFT samples the Z plane at uniformly-spaced points along the unit circle, the chirp Z-transform samples along spiral arcs in the Z-plane, corresponding to straight lines in the S plane. The DFT, real DFT, and zoom DFT can be calculated as special cases of the CZT.

Getting Started

You can install the CZT package using pip:

# to install the latest release (from PyPI)
pip install czt

# to install the latest commit (from GitHub)
git clone https://github.com/garrettj403/CZT.git
cd CZT
pip install -e .

# to install dependencies for examples
pip install -e .[examples]

# to install dependencies for testing
pip install -e .[testing]

Example

Consider the following time-domain signal:

This is an exponentially decaying sine wave with some distortion from higher-order frequencies. We can convert this signal to the frequency-domain to investigate the frequency content using the Chirp Z-Transform (CZT):

Note that the CZT also allows us to calculate the frequency response over an arbitrary frequency range:

We can see that the signal has frequency components at 1 kHz, 2.5 kHz and 3.5 kHz. To remove the distortion and isolate the 1 kHz signal, we can apply a simple window in the frequency-domain:

Finally, we can use the Inverse Chirp Z-Transform (ICZT) to transform back to the time domain:

As we can see, we were able to remove the higher-order frequencies that were distorting our 1 kHz signal.

You can find this example and others in the examples/ directory.

References