gpt4 book ai didi

python - 如何在python中提取特定频率的峰值

转载 作者:太空宇宙 更新时间:2023-11-03 15:02:50 24 4
gpt4 key购买 nike

我想知道信号中特定频率的能量有多少。我正在使用 FFT 获取频谱,频率步长由我的信号长度决定。

例如,我的光谱看起来像这样: Spectrum, the red line is where I want a value, but falls between two frequencies

我想获得特定频率处的频谱峰值,-0.08。然而,光谱的离散化只给我在 -0.0729 和 -0.0833 处的峰值。

有没有办法移动频谱以确保在我想要的频率上有一个数据点?或者无需使用 fft 即可获取值的方法?

非常感谢!

最佳答案

当您进行 DFT(或任何傅立叶变换)时,您实际上在做的是测量您的信号与特定频率的正弦波“相交”的程度。这是通过将信号的乘积与任何频率的波的复共轭相加来完成的。从技术上讲,这称为内积,它是点积的推广,衡量一个信号与另一个信号的“接近”程度。因此,如果您只对一种频率感兴趣,请不要进行整个 DFT,只需查看您想要的频率即可。

我不确定你的单位是什么,所以我假设你想要 f0 = -0.08 Hz 处的峰值(如果你的单位是其他单位,比如归一化到采样频率,那么你需要考虑为了那个原因)。这对应于复指数 exp(2*pi*j*f0*t)。因为您正在采样,所以您的 t 是离散的,所以 t = n/fs,其中 fs 是采样频率(以 Hz 为单位)。

# assuming you're using numpy arrays
w = exp(-2*pi*1j*f0*arange(len(signal))/fs)
peak = abs(sum(signal*w))

DFT有不同的定义;我很确定 numpy 对应于我上面的内容。指数中的额外减号是因为它是复共轭。

请注意,w 实际上不太可能是周期性的。如果样本数量足够大,这并不重要。一个好的启发式算法至少有 10 个周期。

关于python - 如何在python中提取特定频率的峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36015530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com