如何在python中提取特定频率的峰值
我想知道信号中特定频率下有多少能量。我用FFT得到频谱,频率步长由信号的长度决定 例如,我的光谱看起来如下: 我想得到特定频率下的频谱峰值,-0.08。然而,光谱的离散化仅给出-0.0729和-0.0833处的峰值 有没有办法改变频谱以确保在我想要的频率上有一个数据点?还是一种不必使用fft就可以得到值的方法如何在python中提取特定频率的峰值,python,fft,spectrum,frequency-analysis,Python,Fft,Spectrum,Frequency Analysis,我想知道信号中特定频率下有多少能量。我用FFT得到频谱,频率步长由信号的长度决定 例如,我的光谱看起来如下: 我想得到特定频率下的频谱峰值,-0.08。然而,光谱的离散化仅给出-0.0729和-0.0833处的峰值 有没有办法改变频谱以确保在我想要的频率上有一个数据点?还是一种不必使用fft就可以得到值的方法 多谢各位 如果你有离散数据,但需要一个连续变量的输出,你就需要某种插值函数。对于请求值样式,我建议使用Scipy interp1d()。我相信这是达到预期效果的最快方法。当你进行DFT(
多谢各位 如果你有离散数据,但需要一个连续变量的输出,你就需要某种插值函数。对于请求值样式,我建议使用Scipy interp1d()。我相信这是达到预期效果的最快方法。当你进行DFT(或任何傅里叶变换)时,你实际做的是测量你的信号有多少与特定频率的正弦“相交”。这是通过将信号的乘积与任意频率的波的复共轭求和来实现的。从技术上讲,这被称为内积,它是点积的推广,用于测量信号与另一信号的“接近程度”。因此,如果你只对一个频率感兴趣,不要考虑整个DFT,只要看一个你想要的 我不确定你的单位是什么,所以我假设你想要f0=-0.08赫兹的峰值(如果你的单位是其他单位,比如标准化为采样频率,那么你需要考虑)。这对应于复指数exp(2*pi*j*f0*t)。因为您正在采样,所以t是离散的,因此
t=n/fs
,其中fs是采样频率(以Hz为单位)
DFT有不同的定义;我很确定numpy的对应于我上面所说的。指数中的额外负数是因为它是复数共轭
注意,w实际上不太可能是周期性的。如果样本数量足够大,这并不重要。一个好的启发方法是至少10个周期。非常感谢,这正是我想要的!你是对的,不需要在这里测量整个频谱。测量你的信号有多少与特定频率的正弦“相交”——直到现在我终于知道了,离学校5年了
# assuming you're using numpy arrays
w = exp(-2*pi*1j*f0*arange(len(signal))/fs)
peak = abs(sum(signal*w))