NumPy 怎么做离散傅里叶变换 DFT?

文章导读
Previous Quiz Next NumPy 离散傅里叶变换 离散傅里叶变换 (DFT) 是一种数学技术,用于将值序列转换为不同频率的分量。它广泛应用于信号处理、图像分析和音频处理。
📋 目录
  1. NumPy 离散傅里叶变换
  2. 使用 fft() 函数计算 DFT
  3. 计算逆 DFT
  4. 计算实信号的 DFT
  5. 计算实信号的逆 DFT
  6. 使用 fftfreq() 函数进行频率分箱
A A

NumPy - 离散傅里叶变换



Previous
Quiz
Next

NumPy 离散傅里叶变换

离散傅里叶变换 (DFT) 是一种数学技术,用于将值序列转换为不同频率的分量。它广泛应用于信号处理、图像分析和音频处理。

在 NumPy 中,可以使用 fft(快速傅里叶变换)模块来计算 DFT,该模块提供了计算 DFT 及其逆变换的实现。

DFT 有助于分析信号的频率内容,因此在许多应用中非常有用,包括滤波、信号压缩和频谱分析。

使用 fft() 函数计算 DFT

numpy.fft.fft() 函数计算数组的一维 n 点离散傅里叶变换 (DFT)。该函数返回输入信号的频率分量,零频率分量位于输出数组的开头。

fft(x) = 输入数组 x 的离散傅里叶变换

示例:计算 DFT

在以下示例中,我们使用 NumPy 的 fft() 函数计算一维数组的离散傅里叶变换 −

import numpy as np

# 定义样本数据(信号)的数组
signal = np.array([1, 2, 3, 4])

# 计算信号的离散傅里叶变换
dft_signal = np.fft.fft(signal)

print("DFT of the signal:", dft_signal)

上述代码的结果为 −

DFT of the signal: [10.+0.j -2.+2.j -2.+0.j -2.-2.j]

计算逆 DFT

numpy.fft.ifft() 函数计算离散傅里叶变换的逆变换,将频率分量转换回原始时域信号。这在希望从频率表示重建信号时非常有用。

ifft(x) = 输入数组 x 的逆离散傅里叶变换

示例:逆 DFT

在以下示例中,我们使用 NumPy 的 ifft() 函数计算先前计算的 DFT 的逆离散傅里叶变换 −

import numpy as np

# 定义信号的 DFT(先前计算得到)
dft_signal = np.array([10+0j, -2+2j, -2+0j, -2-2j])

# 计算 DFT 的逆离散傅里叶变换
reconstructed_signal = np.fft.ifft(dft_signal)

print("Reconstructed signal:", reconstructed_signal)

得到以下输出 −

Reconstructed signal: [1.+0.j 2.+0.j 3.+0.j 4.+0.j]

计算实信号的 DFT

numpy.fft.rfft() 函数针对实输入信号的 DFT 计算进行了优化。该函数仅返回非负频率项,因为对于实值信号,负频率项是冗余的。

rfft(x) = 实值输入数组 x 的 DFT

示例:实信号的 DFT

在以下示例中,我们使用 NumPy 的 rfft() 函数计算实值信号的离散傅里叶变换 −

import numpy as np

# 定义实值信号
signal = np.array([1, 2, 3, 4])

# 计算实值信号的离散傅里叶变换
dft_real_signal = np.fft.rfft(signal)

print("DFT of the real-valued signal:", dft_real_signal)

将产生以下结果 −

DFT of the real-valued signal: [10.+0.j -2.+2.j -2.+0.j]

计算实信号的逆 DFT

numpy.fft.irfft() 函数用于计算实值信号的 DFT 逆变换,从其非负频率分量重建原始时域信号。

irfft(x) = 实值输入数组 x 的逆 DFT

示例:实信号的逆 DFT

在以下示例中,我们计算一个实值信号的逆 DFT −

import numpy as np

# 定义实值信号的 DFT(先前计算得到)
dft_real_signal = np.array([10+0j, -2+2j])

# 计算实值 DFT 的逆离散傅里叶变换
reconstructed_real_signal = np.fft.irfft(dft_real_signal)

print("Reconstructed real-valued signal:", reconstructed_real_signal)

以上代码的输出如下 −

Reconstructed real-valued signal: [4. 6.]

使用 fftfreq() 函数进行频率分箱

numpy.fft.fftfreq() 函数用于生成与 DFT 分量对应的采样频率数组。这对于绘制信号的频率分量或分析其频谱内容非常有用。

fftfreq(n, d=1) = 具有 n 个点的数组的 DFT 对应的频率,间隔为 d

示例:频率分箱

在以下示例中,我们生成信号的 DFT 对应的频率 −

import numpy as np

# 定义 DFT 中的点数和采样间隔
n_points = 4
spacing = 1

# 生成对应于 DFT 的频率
frequencies = np.fft.fftfreq(n_points, spacing)

print("Frequencies corresponding to the DFT:", frequencies)

得到的输出如下所示 −

Frequencies corresponding to the DFT: [ 0.    0.25 -0.5  -0.25]