400Hz采样振动信号FFT绘图前端异常及参数T定义正确性问询
问题1解答:你定义的参数T不正确
采样率为400Hz时,采样间隔(相邻两个采样点的时间差)应为:T = 1.0 / 400.0
你当前设置的T = 1.0 / 800.0相当于误将采样率判定为800Hz,直接导致生成的频率轴xf范围错误:按照你当前的参数计算,频率轴最大值为400Hz,但400Hz采样率的信号奈奎斯特频率仅为200Hz,超过200Hz的频谱全部是混叠无效值,相当于真实频谱被压缩到了图中最左侧0-200Hz区间,这就是你看到的“绘图前端奇怪”的核心原因。
问题2解答:异常不是噪声导致的
当前绘图结果本身不符合真实频谱,除了上述T参数错误的核心问题外,你没有对时域信号加窗函数,也会引发频谱泄漏,让频谱看起来毛刺偏多。
修正后的参考代码
import numpy as np import matplotlib.pyplot as plt from scipy.fftpack import fft # 采样率400Hz,采样间隔正确值 T = 1.0 / 400.0 y = df['Vibra0_X'].head(400).values N = len(y) # 可选择加汉宁窗减少频谱泄漏,不需要的话注释下一行即可 y = y * np.hanning(N) yf = fft(y) xf = np.linspace(0.0, 1.0/(2.0*T), N//2) fig, ax = plt.subplots() ax.plot(xf, 2.0/N * np.abs(yf[:N//2]), linestyle='-', color='blue') plt.ylabel('Amplitude') plt.xlabel('Frequency [Hz]') plt.title("Frequency domain of the signal", fontsize=16) plt.show()
内容的提问来源于stack exchange,提问作者Adler Müller
相关产品推荐
相关产品推荐

