Implement the Zoom FFT of the mixer approach in Python!

Zoom FFT

Zoom FFT was used to analyze a frequency subband. The idea behind zoom FFT is to retain the same resolution, which could be achieved with a full-size FFT on the original signal, by computing a small-size FFT on a down-sampled shorter signal. Thus, the FFT efficient could be improved while maintaining the same resolution.

This is intuitive: for a decimation factor of , the new sampling rate is , and the new frame size (and FFT length) is , so the resolution of the decimated signal is .

Implementation

The Mixer Approach

See Zoom FFT: The popular mixer Zoom FFT method consists of first shifting the band of interest down to DC using a mixer, and then performing lowpass filtering and decimation by a factor of BWFactor (using an efficient polyphase FIR decimation structure).

Note: For short signal, the polyphase FIR designing is tricky, sometimes it will distort the spectrum, as in the Matlab example, the transient filtering effects were eliminated by repeating 10 times of filtering. So the conventional Fourier resampling method is recommended here.

Python Codes

Import modules

Generate signal

Plot the original FFT

Zoom FFT using mixer approach

Result

The following result is the same as in Zoom FFT, but much faster.