簡體   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