SciPy - ifftshift() Function



The ifftshift method in SciPy is used to undo the effect of fftshift. The zero-frequency component shifts back to the start of the spectrum by using ifftshift() method.

This method is especially used when executing inverse FFT to rebuild original signals or images, after shifting the frequency components to the center for visualize and analysis using fftshift method. This is necessary because the IFFT expects the zero-frequency at the beginning of the spectrum for proper signal reconstruction.

Using ifftshift we restore the orginal-frequency so that IFFT works properly. This is essential for accurate signal or image recovery after shifting for analysis.

Syntax

Following is the syntax of the SciPy method −

.ifftshift(x, axes=None)

Parameters

Following is the parameters of ifftshift() method

  • x (array_like) The input array.

  • axes (optional) The axes along which the shift is performed. By default, it shifts along all axes.

Return Value

Returns a new array with the zero-frequency component shifted back to the beginning.

Example 1: Reversing Frequency Shift

This example demonstrates the use of ifftshift() method to get the original alignment of frequencies after applying fftshift() method for visualization. Following is the code −

import numpy as np

arr = np.fft.fftfreq(8, 0.5) 
shifted_freq = np.fft.fftshift(arr) 
print("Shifted Frequencies:", shifted_freq)
unshifted_freq = np.fft.ifftshift(shifted_freq)
print("\nReversed Shifted Frequencies:", unshifted_freq)

Following is an output of the above code −

Shifted Frequencies: [-1.   -0.75 -0.5  -0.25  0.    0.25  0.5   0.75]
Reversed Shifted Frequencies: [ 0.    0.25  0.5   0.75 -1.   -0.75 -0.5  -0.25]

Example 2: Reversing Frequencies for 2D Array

In the below example we will see how to use ifftshift() method to get the original alignment of 2D array after using fftshift() method. Following is the code −

import numpy as np

arr_1d= np.arange(12)
data= arr_1d.reshape(3,4)
print("Original 2D Frequencies:\n", data)
shifted_freqs = np.fft.fftshift(data)
print("\nShifted 2D Frequencies:\n",shifted_freqs)
reversed_freqs = np.fft.ifftshift(shifted_freqs)
print("\nReversed freq (after ifftshift):\n ",reversed_freqs)

Output of the above code is as follows

Original 2D Frequencies:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

Shifted 2D Frequencies:
 [[10 11  8  9]
 [ 2  3  0  1]
 [ 6  7  4  5]]

Reversed freq (after ifftshift):
  [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
scipy_discrete_fourier_transform.htm
Advertisements