[英]FFT Scipy Calculating Frequency
我正在尝试使用 scipy FFT 来计算信号频率。 通过“手动”计算频率,它显然在 2.5 Hz 左右。
所以这是我的输入信号:随时间变化的信号幅度
这是我正在使用的代码:
import matplotlib.pyplot as plt
import numpy as np
from scipy import fft
##---Get Data
AccZ = np.loadtxt('...', delimiter=';', usecols=(0,3))
Time = np.array(AccZ[:,0])
AccZ = np.array(AccZ[:,1])
Time_Step = Time[1]-Time[0]
##---FFT
AccZ_fft = fft.fft(AccZ)
Amp = np.abs(AccZ_fft)
Sample_Freq = fft.fftfreq(AccZ.size, d=Time_Step)
Amp_Freq = np.array([Amp, Sample_Freq])
Amp_Pos = Amp_Freq[0,:].argmax()
Peak_Freq = Amp_Freq[1, Amp_Pos]
这就是我从 FFT 得到的:频率上的幅度
不幸的是,我的最高值始终在数组 position [0] 中,这意味着我的 Sample_Freq 数组中的峰值频率始终为 0。
我在这里做错了什么? 会感谢任何帮助。
第零个 bin 始终是直流分量,即输入 function 的垂直偏移。 如果您对此值不感兴趣,您可以简单地执行以下操作:
AccZ_fft[0] = 0
这相当于对输入执行此操作:
AccZ -= np.mean(AccZ)
并且应该简化峰值查找。
顺便说一句,对于实值输入信号(就像你的那样),建议使用np.fft.rfft
而不是np.fft.fft
。 这样,您将不会得到这个对称的 output 具有冗余正负频率。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.