【问题标题】:Smoothing FFT graph in Python在 Python 中平滑 FFT 图
【发布时间】:2017-11-28 03:52:52
【问题描述】:

我想对在 200Hz 获得的 FFT 图进行平滑处理(我目前捕获了 500 个点),以便在 THIS 附近显示代表峰值。

这是我的代码:

N = 500
T = 5/1000
y1 = np.array(data_Ax)
yf1 = scipy.fftpack.fft(y1)
xf1 = np.linspace(0.0, 1.0/(2.0*T), N/2)
yfft1 = 2.0/N * np.abs(yf1[:N//2])

plt.figure(figsize=(20, 3), dpi= 100, facecolor='w', edgecolor='k')
plt.plot(xf1, yfft1, 'g-', label ="FFT for Ax")
plt.xlabel('Frequency [Hz]')
plt.legend(loc=1)

为了平滑我尝试使用这个:

rft = np.fft.rfft(yfft1)
y_smooth = np.fft.irfft(rft)

但是没有任何作用。

我很清楚 200Hz 是一个低采样频率,500 次测量并不多,但这只是为了掌握程序的窍门。这是获得的图表:

我想知道:

  1. 如何平滑图形?
  2. 如何去除 0Hz 处的峰值(高通滤波器)?
  3. 从理论上讲,代表性 FFT 图是否有最小测量次数要求?

感谢您的任何帮助!

L

【问题讨论】:

    标签: python python-3.x scipy signal-processing fft


    【解决方案1】:

    首先,我建议您获取超过 500 个样本。那只是 2.5 个周期

    使用 Welch 的方法应该有助于获得更平滑的图形。

    doc scipy

    【讨论】:

      【解决方案2】:

      平滑图:

      我想你真正关心的是增加分数。因此,只需指定要使其看起来更平滑的点数即可。

      例如,这里是与测量点数相同的 FFT:

      n = 500
      nfft = n
      
      t = np.linspace(0, 0.1, n)
      y = 0.5 + np.sin(2*np.pi*60*t)
      yf = fftshift(fft(y, nfft))
      
      f = fftshift(fftfreq(nfft, np.mean(np.diff(t))))
      
      pyplot.plot(f, abs(yf))
      pyplot.grid()
      pyplot.xlim([-100, 100])
      

      如果您将 fft 点的数量更改为 4096,即nfft=2**12,那么您将获得更平滑的图形。

      去除 0 Hz 处的峰值

      如果您只关心 DC 值,那么只需减去平均值。根据上面的示例,您可以将第 5 行更改为

      yf = fftshift(fft(y - np.mean(y), nfft))
      

      你得到没有基带的 FFT。

      最少点数

      从理论上讲,您只需要满足奈奎斯特率即可。但是对于视觉效果,FFT 中的频率间隔为 Fs/N。因此,如果您的采样率为 500 Hz 和 500 个点,则点之间的间距为 1 Hz,如果您的带宽为 5 Hz,这可能还不够,因此您可以通过对信号进行零填充来增加 FFT 的点数,或者降低采样率(只要它高于奈奎斯特)...

      【讨论】:

        【解决方案3】:

        您是否尝试过使用 scipy 模块的高斯滤波器。试试看:https://docs.scipy.org/doc/scipy-0.16.1/reference/generated/scipy.ndimage.filters.gaussian_filter.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-23
          • 1970-01-01
          • 2015-03-26
          • 2017-03-21
          • 1970-01-01
          • 1970-01-01
          • 2018-03-19
          • 1970-01-01
          相关资源
          最近更新 更多