簡體   English   中英

Python-FFT導致錯誤的物理含義

[英]Python - FFT leads to wrong physical meanings

我是Python的新手。 我打算對付離散點(時間,加速度)的數組進行傅立葉變換,並將結果繪制出來。

我復制並粘貼示例FFT代碼,然后進行相應的修改。

請查看代碼:

import numpy as np
import matplotlib.pyplot as plt

# Load the .txt file in
myData = np.loadtxt('twenty_z_up.txt')

# Extract the time and acceleration columns
time = copy(myData[:,0])

# Extract the acceleration columns
zAcc = copy(myData[:,3])

t = np.arange(10080)
sp = np.fft.fft(zAcc)
freq = np.fft.fftfreq(t.shape[-1])
plt.plot(freq, sp.real)

myData是具有10080行和10列的矩形矩陣。

因此,zAcc是從矩陣中提取的row3。

在Spyder繪制的圖中,大多數諧波都集中在0附近。它們都非常小。

但是我的數據實際上是步行者攜帶的手機的加速度(包括重力)。 因此,我希望最明顯的諧波發生在2Hz左右。

為什么圖無意義?

提前致謝!

=============更新:我的圖表====================== 時域

上述代碼后

放大

第一次域:

x軸以毫秒為單位。

y軸的單位為m / s ^ 2,由於地球重力,它的DC偏移約為10。

確實會在(大約)2Hz處獲得兩個尖峰。 您的采樣周期約為2.8 ms(從我的第一幅圖中可以推斷出的效果最好),使+/- 2Hz的歸一化頻率為+/- 0.056,這大約是您的峰值所在。 默認情況下, fft.fftfreq返回歸一化的頻率(縮放采樣周期)。 您可以將d參數設置為采樣周期,然后將獲得一個包含實際頻率的向量。

您在中間的巨大尖峰顯然是DC偏移量(您可以通過減去均值來輕松消除)。

正如其他人所說,我們需要查看數據,並將其發布到某個地方。 僅檢查一下,嘗試首先將時間步長固定為fftfreq,然后繪制此合成信號,然后繪制信號以查看它們的比較:

timestep=1./50.#Assume sampling at 50Hz. Change this accordingly.
N=10080#the number of samples
T=N*timestep
t = np.linspace(0,T,N)#needed only to generate xAcc_synthetic
freq=2.#peak a frequency at 2Hz
#generate synthetic signal at 2Hz and add some noise to it
xAcc_synthetic = sin((2*np.pi)*freq*t)+np.random.rand(N)*0.2
sp_synthetic = np.fft.fft(xAcc_synthetic)
freq = np.fft.fftfreq(t.size,d=timestep)
print max(abs(freq))==(1/timestep)/2.#simple check highest freq.
plt.plot(freq, abs(sp_synthetic))
xlabel('Hz')

現在,在等於2的x軸上,您實際上具有2Hz的物理頻率,並且您可能會發現要尋找的更明顯的峰。 此外,您可能還想看看yAcc和zAcc。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM