【发布时间】:2015-07-16 12:38:31
【问题描述】:
我正在尝试确定信号的最主要频率。然而,当人为地创建一个 50 Hz 信号并应用足够的零填充来提高 fft 分辨率时,我得到了 49,997 Hz 的最高频率。对于我的应用程序,这是一个显着的差异。我在这里做错了吗?
import numpy as np
import matplotlib.pyplot as plt
fs = 2**12
x = np.linspace(0,1,fs+1)
signal = np.sin(50*2*np.pi*x)
spect = abs(np.fft.fft(np.append(signal,np.zeros(999*fs))))
plt.figure('Four Coef')
plt.plot(spect)
plt.axis([49995,49999,2048.01,2048.05])
plt.show()
请注意,由于零填充,系数 49997 对应于 49,997 Hz 的频率。
编辑:该数组正好代表 1 秒的 50 Hz 信号。最后 999 秒为零,以便将 fft“分辨率”提高到 1 mHz。我只有 1 秒的可用信号,我需要最高频率,精确到 mHz
更改采样率fs = 2**8 给出的最大值为 49.999,所以我认为这里的采样方式很关键...
【问题讨论】:
-
使用
signal = np.sin(50*2*np.pi*x)估计实际上返回 0.837 Hz 而不是 1 Hz
标签: python numpy signal-processing fft frequency-analysis