【问题标题】:how to estimate the (power of a signal at a given frequency) vs. time in python如何在python中估计(给定频率的信号功率)与时间的关系
【发布时间】:2011-06-24 14:33:03
【问题描述】:

我正在寻找一种很好的方法来估计信号的功率(例如以 10 kHz 定期采样)与仅在一个频率(例如 50 Hz)下的时间。我可以计算频谱图,然后以目标频率对其进行切片。不过,这似乎效率低下,因为我只关心一个频率与时间的功率。我意识到恰好一个频率的功率为零(在极限内),我想在目标频率附近的一个小频率间隔内计算信号的功率。

我目前的“解决方案”是使用 Matplotlib 的 mlab.specgram() 函数,它返回一个二维的幂数组,我只是将它切片。不过我对此并不满意,因为我并不完全信任 mab.specgram() 函数,因为计算不同信号的频谱图需要的时间截然不同(即使它们的长度相同)。

【问题讨论】:

    标签: python matplotlib signal-processing scientific-computing


    【解决方案1】:

    有很多方法可以做到这一点。一种粗略但有效的方法是应用带通滤波器(50Hz),从而消除所有其他信号,然后计算最后 N 个样本的 RMS 功率。

    另一个是您可以进行窗口 FFT,但实际上不能进行 FFT - 只需计算您想要的 bin。窗口可以是任何你想要的(例如带有 alpha 8 的 Kaiser)。单个 bin 的 DFT 只是信号与 e^(i*n*w) 的乘积之和(其中 w 在您的采样率下为 50Hz,n 为迭代器)。

    可能还有比这更简单的方法。这取决于您尝试适应的内容、信号移动的速度以及您是否期望混音中出现噪声或其他信号。如果您不想从其他嘈杂的声音中挑选出一个信号,那么您不必费尽心思。

    【讨论】:

    • 你说得对,我想得不够简单。过滤的东西非常简单,并且具有稍后很容易解释的好处。谢谢!
    • 您在第二段中描述的技术被称为 Goertzel 算法 - 请参阅 en.wikipedia.org/wiki/Goertzel_algorithm
    • 哦,我自己想出了这个。我打算将其命名为 Ripley 算法 :) 感谢您的参考!
    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 2014-11-24
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多