繁体   English   中英

FFT Scipy 计算频率

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM