python - SciPy 的 FFT 输出令人困惑,或者我可能误解了
问题描述
我正在对一维信号应用 SciPy 包中的 FFT。该信号以 512hz 采样率捕获,这意味着 1 秒内有 512 个数据点。我总共有 5 分钟的数据。
当我使用下面的代码从 SciPy 对该信号应用 FFT 时,我会立即将 FFT 应用于整个信号。据我了解,当我对采样率为 512 的信号应用 FFT 时,FFT 被应用到前 512 个点,然后是接下来的 512 个数据点,依此类推,但这里 FFT 一次应用于整个信号,我不明白.
import numpy as np
import pandas as pd
from scipy.stats import zscore
from scipy.fft import fft, fftfreq,rfft, rfftfreq
import matplotlib.pyplot as plt
df = pd.read_csv("data.csv")
df = df.drop('Unnamed: 0',axis=True)
print(df.head())
# measuring the fft of the signal
def plotFFT(df):#,cleanDF):
sampleRate = 512 # Hz
duration = df.shape[0]
xf = rfftfreq(duration,1/sampleRate)
yf = rfft(df['value'])
fig = plt.figure(num='FFT of signal', figsize=(20,10))
plt.plot(xf,np.real(yf),label='raw')
plt.legend()
plt.grid()
plt.draw()
plt.waitforbuttonpress(0)
plt.close(fig)
plotFFT(df)
当我换线时
yf = rfft(df['value'])
至
yf = rfft(df['value'],n=sampleRate)
我收到此错误:
C:\ProgramData\Anaconda3\python.exe C:/Users/BLACK/Desktop/PythonXperiments/FFTScipy/main.py
Traceback (most recent call last):
File "C:/Users/BLACK/Desktop/PythonXperiments/FFTScipy/main.py", line 29, in <module>
plotFFT(df)
File "C:/Users/BLACK/Desktop/PythonXperiments/FFTScipy/main.py", line 21, in plotFFT
plt.plot(xf, np.real(yf), label='raw')
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 2840, in plot
return gca().plot(
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py", line 1743, in plot
lines = [*self._get_lines(*args, data=data, **kwargs)]
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 273, in __call__
yield from self._plot_args(this, kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 399, in _plot_args
raise ValueError(f"x and y must have same first dimension, but "
ValueError: x and y must have same first dimension, but have shapes (53378,) and (257,)
解决方案
推荐阅读
- karate - 无法使用断点进行使用 VScode 扩展的调试
- python - 内核启动资源不足
- python - Python pandas 剪切第一个字符和过去
- java - 当我从 Android 10 更新到 11 时,我得到“打开失败:EACCES(权限被拒绝)”
- amazon-web-services - 我不知道如何在golang中使用flutter发送的数据
- amazon-web-services - 如何在没有 AWS Cognito 或 AWS 用户池的情况下使用 AWS Amplify Auth
- database - OWB (Oracle Warehouse Builder) 迁移助手遇到无效替换错误
- sbt - 在 SBT shell 中,为什么要在调用任务之前将某些子项目设置为活动状态?
- php - 将复杂的 word doc 转换为 pdf,能够使用 PHP/Laravel 将变量替换为 html 标签
- python - 如何在具有各自位置的列中插入另一列值?