C++ FFT的预测涂抹
对信号应用傅里叶变换后,单个正弦波的能量通常会分散到多个存储单元(也称为涂抹)。查看下图右侧的图示: 我想提取一个峰值频率列表。只要找到最高的垃圾箱就很容易了。但在那之后,污点就成了一个问题 我想有一个启发,告诉我一个特定箱子的大小是否可能是涂抹的结果,或者如果有另一个峰值频率来解释信号。(如果我错过了一些,总比误报好) 我天真的方法是只计算几千个示例,并取其中的最大值来获得包络曲线,以便任何涂抹都可能低于该包络线C++ FFT的预测涂抹,c++,signal-processing,fft,C++,Signal Processing,Fft,对信号应用傅里叶变换后,单个正弦波的能量通常会分散到多个存储单元(也称为涂抹)。查看下图右侧的图示: 我想提取一个峰值频率列表。只要找到最高的垃圾箱就很容易了。但在那之后,污点就成了一个问题 我想有一个启发,告诉我一个特定箱子的大小是否可能是涂抹的结果,或者如果有另一个峰值频率来解释信号。(如果我错过了一些,总比误报好) 我天真的方法是只计算几千个示例,并取其中的最大值来获得包络曲线,以便任何涂抹都可能低于该包络线 但是有更好的方法吗?任何矩形加窗纯未调制正弦信号的FFT结果都是Sinc函数。
但是有更好的方法吗?任何矩形加窗纯未调制正弦信号的FFT结果都是Sinc函数。该Sinc(sin(pix)/(pix))函数对于除一个(峰值幅值)外的所有仓仅为零,当输入正弦频率在FFT宽度中正好具有整数个周期时 对于不在FFT结果箱精确中心的所有其他频率,如果您知道该精确频率和幅值(不在任何单个FFT箱中),则可以通过对Sinc函数进行采样来计算所有其他箱
当然,如果输入正弦波不是完全纯净的,而是以任何方式(振幅、频率或相位)调制的,这种调制也会在FFT结果中产生各种边带。这适用于任何特定的编程语言吗?如果不是,也许你会更幸运地问这个问题。为什么不在FFT之前使用一个合适的窗口函数,这样你就不必担心频谱泄漏?您的峰值也将因此更加准确。@PaulR这将大大降低问题的严重性,而不会实际解决问题,因为我仍然需要一个新的涂抹行为的启发式方法。@PaulR是正确的,您需要一个更好的窗口功能。你所说的“涂抹”是信号的实际频率,它不是FFT产生的伪影。@GoBusto我认为这比数学更相关