如何在Python中提取与fft值相关的频率

如何在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))

输出:

如何在Python中提取与fft值相关的频率

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Numpy教程