This Python tutorial will learn about the “**Python Scipy FFT**” where we will use mathematical Fourier transform to solve problems related to signal, etc. And additionally, cover the following topics.

- Python Scipy FFT
- Python Scipy FFT Rfft
- Python Scipy FFT Shift
- Python Scipy FFT Freq
- Python Scipy FFT Convolve
- Python Scipy FFT Fft
- Python Scipy FFT Fft2
- Python Scipy FFT Fftn
- Python Scipy FFT Rfft2
- Python Scipy FFT Hfft
- Python Scipy FFT ihfft

## Python Scipy FFT

The Python Scipy module

deals with Fourier analysis is a technique for describing a function as a sum of periodic components and extracting the signal from those components. The discrete Fourier transform is created by replacing both the function and its Fourier transform with discretized versions.*scipy.fft*

The Fast Fourier Transform, an extremely fast approach for performing the DFT, has helped it become a cornerstone of numerical computing. Let’s know the ** “What is Fourier transform”** in simple words.

The Fourier transform is a mathematical function that takes a time-based sequence and determines the total rotation speed, strength and cycle offset for each of the pattern’s possible cycles. Waveforms, which are essential functions of time, space, or any other variable, are transformed using the Fourier transform.

A waveform is decomposed into a sinusoid via the Fourier transform, which gives another way to express a waveform.

Here in the upcoming subsections, we will learn about the most commonly used method of Fourier transform.

Read: Scipy Stats – Complete Guide

## Python Scipy FFT Rfft

The Python SciPy has a method

in a module *rfft()*

that calculates the discrete Fourier Transform in one dimension of the given real input.*sicpy.fft*

The syntax is given below.

`scipy.fft.rfft2(x, axis=-1, n=None, overwrite_x=True, norm=None, plan=None, workers=None)`

Where parameters are:

It is an array provided as input.*X(array_data):*The axis on which the FFT is computed.*axis(int):*The contents of x can be destroyed if true. By default, it is false.*overwrite_x (boolean):*Which kind of normalization mode to use like*norm:*`ortho`

,`forward`

,`bakcward`

.This parameter is for passing a downstream FFT vendor’s precomputed plan.*plan(object):*The maximum number of workers that can be used in parallel processing. If the value is negative, it wraps around from*workers(int):*

.*os.cpu count ()*

The method

returns *rfft*

of type ndarray. The input that has been truncated or zero-padded and converted along the axis supplied by axis, or the final one if the axis is not specified.*out*

Let’s take an example by executing the below python code.

```
from scipy.fft import rfft
rfft([1, 2, 4, 0])
```

In the above code, we have imported the method

from the module *rfft*

and passed the array *scipy.fft*

to a method to calculate the discrete Fourier Transform.*[1, 2, 4, 0]*

This is how to use the method** ** of Python SciPy.

`rfft()`

Read: Scipy Optimize – Helpful Guide

## Python Scipy FFT Shift

The Python Scipy has a method

within module *fftshift()*

that shift the spectrum’s zero-frequency component to the centre. *scipy.fft*

The syntax is given below.

`scipy.fft.fftshift(x, axes=None)`

The parameters are:

It is an array as input.*x(array_data):*Shift the axes. None, which shifts all axes, is the default.*axes(shape tuple, int):*

The method

returns the *fftshift()* of type ndarray.

`y`

( which is shifted array)Let’s take an example by following the below steps:

Import the required libraries using the below python code

`from scipy.fft import fftshift, fftfreq`

Compute the frequencies using the below code.

`frequncies = fftfreq(5,2)`

Now, perform pass the

to a method *frequencies*

using the below code.*fftshift()*

`fftshift(frequncies)`

This is how to use the method

of Python SciPy to shift the spectrum’s zero-frequency component to the centre of given frequencies.*fftshift()*

Read: Scipy Constants

## Python Scipy FFT Freq

The Python SciPy contains a method

in module *fftfreq()*

that returns the Fourier Discrete Change in the frequency of the samples. The frequency bin centres in cycles per unit of sample spacing are returned in the float array f.*scipy.fft*

The syntax is given below.

`scipy.fftpack.fftfreq(n, d=2.0)`

Where parameters are:

It is the length of the window.*n(int):*It is used to specify the sample spacing.*d(scalar):*

The method

returns *fftfreq()* of type ndarary.

`f`

(The sample frequencies are stored in an array of length n)Let’s take an example by following the below steps:

Import the required libraries using the below python code.

```
import numpy as np
from scipy.fft import fft, fftfreq
```

Create a signal and transform the signal using Fourier as shown below code.

```
sig = np.array([5,-2, 3, 0, 4, 1, 6, 8], dtype=float)
ft = fft(sig)
n_data = sig.size
time_step = 0.1
```

Calculate the sample frequencies using the below code.

```
frequency = fftfreq(n_data, d=time_step)
frequency
```

This is how to use the method

of Python SciPy.*fftfreq()*

Read: Python Scipy Matrix + Examples

## Python Scipy FFT Convolve

The Scipy has a method

in module *fftconvolve()*

that convolves n-dimensional arrays using the method of *scipy.signal***FFT **(Fast Fourier Transform).

The syntax is given below.

`scipy.signal.fftconvolve(in1, in2, mode='full', method='auto')`

Where parameters are:

It is used to input the first signal in the form of an array.*in1(array_data):*It is used to input the second signal in the form of an array, the dimension must be the same as the first input array.*in2(array_data):*It is used to specify the string that determines output size. The mode can be*mode:*

,*same*

and*full*

.*valid*It is used to specify the method that computes the convolution. The method can be*method:*

,*auto*

and*direct*

.*fft*

Let’s understand with an example by following the below steps:

Import the required library using the below python code.

```
from scipy.signal import fftconvolve
import scipy.signal
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
```

Generate a random noise signal and apply the method

using the below code.*fftconvolveI()*

```
random_gen = np.random.default_rng()
s = random_gen.standard_normal(800)
autocorrelation = fftconvolve(s, s[::-1], mode='full')
```

Let’s plot the above-convolved signal using the below code.

```
fig, (orig_axes, mag_axes) = plt.subplots(2, 1)
orig_axes.plot(s)
orig_axes.set_title('It is noise')
mag_axes.plot(np.arange(-len(s)+1,len(s)), autocorrelation)
mag_axes.set_title('It is autocorrelation')
fig.tight_layout()
fig.show()
```

This is how to use the method

of Python SciPy to convolve an n-dimensional array.*fftconvolve()*

Read: Scipy Linalg – Helpful Guide

## Python Scipy FFT Fft

The Python SciPy has a method

within the module *fft()*

that calculates the discrete Fourier Transform in one dimension.*scipy.fft*

The syntax is given below.

`scipy.fft.fft(x, n=None, norm=None, axis=- 0, overwrite_x=True,plan=None, workers=None,)`

Where parameters are:

It is an array provided as input.*X(array_data):*Dimensions of the output’s converted axis. The input will be cropped if n is less than the length of the input. The input will be padded with zeros if it is greater. If n is omitted, the input’s length along the axis indicated by the axis is utilised instead.*n(int):*The axis on which the FFT is computed.*axis(int):*The contents of x can be destroyed if True. by default it is false.*overwrite_x (boolean):*Which kind of normalization mode to use like*norm:*`ortho`

,`forward`

,`bakcward`

.This parameter is for passing a downstream FFT vendor’s precomputed plan.*plan(object):*The maximum number of workers that can be used in parallel processing. If the value is negative, it wraps around from*workers(int):*

.*os.cpu count ()*

The method

returns *fft()* of type complex ndarray.

`out`

(The input that has been truncated or zero-padded and converted along the axis supplied by axis, or the final one if the axis is not provided)Let’s take an example by following the below steps:

```
from scipy import fft
import numpy as np
```

compute the `fft`

of the given values using the below python code.

`scipy.fft.fft(np.exp(1j * np.pi * np.arange(5) / 5))`

This is how to compute the FFT of the given below using the method

of Python SciPy.*fft()*

Read: Scipy Ndimage Rotate

## Python Scipy FFT Fft2

The Python SciPy has a method

within the module *fft2()*

that calculates the discrete Fourier Transform in two dimensions.*scipy.fft*

The syntax is given below.

`scipy.fft.fft(x, n=None, norm=None, axis=- 0, overwrite_x=True,plan=None, workers=None,)`

Where parameters are:

It is an array provided as input.*X(array_data):*Dimensions of the output’s converted axis. The input will be cropped if n is less than the length of the input. The input will be padded with zeros if it is greater. If n is omitted, the input’s length along the axis indicated by the axis is utilised instead.*n(int):*The axis on which the FFT is computed.*axis(int):*The contents of x can be destroyed if True. by default it is false.*overwrite_x (boolean):*Which kind of normalization mode to use like*norm:*`ortho`

,`forward`

,`bakcward`

.This parameter is for passing a downstream FFT vendor’s precomputed plan.*plan(object):*The maximum number of workers used in parallel processing. If the value is negative, it wraps around from*workers(int):*

.*os.cpu count ()*

The method

returns *fft2()* of type complex ndarray.

`out`

(The input that has been truncated or zero-padded and converted along the axis supplied by axis, or the final one if the axis is not provided)Let’s take an example by following the below steps:

Import the required libraries using the below python code.

```
from scipy.fft import fft2
import numpy as np
```

Create a two-dimensional array using the method

as shown below code.*np.mgrid()*

`twod_array = np.mgrid[:8, :8][0]`

Perform FFT2 on the above created two-dimensional array using the below code.

`fft2(twod_array)`

This is how to use the method `fft2()`

of Python SciPy to calculate the discrete Fourier Transform in two dimensions.

Read: Scipy Convolve – Complete Guide

## Python Scipy FFT Fftn

The Python SciPy contains a method

within module *fftn()*

that uses the Fast Fourier Transform, this function calculates the n-dimensional discrete Fourier Transform in an M-D array across any number of axes.*scipy.fft*

The syntax is given below.

`scipy.fft.fftn(x, s=None, n=None, norm=None, axis=- 0, overwrite_x=True,plan=None, workers=None,)`

Where parameters are:

It is an array provided as input.*X(array_data):*The output’s shape (the length of each modified axis).*s( int in sequence):*Dimensions of the output’s converted axis. The input will be cropped if n is less than the length of the input. The input will be padded with zeros if it is greater. If n is omitted, the input’s length along the axis indicated by the axis is utilised instead.*n(int):*The axis on which the FFT is computed.*axis(int):*The contents of x can be destroyed if True. by default it is false.*overwrite_x (boolean):*Which kind of normalization mode to use like*norm:*`ortho`

,`forward`

,`bakcward`

.This parameter is for passing a downstream FFT vendor’s precomputed plan.*plan(object):*The maximum number of workers used in parallel processing. If the value is negative, it wraps around from*workers(int):*

.*os.cpu count ()*

The method

returns*fftn()*** ** of type ndarray.

`out`

(The input has been truncated or zero-padded and has been converted along the axes given by axes, or by a mix of s and x)Import the required libraries using the below python code.

```
from scipy.fft import fftn
import numpy as np
```

Create a two-dimensional array using the method

shown below code.*np.mgrid()*

`twod_array = np.mgrid[:4, :4 :4][0]`

Perform FFTN on the above created two-dimensional array using the below code.

`fftn(twod_array)`

This is how to use the method

of Python SciPy to calculate the n-dimensional discrete Fourier Transform in an M-D array across any number of axes.*fftn()*

Read: Scipy Misc + Examples

## Python Scipy FFT Rfft2

The Python SciPy has a method

in a module *rfft2()*

that calculates the discrete Fourier Transform in two dimensions of the given real input.*sicpy.fft*

The syntax is given below.

`scipy.fft.rfft2(x, axis=-1, n=None, overwrite_x=True, norm=None, plan=None, workers=None)`

Where parameters are:

It is an array provided as input.*X(array_data):*The FFT’s shape.*s(int in sequence):*The axis on which the FFT is computed.*axis(int):*The contents of x can be destroyed if True. by default it is false.*overwrite_x (boolean):*Which kind of normalization mode to use like*norm:*`ortho`

,`forward`

,`bakcward`

.This parameter is for passing a downstream FFT vendor’s precomputed plan.*plan(object):*The maximum number of workers that can be used in parallel processing. If the value is negative, it wraps around from*workers(int):*

.*os.cpu count ()*

The method

returns *rfft2*

(The actual 2-D FFT’s result) of type ndarray.*out*

Let’s take an example by executing the below python code.

```
from scipy.fft import rfft2
rfft2([[1, 2, 4, 0],
[3, 5, 4, 8]])
```

This is how to use the method `rrft2()`

of Python SciPy which calculates the discrete Fourier Transform in two dimensions of the given real input.

Read: Scipy Signal – Helpful Tutorial

## Python Scipy FFT Hfft

The Python SciPy contains a method

in a module *hfft()*

that calculates the FFT of a Hermitian symmetric signal.*scipy.fft*

The syntax is given below.

`scipy.fft.hfft(x, axis=-1, n=None, overwrite_x=True, norm=None, plan=None, workers=None)`

Where parameters are:

It is an array provided as input.*x(array_data):*The length of the output’s converted axis.*n(int):*The axis on which the FFT is computed.*axis(int):*The contents of x can be destroyed if True. by default it is false.*overwrite_x (boolean):*Which kind of normalization mode to use like*norm:*`ortho`

,`forward`

,`bakcward`

.This parameter is for passing a downstream FFT vendor’s precomputed plan.*plan(object):*The maximum number of workers used in parallel processing. If the value is negative, it wraps around from*workers(int):*

.*os.cpu count ()*

The method

returns *hfft()* of type complex ndarray.

`out`

(The input that has been truncated or zero-padded and converted along the axis supplied by axis, or the final one if the axis is not provided)Let’s understand with an example by following the below steps:

Import the required libraries using the below python code.

```
from scipy import fft
import numpy as np
```

Create a signal using the below code.

```
array_data = 3 * np.pi * np.arange(20) / 20
sig = np.cos(array_data) + 2j * np.sin(2 * array_data)
sig
```

Now calculate the HFFT of the above-created signal.

`fft.hfft(sig, 15)`

This is how to use the method

of Python SciPy that calculates the FFT of a Hermitian symmetric signal.*hfft()*

Read: Python Scipy Special

## Python Scipy FFT ihfft

The method

calculate the inverse FFT of a Hermitian-symmetric signal. of Python SciPy which exists in a module *ihfft()*

.*scipy.fft*

The syntax is given below.

`scipy.fft.ihfft(x, axis=-1, n=None, overwrite_x=True, norm=None, plan=None, workers=None)`

Where parameters are:

It is an array provided as input.*x(array_data):*The length of the output’s converted axis.*n(int):*The axis on which the FFT is computed.*axis(int):*The contents of x can be destroyed if True. by default it is false.*overwrite_x (boolean):*Which kind of normalization mode to use like*norm:*`ortho`

,`forward`

,`bakcward`

.This parameter is for passing a downstream FFT vendor’s precomputed plan.*plan(object):*The maximum number of workers used in parallel processing. If the value is negative, it wraps around from*workers(int):*

.*os.cpu count ()*

The method

returns *ihfft()*`out`

(The input that has been truncated or zero-padded and converted along the axis supplied by axis, or the final one if the axis is not provided)

Let’s take an example by following the below steps:

Import the required libraries using the below python code.

```
from scipy import fft
import numpy as np
```

Create a signal spectrum using the below code.

```
sign_spectrum = np.array([ -1, 0, -4, 15, -4, 0])
sign_spectrum
```

Compute the hfft of that signal using the below code.

`fft.ihfft(sign_spectrum)`

This is how to use the method

of Python SciPy which calculates the inverse FFT of a Hermitian-symmetric signal.*ihfft()*

You may also like to read the following SciPy tutorials.

So, in this tutorial, we have learned about the “**Python Scipy FFT**” and covered the following topics.

- Python Scipy FFT
- Python Scipy FFT Rfft
- Python Scipy FFT Shift
- Python Scipy FFT Freq
- Python Scipy FFT Convolve
- Python Scipy FFT Fft
- Python Scipy FFT Fft2
- Python Scipy FFT Fftn
- Python Scipy FFT Rfft2
- Python Scipy FFT Hfft
- Python Scipy FFT ihfft

I am Bijay Kumar, a Microsoft MVP in SharePoint. Apart from SharePoint, I started working on Python, Machine learning, and artificial intelligence for the last 5 years. During this time I got expertise in various Python libraries also like Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… for various clients in the United States, Canada, the United Kingdom, Australia, New Zealand, etc. Check out my profile.