NumPy - 傅里叶级数和变换
NumPy 傅里叶级数和变换
在数学中,傅里叶级数将周期函数分解为更简单的正弦波和余弦波的和。它用于分析随时间重复的函数或信号,例如声波或电信号。
另一方面,傅里叶变换将这一概念扩展到非周期函数,将它们从时域转换到频域。这有助于理解信号的频率成分,这在信号处理和数据分析中非常有用。
NumPy 提供了一系列函数来处理不同类型的傅里叶变换,包括实数和复数数据。
傅里叶级数
傅里叶级数将周期函数表示为正弦和余弦的和。它对于分析周期信号非常有用,因为函数可以分解为一系列具有不同频率的正弦分量。
f(t) = a_0 + Σ (a_n cos(nωt) + b_n sin(nωt))
其中 ω 是基波角频率,a_n 和 b_n 是傅里叶系数。
示例:计算傅里叶系数
虽然 NumPy 没有提供直接计算傅里叶级数系数的函数,但我们可以使用 fft() 函数来近似计算它们。在以下示例中,我们计算一个简单周期信号的傅里叶系数 -
import numpy as np # 定义一个周期信号 t = np.linspace(0, 1, 500, end=False) signal = np.sin(2 * np.pi * 5 * t) + 0.5 * np.sin(2 * np.pi * 10 * t) # 使用 FFT 计算傅里叶系数 fourier_coeffs = np.fft.fft(signal) print("傅里叶系数:", fourier_coeffs)
结果显示信号的傅里叶系数 -
傅里叶系数: [-3.87326339e-14+0.00000000e+00j 4.12725409e-14+2.68673972e-14j...]
快速傅里叶变换 (FFT)
快速傅里叶变换 (FFT) 是一种计算离散傅里叶变换 (DFT) 及其逆变换的算法。 FFT 将信号分解为其频率分量,从而提供频域表示。
NumPy 提供了多个用于计算 FFT 的函数,包括用于一维变换的 numpy.fft.fft() 和用于多维变换的 numpy.fft.fftn()。
示例:计算 FFT
在以下示例中,我们计算一维信号的 FFT -
import numpy as np # 定义一个信号 t = np.linspace(0, 1, 500, end=False) signal = np.sin(2 * np.pi * 5 * t) # 计算 FFT fft_values = np.fft.fft(信号) print("FFT 值:", fft_values)
结果显示信号的 FFT 值 −
FFT 值:[-2.37154386e-14+0.00000000e+00j 6.32657050e-15+6.43929354e-15j-4.51716973e-14+3.82357443e-14j ...]
逆快速傅里叶变换 (IFFT)
逆快速傅里叶变换 (IFFT) 将信号的频域表示转换回时域。 NumPy 提供了 numpy.fft.ifft() 函数用于一维 IFFT,以及 numpy.fft.ifftn() 函数用于多维 IFFT。
示例:计算 IFFT
在以下示例中,我们计算频域信号的 IFFT 来重建原始时域信号 -
import numpy as np # 定义频域信号(之前已通过 FFT 计算) fft_values = np.array([10+0j, -2+2j, -2+0j, -2-2j]) # 计算 IFFT time_signal = np.fft.ifft(fft_values) print("重构的时域信号:", time_signal)
结果显示重构的时域信号 −
重构的时域信号:[1.+0.j 2.+0.j 3.+0.j 4.+0.j]
实值 FFT (rFFT)
实值 FFT (rFFT) 针对实值输入信号进行了优化。 NumPy 提供了 numpy.fft.rfft() 函数用于计算实值信号的 FFT,以及 numpy.fft.irfft() 函数用于计算实值信号的 IFFT。
示例:计算 rFFT 和 irFFT
在以下示例中,我们计算实值信号的 rFFT,然后使用 irFFT 重建信号 -
import numpy as np # 定义一个实值信号 t = np.linspace(0, 1, 500, end=False) real_signal = np.sin(2 * np.pi * 5 * t) # 计算 rFFT rfft_values = np.fft.rfft(real_signal) # 计算逆 rFFT reconstructed_signal = np.fft.irfft(rfft_values) print("重构的实值时域信号:", reconstructed_signal)
结果显示重构的实值时域信号 -
重构的实值时域信号:[ 5.04870979e-32 6.27905195e-02 1.25333234e-01 1.87381315e-01 ...]
傅里叶变换的应用
傅里叶变换广泛应用于各个领域,例如−
- 信号处理:分析和滤波通信、音频处理和图像处理中的信号。
- 物理与工程:研究波形、振动和振荡。
- 数据压缩:通过变换和截断频率分量来减小数据量。
- 金融分析:分析股票市场和经济预测中的时间序列数据。