11. FFT Example

11. FFT Example#

1. Overview#

The FFT (Fast Fourier Transform) module can perform a Fourier transform on input data and return the corresponding frequency amplitudes. Through FFT operations, time-domain signals can be converted into frequency-domain signals, which helps in analyzing the frequency components of the signal.

2. Example#

The following example demonstrates how to use the FFT module to perform a Fourier transform.

from machine import FFT
import array
import math
from ulab import numpy as np

PI = 3.14159265358979323846264338327950288419716939937510

rx = []

def input_data():
    for i in range(64):
        data0 = 10 * math.cos(2 * PI * i / 64)
        data1 = 20 * math.cos(2 * 2 * PI * i / 64)
        data2 = 30 * math.cos(3 * 2 * PI * i / 64)
        data3 = 0.2 * math.cos(4 * 2 * PI * i / 64)
        data4 = 1000 * math.cos(5 * 2 * PI * i / 64)
        rx.append(int(data0 + data1 + data2 + data3 + data4))

input_data()  # Initialize the data to be FFT'd, in list form
print(rx)

data = np.array(rx, dtype=np.uint16)  # Convert list data to an array
print(data)

fft1 = FFT(data, 64, 0x555)  # Create an FFT object with 64 points and offset 0x555
res = fft1.run()  # Perform FFT and get the transformed data
print(res)

res = fft1.amplitude(res)  # Get the amplitude of each frequency point
print(res)

res = fft1.freq(64, 38400)  # Get the frequency values of all frequency points
print(res)

3. Code Explanation#

  1. Import Modules:

    • Import the necessary modules, including FFT, array, math, and numpy.

  2. Input Data Function:

    • Define the input_data() function to generate 64 data points, simulating cosine waves of different frequencies and storing them in the rx list.

  3. Data Conversion:

    • Convert the list rx into a NumPy array data, specifying the data type as unsigned 16-bit integers.

  4. Create FFT Object:

    • Use FFT(data, 64, 0x555) to create an FFT object, setting the number of points to 64 and the offset to 0x555.

  5. Run FFT:

    • Call fft1.run() to perform the Fourier transform, storing the result in res.

  6. Get Amplitude:

    • Use fft1.amplitude(res) to get the amplitude of each frequency point and print it.

  7. Get Frequency Values:

    • Call fft1.freq(64, 38400) to get the frequency values of all frequency points and print them.

Note

For detailed API references of the FFT module, please refer to the API Documentation