繁体   English   中英

从 FFT 获取幅度最高的频率

[英]Get frequency with highest amplitude from FFT

我有 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 获得幅度最高的频率值吗?

此处提供完整代码

我建议你远离你的代码,首先掌握执行 fft 调用的能力,并理解该调用返回的结果......要么读入已知频率的正弦曲线,要么只编写一个函数来填充数组浮点 sin 曲线(这是您的时域信号)……然后将该数组输入到 fft 调用中,该调用通常会返回给您一个新的复数数组……这个新数组的每个元素现在都在频域表示一个频率值......一个频率仓......该频率的幅度可以使用

nyquist_limit_index := int(number_of_samples / 2)

curr_freq := 0.0
incr_freq := flow_data_spec.sample_rate / number_of_samples

for index, curr_complex := range complex_fft { 

    if index <= nyquist_limit_index  {

        curr_real = real(curr_complex) // pluck out real portion of imaginary number
        curr_imag = imag(curr_complex) // ditto for im

        curr_mag = 2.0 * math.Sqrt(curr_real*curr_real+curr_imag*curr_imag) / number_of_samples

        curr_theta = math.Atan2(curr_imag, curr_real) // phase shift of this freq

        curr_dftt := discrete_fft { // populate a struct of current array element

            real:      2.0 * curr_real,
            imaginary: 2.0 * curr_imag,
            magnitude: curr_mag,
            theta:     curr_theta,
        }

        //  optionally stow curr_dftt for later
    }

    curr_freq += incr_freq
}

其中 number_of_samples 只是您输入 fft 调用的时域数组的长度

上面的代码向您展示了如何遍历从较早的 fft 调用返回给您的复数频域数组……上面是伪代码,而不是 python,但您的过程可能非常相似

要识别幅度最大的频率( curr_freq ),只需跟踪哪个 curr_freq 在上述循环中具有最大幅度......在我们的玩具设置中,您可能很清楚源输入正弦曲线的频率,因此应该弹出相同的频率上面最大量级的 curr_freq ......在你开始工作并且它的概念被理解之后,然后将你学到的知识应用到你手头的任务中 - 祝你好运

傅里叶分析及其各种咒语非常强大,可以打开许多门。 这是一个需要思考的话题,但如果我们允许自己简单地将一些 api 调用插入到一起来让一些东西工作,我们确实错过了一些非常神奇的东西

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM