我有原始的加速度计数据的形式的x,y,z轴,这是平滑的,我应用了带通滤波器。现在我想把它转换成频域信号,并使用scipy.fftpack.fft
来应用FFT。在
sampling_frequency = 32
def fft(acc_data):
N = len(acc_data)
fft_data = sp.fftpack.fft(acc_data)
freqs = sp.fftpack.fftfreq(N)
plt.bar(freqs, np.abs(fft_data))
plt.xlabel('Frequency in Hertz [Hz]')
plt.ylabel('Magnitude')
plt.title('FFT')
plt.show()
此图未绘制点,为空。fft的返回值是一个复数组。我用fftfreq
得到最高振幅的频率。在
有人能指出错误的地方吗?或者举例说明如何应用FFT得到最高振幅的频率值?在
完整的代码是可用的here
我建议你远离你的代码,首先掌握执行fft调用的能力,然后理解调用返回的结果。。。要么读入已知频率的sin曲线,要么编写一个函数,用浮点sin曲线填充数组(这是您的时域信号)。。。然后把这个数组输入一个fft调用,它通常会返回一个新的复数数组。。。这个新阵列的每个元素现在在频域中代表一个频率值。。。一个频率盒。。。频率的大小可以用
其中number_of_samples是输入到fft调用中的时域数组的长度
上面的代码向您展示了如何在先前fft调用返回给您的复数的频域数组中迭代。。。上面是伪代码,不是python,但您的过程可能非常相似
要识别最大振幅的频率(电流频率),只需跟踪在上述回路中哪个电流频率的幅值最大。。。在我们的玩具设置中,你可能很清楚你的源输入sin曲线的频率,因此相同的频率应该弹出作为电流频率最大的幅度在上面。。。当你完成了这项工作,并且它的概念被接受了,然后把你所学的应用到你手头的任务上-祝你好运
傅里叶分析和它的各种咒语是非常强大的,可以打开许多门。这是一个需要思考的话题,但是如果我们允许自己简单地将一些api调用连接在一起以使某些功能正常工作,我们确实错过了一些非常神奇的东西
相关问题 更多 >
编程相关推荐