Fourier transform 是一个强大的概念,用于各种领域,从纯数学到音频工程甚至金融。
scipy.fft模块
傅立叶变换是许多应用中的重要工具,尤其是在科学计算和数据科学中。因此,SciPy 长期以来一直提供它的实现及其相关转换。最初,SciPy 提供了该scipy.fftpack模块,但后来他们更新了他们的实现并将其移到了scipy.fft模块中。
SciPy 充满了功能。有关该库的更一般介绍,请查看Scientific Python:使用 SciPy 进行优化。
安装 SciPy 和 Matplotlib
在开始之前,您需要安装 SciPy 和Matplotlib。您可以通过以下两种方式之一执行此操作:
- 使用 Anaconda 安装: 下载并安装Anaconda Individual Edition。它带有 SciPy 和 Matplotlib,因此一旦您按照安装程序中的步骤操作,您就大功告成了!
- 安装方式pip: 如果您已经pip安装,那么您可以使用以下命令安装库:
$ python -m pip install -U scipy matplotlib
您可以通过在终端中键入python并运行以下代码来验证安装是否有效:
>>> >>> import scipy, matplotlib >>> print(scipy.__file__) /usr/local/lib/python3.6/dist-packages/scipy/__init__.py >>> print(matplotlib.__file__) /usr/local/lib/python3.6/dist-packages/matplotlib/__init__.py
此代码导入 SciPy 和 Matplotlib 并打印模块的位置。您的计算机可能会显示不同的路径,但只要它打印路径,安装就成功了。
SciPy 现已安装!现在是时候看看scipy.fft和之间的区别了scipy.fftpack。
scipy.fft 对比 scipy.fftpack
在查看 SciPy 文档时,您可能会遇到两个看起来非常相似的模块:
- scipy.fft
- scipy.fftpack
该scipy.fft模块较新,应该优先于scipy.fftpack. 您可以在SciPy 1.4.0的发行说明中阅读有关更改的更多信息,但这里有一个快速摘要:
- scipy.fft 有一个改进的 API。
- scipy.fft允许使用多个 worker,这可以在某些情况下提供速度提升。
- scipy.fftpack被认为是遗留的,SciPy 建议scipy.fft改用。
除非您有充分的理由使用scipy.fftpack,否则您应该坚持使用scipy.fft.
scipy.fft 对比 numpy.fft
SciPy 的快速傅立叶变换 (FFT)实现包含更多功能,并且比 NumPy 的实现更可能修复错误。如果有选择,您应该使用 SciPy 实现。
NumPy 维护了 FFT 实现以实现向后兼容性,尽管作者认为像傅立叶变换这样的功能最好放在 SciPy 中。有关更多详细信息,请参阅SciPy 常见问题解答。
Fourier Transform
Fourier 分析是研究如何将 数学函数 分解为一系列更简单的 三角函数的领域 。傅立叶变换是该领域的一种工具,用于将函数分解为其分量频率。
好吧,这个定义非常密集。就本教程而言,傅立叶变换是一种工具,可让您获取信号并查看其中每个频率的功率。看看这句话中的重要术语:
- 一个 信号 是随时间变化的信息。例如,音频、视频和电压轨迹都是信号的例子。
- 甲 频率 是某物重复的速度。例如,时钟以一赫兹 (Hz) 的频率滴答,或每秒重复一次。
- 在这种情况下, 功率 仅表示每个频率的强度。
下图是一些正弦波的频率和功率的直观演示:
所述的峰值的 高频 正弦波比那些更靠近在一起 低频 正弦波,因为它们重复得更频繁。所述 低功率 正弦波具有比其它两个正弦波较小的峰。
为了更具体地说明这一点,假设您对某人同时在钢琴上弹奏三个音符的录音使用了傅立叶变换。结果 频谱 将显示三个峰值,每个音符一个。如果该人弹奏一个音符比其他音符更轻柔,那么该音符的频率强度将低于其他两个。
这是钢琴示例在视觉上的样子:
钢琴上最高的音符比其他两个音符更安静,因此该音符的频