gpt4 book ai didi

C# MathNet FFT 定义

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

从 MathNet 测试 FFT 时遇到一些问题:这个想法是,如果我将 FFT 应用于高斯变量的特征函数,我应该找到高斯密度函数。

当我绘制 VectorFFT 时,该图看起来确实是一个密度函数,但在零时它没有值 1,它的值为 1.4689690914109。

缩放一定有问题。我在 Fourier.Inverse 中尝试了所有类型的 FourierOptions 以及 PI、2PI、sqrt(2PI) 的所有类型的除法/乘法,但没有任何东西给我密度函数中心的值 1。

此外,由于存在各种傅里叶变换及其逆变换的定义,我想知道哪一个是由 MathNet 实现的,我在文档中找不到它。

有什么想法吗?

public void DensityGaussian()
{
double eta = 0.1; //step in discrete integral
int pow2 = 256; // N^2
double mu = 0; // centred gaussian
double sigma = 1; // with unitary variance

//FFT
double lambda = 2 * System.Math.PI / (pow2 * eta);
double b = 0.5 * pow2 * lambda;

Complex[] VectorToFFT = new Complex[pow2];
for (int j = 0; j < pow2; j++)
{
double z = eta * j;

if (z == 0) { z = 0.00000000000001; }

VectorToFFT[j] = System.Numerics.Complex.Exp(new Complex(0, b * z));
VectorToFFT[j] *= (System.Numerics.Complex.Exp(new Complex(
-sigma*sigma*z*z, mu * z))); //char function of gaussian
}

Fourier.Inverse(VectorToFFT, FourierOptions.NoScaling);

//scaling
for (int i = 0; i < pow2; i++)
{
VectorToFFT[i] /= (2 * System.Math.PI); //test
}


Console.WriteLine("Is density?");
Assert.IsTrue(1 == 1);
}

最佳答案

Math.NET Numerics 支持所有常见的 DFT定义,可通过 FourierOptions 标志枚举进行控制。它们在指数和缩放比例上本质上是不同的。

FourierOptions docs给出一些关于选项如何影响有效定义的提示,本质上:

  • InverseExponent:在指数中使用负号(默认使用正号)。一个带有负号的突出实现是数字食谱。
  • AsymmetricScaling/NoScaling:不是默认的对称缩放 sqrt(1/N) 要么只在逆变换中缩放 1/N(如 Matlab)或不缩放完全没有(比如数字食谱)。显然,没有缩放 ifft(fft(x)) != x

也许Calculating a density from the characteristic function using fft in R中的答案可以在特定用例上提供帮助。

关于C# MathNet FFT 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43808956/

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