如何在Python中提取与fft值相关的频率
在这篇文章中,我们将找出从FFT中提取频率值的方法。我们可以从一组在Python中进行FFT即快速傅里叶变换后得到的复数中获得频率的大小。频率可以通过计算复数的大小来获得。因此,对每一个复数进行简单的ab(x)就可以得到频率。
需要的函数:
为了提取与FFT值相关的频率,我们将使用fft.fft()和fft.fftfreq()模块的方法。
- numpy.fft.fft()。它通过优化的FFT即快速傅里叶变换算法计算单维n点DFT即离散傅里叶变换。
语法: numpy.fft.fft(a, axis=-1)
参数:
- a:输入矩阵可以是复杂的。
- axis: 用于计算FFT的轴。如果没有给出,则使用最后一个轴。
返回:截断的或零填充的输入,沿 axis 表示的轴转换,如果没有指定轴,则最后一个。
- numpy.fft.ftfreq()。它计算出与系数相关的频率。
语法: numpy.fft.fftfreq (n , d=1.0 )
n:窗口长度。
d: 采样间隔(采样率的倒数)。默认为1。
返回:长度为n的数组,包含样本频率。
一步一步实现:
第1步:导入所需的模块。
# import module
import numpy as np
第2步:使用NumPy创建一个数组。
# assign data
x = np.array([1,2,1,0,1,2,1,0])
第3步:一个定义在时域的信号x,长度为N,以恒定间隔dt采样,其DFT W(这里具体为W = np.ft.ft(x)),其元素以采样率dw在频率轴上采样。(DFT将N个复数的列表转换为N个复数的列表。)
# compute DFT with optimized FFT
w = np.fft.fft(x)
第4步: np.fft.ftfreq()方法告诉你与系数相关的频率。
# compute frequency associated
# with coefficients
freqs = np.fft.fftfreq(len(x))
第5步:E提取与fft值相关的频率。
# extract frequencies associated with FFT values
for coef, freq in zip(w, freqs):
if coef:
print('{c:>6} * exp(2 pi i t * {f})'.format(c=coef,
f=freq))
以下是基于上述方法的完整方案:
# import required modules
import numpy as np
# assign data
x = np.array([1, 2, 1, 0, 1, 2, 1, 0])
# compute DFT with optimized FFT
w = np.fft.fft(x)
# compute frequency associated
# with coefficients
freqs = np.fft.fftfreq(len(x))
# extract frequencies associated with FFT values
for coef, freq in zip(w, freqs):
if coef:
print('{c:>6} * exp(2 pi i t * {f})'.format(c=coef,
f=freq))
输出: