首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的plot numpy fft返回错误的plot

python中的plot numpy fft返回错误的plot
EN

Stack Overflow用户
提问于 2020-08-13 20:50:28
回答 2查看 273关注 0票数 0

我正在尝试使用numpy fft来绘制来自数据帧的一些数据:

代码语言:javascript
复制
plt.plot(np.fft.fft(df_valid_daily_activity.stepsDaily))

我明白了:

我不明白为什么剧情在一开始是如此陡峭,然后似乎趋于稳定?我还收到了这样的警告:

代码语言:javascript
复制
Casting complex values to real discards the imaginary part
  return array(a, dtype, copy=False, order=order)

我尝试绘制的数据示例:

代码语言:javascript
复制
2      12693.0
3      18387.0
4      18360.0
5      11684.0
6      12722.0
        ...   
273    27836.0
274    15566.0
280     7836.0
281    17787.0
284     7739.0
Name: stepsDaily, Length: 199, dtype: float64 

你知道为什么吗?谢谢!

编辑:尝试减去均值-看起来仍然很奇怪

EN

回答 2

Stack Overflow用户

发布于 2020-08-14 00:11:01

您正在使用的函数是一个完全复数的傅立叶变换:当应用于实际数据时,它将对称为零。您可以做两件事:使用np.fft.fftshift将数据移位,使零频率位于中间(或者使用np.fft.fftfreq计算频率),或者使用np.fft.rfft,这是对实际数据的转换,将返回完整FFT的一半。

如果能知道你对FFT的预期用途,那就太好了。大多数人(包括我自己)实际上只对数据中存在的频率感兴趣。为此,可以使用FFT的幅值平方(通常在对数刻度上)的曲线图。

票数 1
EN

Stack Overflow用户

发布于 2020-08-14 00:58:57

我想发表评论,但因为我的名声,我不能:)

我想你应该尝试一下logscale图。首先,建议使用numpy.fft.fftshift“将零频率分量移到频谱的中心”。

代码语言:javascript
复制
import random
import matplotlib.pyplot as plt
import numpy as np
f = [random.randint(5000, 20000) for i in range(300)]
ff = np.fft.fftshift(f)

现在以“semilogx”、“semilogy”和“loglog”比例绘制:

Semi Log X

Semi Log Y

Log Scale Both

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63395565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档