Overview
NumPy's fft module provides routines for computing Discrete Fourier Transforms (DFT). It is widely used for signal processing, image frequency analysis, and solving differential equations in the frequency domain.
When to Use
- Analyzing the frequency components of a time-series signal.
- Applying low-pass or high-pass filters to digital signals.
- Accelerating convolutions by performing them in the frequency domain.
- Visualizing centered frequency spectra in 2D image processing.
Decision Tree
- Is your input purely real?
- Use
np.fft.rfftfor better efficiency and halved output size.
- Use
- Do you want the 0Hz component in the center of the plot?
- Use
np.fft.fftshifton the transform result.
- Use
- Performance is slow?
- Zero-pad input to a power of 2 (e.g., 256, 1024).
Workflows
-
Frequency Domain Analysis
- Take a real-valued signal 'a'.
- Compute the positive frequencies using
np.fft.rfft(a). - Generate matching frequency bins with
np.fft.rfftfreq(len(a)). - Plot the magnitude spectrum using
np.abs(spectrum).
-
FFT-Based Signal Filtering
- Transform the signal into the frequency domain with
np.fft.fft. - Zero out specific frequency components in the complex spectrum.
- Transform back to the time domain using
np.fft.ifftand take the real part.
- Transform the signal into the frequency domain with
-
Visualizing Centered Spectra
- Compute a 2D FFT of an image using
np.fft.fft2. - Apply
np.fft.fftshiftto move the low-frequency components to the image center. - Visualize the log-magnitude of the shifted spectrum.
- Compute a 2D FFT of an image using
Non-Obvious Insights
- Real Symmetry:
rfftis faster because real-input transforms are Hermitian (symmetric); it skips redundant computations. - Precision Upcasting: NumPy FFT routines automatically upcast
float32tofloat64andcomplex64tocomplex128. - Optimal Sizes: Algorithms are most efficient when the signal length $n$ is a power of 2.
Evidence
- "When the input is purely real... The family of rfft functions is designed to operate on real inputs, and exploits this symmetry by computing only the positive frequency components." Source
- "The routine np.fft.fftshift(A) shifts transforms and their frequencies to put the zero-frequency components in the middle." Source
Scripts
scripts/numpy-fft_tool.py: Routines for spectral analysis and rfft frequency mapping.scripts/numpy-fft_tool.js: Simulated complex magnitude logic.
Dependencies
numpy(Python)