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

📅  最后修改于: 2022-05-13 01:55:17.652000             🧑  作者: Mango

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

在本文中,我们将找出从 FFT 中提取频率值的方法。我们可以从在Python中执行 FFT 即快速傅立叶变换后获得的一组复数中获得频率的幅度。频率可以通过计算复数的大小来获得。每个复数上的简单 ab(x) 应该返回频率。

所需方法:

为了提取与 fft 值相关的频率,我们将使用numpy模块的fft.fft()fft.fftfreq()方法。

  • numpy.fft.fft():它使用优化的 FFT 即快速傅立叶变换算法计算一维 n 点 DFT,即离散傅立叶变换。
  • numpy.fft.fftfreq():它计算与系数相关的频率。

循序渐进的方法:

第一步:导入需要的模块。

Python3
# import module
import numpy as np


Python3
# assign data
x = np.array([1,2,1,0,1,2,1,0])


Python3
# compute DFT with optimized FFT
w = np.fft.fft(x)


Python3
# compute frequency associated
# with coefficients
freqs = np.fft.fftfreq(len(x))


Python3
# 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))


Python3
# 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))


第 2 步:使用 NumPy 创建一个数组。

蟒蛇3

# assign data
x = np.array([1,2,1,0,1,2,1,0])

第 3 步:在长度为 N 的时域中定义的信号 x,以恒定间隔 dt 采样,其 DFT W(此处具体为 W = np.fft.fft(x)) ,其元素在频率轴上采样采样率 dw。 (DFT 将 N 个复数列表转换为 N 个复数列表)

蟒蛇3

# compute DFT with optimized FFT
w = np.fft.fft(x)

第 4 步: np.fft.fftfreq()方法告诉您与系数相关的频率。

蟒蛇3

# compute frequency associated
# with coefficients
freqs = np.fft.fftfreq(len(x))

步骤 5:提取与 fft 值相关的频率。

蟒蛇3

# 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))

以下是基于上述方法的完整程序:

蟒蛇3

# 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))

输出: