我正在寻找一种估算信号功率的好方法(定期采样10 kHz),而不是一个频率(比如50 Hz)的时间。我可以计算频谱图,然后在目标频率上拍摄一片。这似乎效率低下,因为我只关心一个频率对时间的功率。我意识到正好一个频率的功率为零(在极限范围内),我想在目标频率附近的一个小频率间隔内计算信号的功率。
我当前的“解决方案”是使用Matplotlib的mlab.specgram()函数,该函数返回2d数组,我只是将其切片。我对此并不满意,因为我不完全信任mab.specgram()函数,因为在不同的信号上计算频谱图所需的时间差别很大(即使长度相同)。
答案 0 :(得分:7)
有很多方法可以做到这一点。一种原始但有效的方法是应用带通滤波器(50Hz),从而消除所有其他信号,然后计算最后N个样本的RMS功率。
另一个是你可以做一个窗口FFT,但实际上不是FFT - 只需计算你想要的bin。窗口可以是你想要的任何东西(例如带有alpha 8的Kaiser)。单个bin的DFT只是信号乘积的总和e ^(i * n * w)(其中w在采样率下为50Hz,而迭代器为n)。
可能比这更简单。这取决于你想要弹性的东西,信号移动的速度,以及你是否期望混音中的噪音或其他信号。如果你不想从别人的杂音中挑选出一个信号,你就不必费力了。