数学.Net和alglib默认返回不同的FFT输出



我正在C#中开发一个具有声谱图绘制功能的应用程序。

在我的第一次尝试中,我使用了MathNet。数码学,现在我将继续使用alglib进行开发。当我从一个转换到另一个时,我注意到它们的输出不同。Mathnet默认情况下使用某种校正,而alglib似乎忽略了这种校正。我对信号处理不是很感兴趣,也是编程的新手,我不知道区别到底是什么。

在我的情况下,MathNet默认输出(原始幅值(值的范围从~0.1到~274。使用alglib,我得到的值范围从~0.2到~6220。

我发现了MathNet傅立叶。"前进"使用默认的缩放选项。这里说,FourierOptions。默认值为"通用;对称缩放和通用指数(在Maple中使用("https://numerics.mathdotnet.com/api/MathNet.Numerics.IntegralTransforms/FourierOptions.htm如果我使用FourierOptions。NoScaling,输出与alglib生成的结果相同。

在MathNet中,我使用了傅立叶。正向功能:https://numerics.mathdotnet.com/api/MathNet.Numerics.IntegralTransforms/Fourier.htm#Forward在alglib的情况下,我使用了fftr1d函数:https://www.alglib.net/translator/man/manual.csharp.html#sub_fftr1d

  • 他们的计算有什么不同
  • 我可以使用什么函数将alglib输出幅度转换为MathNet的输出幅度,反之亦然
  • 在什么情况下,我应该使用这些不同的"刻度"?它们到底是干什么的

请分享您的知识。提前感谢!

在阅读了一堆提到FFT输出缩放不同方法的帖子后,我自己解决了这个问题。我仍然发现FFT处理的这一方面到处都没有文档记录。我还没有找到任何可靠的来源来解释这些刻度的用途,哪些科学领域或哪些处理方法使用它们。

我还发现了三种不同的缩放,关于原始FFT输出(复数的幅度(。这意味着将它们乘以:1。1/numSamples 2。2/numSamples 3。1/sqrt(numSamples(4。(无缩放(

MathNet。IntegralTransforms。傅立叶。Forward函数(根据网上的各种帖子,也可能是Matlab和Maple(默认使用第三个。在我看来,当使用对数着色时,这会产生更好的可区分图形输出。

如果你知道一些事情并分享你的想法,或者你能参考一篇好的论文来解释这些,我仍然会很感激。

最新更新