首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# MathNet FFT定义

C# MathNet FFT定义
EN

Stack Overflow用户
提问于 2017-05-05 15:43:18
回答 1查看 1.9K关注 0票数 2

在测试MathNet函数时,我遇到了一些问题:如果将FFT应用于高斯变量的特征函数,就应该找到高斯密度函数。

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

定标一定有一些问题。我尝试了FourierOptions在Fourier.Inverse中的所有类型,以及PI,2PI,sqrt(2PI)的所有类型的除法/乘法,但是没有给出密度函数中心的值1。

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

有什么想法吗?

代码语言:javascript
运行
复制
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);
    }
EN

回答 1

Stack Overflow用户

发布于 2017-05-06 15:15:52

Math.NET数字支持所有常见的DFT定义,使用FourierOptions标志枚举是可控的。它们在指数和标度上本质上是不同的。

FourierOptions文档给出了这些选项如何影响有效定义的一些提示,实质上是:

  • InverseExponent:在指数中使用负号(默认值使用正号)。一个有负号的显着的实现是数字食谱。
  • 不对称缩放/不缩放:不是默认的对称缩放sqrt(1/N),而是只在逆变换1/N (如Matlab)中缩放,或者根本不缩放(比如数字食谱)。显然,不需要缩放ifft(fft(x)) != x

也许用R中fft计算特征函数的密度中的答案可以帮助解决特定的用例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43808956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档