NumPy - 离散傅里叶变换
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_signal)
上述代码的结果为 −
信号的离散傅里叶变换 (DFT):[10.+0.j -2.+2.j -2.+0.j -2.-2.j]
计算逆离散傅里叶变换 (DFt)
numpy.fft.ifft() 函数计算离散傅里叶变换的逆,将频率分量转换回原始时域信号。这在您想要根据信号的频率表示重建信号时非常有用。
ifft(x) = 输入数组 x 的逆离散傅里叶变换
示例:逆离散傅里叶变换
在以下示例中,我们使用 NumPy 的 ifft() 函数计算先前计算的离散傅里叶变换的逆离散傅里叶变换 -
import numpy as np # 定义信号的离散傅里叶变换(先前计算) dft_signal = np.array([10+0j, -2+2j, -2+0j, -2-2j]) # 计算离散傅里叶变换的逆离散傅里叶变换 reconstructed_signal = np.fft.ifft(dft_signal) print("重构信号:", 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_real_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_signal)
以下是上述代码的输出 -
重构的实值信号:[4. 6.]
使用 fftfreq() 函数进行频率分箱
numpy.fft.fftfreq() 函数用于生成与DFT分量对应的采样频率数组。这对于绘制信号的频率分量或分析其频谱内容非常有用。
fftfreq(n, d=1) = 对应于具有 n 个点、间隔为 d 的数组的 DFT 的频率
示例:频率分箱
在以下示例中,我们生成对应于信号 DFT 的频率 -
import numpy as np # 定义 DFT 中的点数和样本间距 n_points = 4 spacing = 1 # 生成对应于 DFT 的频率 frequencies = np.fft.fftfreq(n_points, Spacing) print("对应于 DFT 的频率:", Frequencies)
得到的输出如下所示−
对应于DFT的频率:[ 0. 0.25 -0.5 -0.25]