NumPy - 逆傅里叶变换
NumPy 逆傅里叶变换
逆傅里叶变换是将信号的频域表示转换回时域的过程。
在 NumPy 中,可以使用 numpy.fft.ifft() 函数(针对一维数组)和 numpy.fft.ifftn() 函数(针对多维数组)计算逆傅里叶变换。
当需要在处理信号的频率成分后重建信号时,例如在滤波、降噪或频谱分析中,逆变换至关重要。
逆快速傅里叶变换
numpy.fft.ifft() 函数计算信号的逆快速傅里叶变换 (IFFT)一维数组。它将信号从频域变换回时域,本质上是重建原始信号。
ifft(x) = 输入数组 x 的逆 FFT
示例:计算逆 FFT
在以下示例中,我们使用 ifft() 函数计算一维数组(频域信号)的逆快速傅里叶变换 -
import numpy as np # 定义频域信号(之前通过 FFT 计算) fft_signal = np.array([10+0j, -2+2j, -2+0j, -2-2j]) # 计算逆快速傅里叶变换 time_signal = np.fft.ifft(fft_signal) print("重构的时域信号:", time_signal)
我们得到如下所示的输出 -
重构的时域信号:[1.+0.j 2.+0.j 3.+0.j 4.+0.j]
实数信号的 IFFT
numpy.fft.irfft() 函数用于计算实值信号的逆 FFT。此函数经过优化,可从非负频率分量重建原始时域信号,这对于实值输入数据尤其有用。
irfft(x) = 实值输入数组 x 的逆 FFT
示例:实信号的逆 FFT
在以下示例中,我们计算实值频域信号的逆 FFT -
import numpy as np # 定义一个实值频域信号(之前通过 rfft 计算) fft_real_signal = np.array([10+0j, -2+2j]) # 计算实值信号的逆 FFT reconstructed_real_signal = np.fft.irfft(fft_real_signal) print("重构的实值时域信号:", reconstructed_real_signal)
结果如下 −
重构的实值时域信号:[4. 6.]
多维数组中的 IFT
对于多维数组,NumPy 提供了 numpy.fft.ifftn() 函数来计算 n 维逆 FFT。此函数可用于重建多维信号(例如,二维或三维信号)。
ifftn(x) = 输入数组 x 的 N 维逆 FFT
示例:二维逆 FFT
在以下示例中,我们计算二维频域数组的二维逆 FFT -
import numpy as np # 定义二维频域信号(之前通过 fftn 计算) fft_2d_signal = np.array([[10+0j, -2+2j], [-2+0j, -2-2j]]) # 计算二维逆快速傅里叶变换变换 reconstructed_2d_signal = np.fft.ifftn(fft_2d_signal) print("重构的二维时域信号:", reconstructed_2d_signal)
执行上述代码后,我们得到以下输出 -
重构的二维时域信号: [[1.+0.j 3.+0.j] [3.+1.j 3.-1.j]]
IFT 的重要注意事项
以下是逆傅里叶变换的重要注意事项 -
- 执行逆傅里叶变换时,即使输入是实值,结果也可能包含复数。可以使用 np.real() 函数提取结果的实部,如果虚部可忽略不计,则可以丢弃。
- 逆 FFT 对频域数据的质量高度敏感。如果频域中的任何数据丢失或损坏,时域的重建可能会不准确。
- 原始信号(应用 FFT 之前)中的采样率和点间距在解释重建信号时非常重要,因为它们决定了变换的频率分辨率和时间分辨率。