簡體   English   中英

使用Python Numpy / Scipy進行FFT確定超低頻過程

[英]FFT Determining ultra low frequency processes using Python Numpy/Scipy

我正在開始分析從csv文件獲得的低頻數據(能量監測)。
我檢索了數據(大約12000點,但可能會更多),並且我知道每分鍾都有一個數據。
該采樣率始終相同。

當我繪制數據時,似乎是一個重復的過程(每天,每周和每月)。 所以我想我在繪制FFT時應該會看到超低頻。

這是我的代碼,到目前為止。 我不會向您展示我檢索數據的那部分,因為它不是很真實。
我還添加了一個低通濾波器來獲得類似竇性的功能。

## DATAS x-axis is x
## DATAS y-axis is y
# Number of Points ie 12000 points
N = len(y)
# 1 Sample per minute
T = 1 / 60.0
# Lowpass cutoff frequency 
cutoff = 0.0001 

x = np.linspace(0, T * N , N) 
B, A = butter(4, cutoff / (T / 2), btype='low') 
filterdY = lfilter(B, A, y, axis=0)

# Generating FFT
Fourier = abs(scipy.fft(filterdY));
freqs = scipy.fftpack.fftfreq(filterdY.size, x[1]-x[0])

pylab.subplot(311)
pylab.plot(x, y)
pylab.subplot(312)
pylab.plot(x, filterdY)
pylab.subplot(313)
pylab.plot(freqs,20*scipy.log10(Fourier),'x')
pylab.show()

這是我繪制的圖形的屏幕截圖。
它顯示了一周的能源消耗,並且您可以看到,定義了5天(更大的值) 屏幕截圖

我無法正確分析該圖,但如果將第二個純正弦波信號添加到y值,並且不對總和進行濾波,則可以從FFT中檢索正弦頻率。
由於日常處理的頻率應為1.0E-5 Hz,因此很難讀取FFT。

我如何獲得這個頻率? 我是否應該考慮將原始數據加速1.0E5,然后以1Hz的頻率獲取圖片?

這是一個將數據數組存儲到y變量中的pythonfiddle: http ://pythonfiddle.com/fft-test

好吧,我會玩采樣頻率。 如果您想得出一些結論,那么,以天為單位,為什么不設置采樣頻率,以使FFT中的1 Hz對應於每天1次振盪而不是每秒1次振盪? 以下步驟取決於您的數據。

PS我不確定,因為我看不到整個腳本,但是當您調用butter並使用cutoff /(T / 2)作為參數時,它是否應該以Hz為單位? 因為現在似乎只是一個數字:

T = [1 / s]; 截止= [Hz] = [1 / s]; =>截止/(T / 2)= [1 / s] / [1 / s] = 1

暫無
暫無

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

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