簡體   English   中英

plot numpy fft 在 python 返回錯誤 Z32FA6E1B78A9D4028953E60564A2AAC4

[英]plot numpy fft in python returns wrong plot

我正在嘗試使用 numpy fft 到 plot 來自 dataframe 的一些數據:

plt.plot(np.fft.fft(df_valid_daily_activity.stepsDaily))

我明白了: 在此處輸入圖像描述

我不明白為什么 plot 開始時如此陡峭,然后似乎趨於穩定? 我也收到此警告:

Casting complex values to real discards the imaginary part
  return array(a, dtype, copy=False, order=order)

我正在嘗試 plot 的數據示例:

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 

任何想法為什么? 謝謝!

編輯:嘗試減去平均值 - 仍然看起來很奇怪在此處輸入圖像描述

您使用的 function 是一個完整的復數傅里葉變換:當應用於實際數據時,它將關於零對稱。 您可以做兩件事:使用np.fft.fftshift移動數據,使零頻率位於中間(或使用np.fft.fftfreq來計算頻率)或使用np.fft.rfft來轉換真實數據,並將返回完整 FFT 的一半。

最好知道您對 FFT 的預期用途。 大多數人(包括我自己)真的只對數據中存在的頻率感興趣。 為此,可以使用 FFT 的幅度平方(通常為對數刻度)的 plot。

我想發表評論,但由於我的聲譽我不能發表評論:)
我想您應該嘗試使用對數刻度圖。 首先,建議使用numpy.fft.fftshift來“將零頻分量移到頻譜中心”。

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”比例繪制:
半原木 X
半對數 Y
對數刻度兩者

暫無
暫無

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

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