如何在Python中提取与 fft 值相关的频率?
在本文中,我们将找出从 FFT 中提取频率值的方法。我们可以从在Python中执行 FFT 即快速傅立叶变换后获得的一组复数中获得频率的幅度。频率可以通过计算复数的大小来获得。每个复数上的简单 ab(x) 应该返回频率。
所需方法:
为了提取与 fft 值相关的频率,我们将使用numpy模块的fft.fft()和fft.fftfreq()方法。
- numpy.fft.fft():它使用优化的 FFT 即快速傅立叶变换算法计算一维 n 点 DFT,即离散傅立叶变换。
Syntax: numpy.fft.fft(a, axis=-1)
Parameters:
- a: Input array can be complex.
- axis: Axis over which to compute the FFT. If not given, the last axis is used.
Returns: The truncated or zero-padded input, transformed along the axis indicated by axis, or the last one if the axis is not specified.
- numpy.fft.fftfreq():它计算与系数相关的频率。
Syntax: numpy.fft.fftfreq(n, d=1.0)
- n: Window length.
- d: Sample spacing (inverse of the sampling rate). Defaults to 1.
Returns: Array of length n containing the sample frequencies.
循序渐进的方法:
第一步:导入需要的模块。
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))
输出: