Mic*_*bie 3 python arrays signal-processing numpy fft
该文档说这样np.fft.fft做:
计算一维离散傅立叶变换。
并np.fft.rfft这样做:
计算一维离散傅里叶变换以获得实际输入。
我还看到,对于我的数据(音频数据,实值),np.fft.fft返回包含复数的二维形状数组(number_of_frames,fft_length)。
For np.fft.rfft返回包含复数的形状为(number_of_frames,(((fft_length / 2)+ 1))的二维数组。我被认为是仅包含非冗余FFT框。
有人可以更深入地解释命令之间的区别以及为什么返回数组的形状不同。谢谢。
import numpy as np
data = [0, 1, 2, 1, 0]
print("FFT output\n", np.fft.fft(data))
print("RFFT output\n", np.fft.rfft(data))
Run Code Online (Sandbox Code Playgroud)
将导致:
FFT output
[ 4. +0.j -2.11803399-1.53884177j 0.11803399+0.36327126j
0.11803399-0.36327126j -2.11803399+1.53884177j]
RFFT output
[ 4. +0.j -2.11803399-1.53884177j 0.11803399+0.36327126j]
Run Code Online (Sandbox Code Playgroud)
通知如何最终元件的的FFT输出是复数 第二元件的缀合物,用于实数输入。对于rfft, 利用 这种对称性仅计算非负频率项。
原因在文档中说明:
当为纯实数输入计算DFT时,输出是Hermitian对称的,即负频率项只是相应正频率项的复共轭,因此负频率项是多余的。此函数不计算负频率项,因此输出的转换轴的长度为n // 2 + 1。
结果,优化了算法,而rfft则快了两倍。此外,频谱更容易绘制:
In [124]: s=abs(sin(arange(0,2**13,3)))
In [125]: sp=rfft(s)
In [126]: plot(abs(sp))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4824 次 |
| 最近记录: |