SciPy FFTpack

2024 年 8 月 29 日 | 阅读 2 分钟

FFT 代表 快速傅里叶变换。傅里叶变换将时域信号转换为频域。它将波形(函数或信号)分解为另一种由正弦和余弦表征的替代形式。它可以转换周期性时间信号,而拉普拉斯变换可以转换周期性和非周期性信号。

傅里叶变换有一个限制,它只能转换稳定的时间信号。 SciPy 提供了 fftpack 模块,用于计算傅里叶变换。

快速傅里叶变换

一维离散傅里叶变换

离散傅里叶变换 (DFT) 是最重要的离散变换,用于在许多实际应用中执行傅里叶分析。

长度为 N 的序列 x[n] 的 FFT 由 fft() 函数计算,逆变换使用 ifft() 计算。

输出

[5.5       +0.j         6.69959347-2.82666927j 0.55040653+3.51033344j
 0.55040653-3.51033344j 6.69959347+2.82666927j]

scipy.fftpack 模块允许计算快速傅里叶变换。 我们可以将其用于噪声信号,因为这些信号需要高计算量。 下面给出了噪声输入信号的示例

输出

The Signal Size is: 1000

在上面的程序中,我们创建了一个时间步长为 0.02 秒的信号。 该语句打印信号大小,正如我们在输出中看到的那样。 我们不了解信号频率; 我们只熟悉信号 sig 的采样时间步长。

scipy.fftpack.fftfreq() 函数将创建采样频率,而 scipy.fftpack.fft() 将计算快速傅里叶变换。

输出

[ -4.36424554+0.00000000e+00j  -0.04699618+2.19694444e+01j
  -7.01929898+1.04796659e+01j -17.63704986-1.25717602e+01j
  -9.60405228-4.95595106e+02j -11.47597041-1.51768467e+01j............]

离散余弦变换

离散余弦变换通过余弦函数的总和表示数据。 它将实数据点的序列转换为其实频谱,从而避免了冗余问题。 DCT 主要用于图像压缩。

DCT 类似于离散傅里叶变换 (DFT),但它仅使用实数。

让我们看下面的例子

输出

[ 64.          -1.55291427 -12.12435565  16.97056275  11.
  -5.79555496]

DCT 的用法

DCT 用于各个领域。 这些领域如下

  • 图像处理 - 压缩、科学分析。
  • 音频处理 - 压缩(MPEG 或 Mp3)。
  • 科学计算 - 偏微分方程求解器。

下一个主题SciPy 积分