4

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

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

4

1 回答 1

7

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

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

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

于 2011-02-10T04:21:23.583 回答