【发布时间】:2018-12-08 07:58:30
【问题描述】:
我正在尝试在由 100Hz PWM 驱动器驱动的螺线管的电流信号中找到频谱。信号以 19200 Hz 采样。
以下是信号图。该信号是较长时间序列数据的一部分。从 22 秒点中提取 1024 个数据点。
以下代码用于分析
import numpy as np
import matplotlib.pyplot as plt
plt.figure(1)
plt.plot(t,y)
Fs=19200 # (Hz) sampling rate
N=len(y) # length of signal
time=N/Fs #total time of signal, 1/time is the fundamantal frequency
freq=np.arange(N)/time # frequency vector for fft spectrum plot
freq=freq[0:int(N/2)] # one sided frequecy
Y=np.fft.fft(y)/N*2 # fft of signal
Y=Y[0:int(N/2)] # one sided frequency
plt.figure(2)
plt.plot(freq,abs(Y)) # one sided frequency plot
plt.xlabel("Hz")
plt.ylabel("Units")
plt.title("FFT spectrum")
plt.grid()
plt.show()
人们会期望频谱中占主导地位的 100 Hz 分量,但 numpy fft 结果并未反映这一点。以下是numpy.fft 频率图。
以下是类似信号的 Matlab fft 分析图。正如预期的那样,有一个占主导地位的 100Hz 分量和谐波。
【问题讨论】:
-
显然第二张图片只是您的数据,但比例不同。没有计算 fft。如果您没有输入
y而不是Y,请检查您的代码。这里没有错字,但这是唯一的解释 -
请始终运行您在此处发布的代码。发布的代码显然没有生成给定的图表。阅读更多相关信息:minimal reproducible example。
-
我已经用测试数据信号(T=1, t=np.arange(0,T,1/Fs), y=2 + 4*np.sin(3*) 测试了代码2*np.pit)+13*np.sin(9*2*np.pit) 和 numpy fft 正确识别具有相应幅度的 2 和 3Hz 和 9Hz 正弦分量的 DC 分量. 我不确定为什么在当前信号上没有正确计算 fft。