用Python-Numpy/Scipy实现FFT确定超低频过程

2024-06-08 17:36:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始分析从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天是很明确的(更大的值) ScreenShot of graphs

我无法正确分析图表,但如果我向y值添加第二个纯正弦波信号,并且不过滤总和,我可以从FFT中检索正弦频率。
由于日常过程的频率应为1.0E-5hz,因此很难读取FFT。你知道吗

我怎样才能得到这个频率?我是否应该考虑将原始数据加速1.0E5,然后以1Hz的频率获得图片?你知道吗

下面是一个pythonfidle,其中的数据数组存储在y变量中:http://pythonfiddle.com/fft-test


Tags: 数据fftplotis过程绘制scipy频率
1条回答
网友
1楼 · 发布于 2024-06-08 17:36:40

嗯,我会玩采样频率。如果你想得出一些结论,假设,在天的尺度上,为什么不设置这样的采样频率,在得到的FFT中1hz将对应于每天1个振荡而不是每秒1个振荡?以下步骤取决于您的数据。你知道吗

另外,我不确定,因为我看不到整个脚本,但是当你调用butter并使用cutoff/(t/2)作为参数时,它不应该是Hz单位吗?因为现在似乎只是一个数字:

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

相关问题 更多 >