Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ FFT的预测涂抹_C++_Signal Processing_Fft - Fatal编程技术网

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我认为这比数学更相关