【问题标题】:FFT with Math.NET 4.0 - Complex32[] vs. Complex[]使用 Math.NET 4.0 进行 FFT - Complex32[] 与 Complex[]
【发布时间】:2017-02-17 15:36:19
【问题描述】:

我在使用带有 .NET4.0 的 Math.NET 从我的数据集中计算 FFT 时遇到问题。

我像这样将 .NET 3.5 与 Math.NET 一起使用,没有任何错误:

    public Ergebnisse_FFT_Abs_PSD_MNF FFT_Abs_PSD_MNF(double[] data) 
    {
       Complex[] samples = new Complex[data.Length];
       double[] FFT_abs_1d = new double[data.Length / 2];

       int zaehler = 0;
       foreach(double val in data)
       {
          samples[zaehler] = new Complex(val, 0);
          Fenster[zaehler] = Math.Exp(-0.5 * Math.Pow(((zaehler - (samples.Length - 1) / 2) / (sigma * (samples.Length - 1) / 2)), 2)); // Gauß
          samples[zaehler] = samples[zaehler].Real * Fenster[zaehler];
          zaehler++;
       }   
       MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward(samples, MathNet.Numerics.IntegralTransforms.FourierOptions.Matlab);
    }

现在我想使用 .NET 4.0 并且不再知道 Complex[] - 只有 Complex32。 当我现在将 Complex[] 更改为 Complex32[] 时:

    public Ergebnisse_FFT_Abs_PSD_MNF FFT_Abs_PSD_MNF(double[] data) 
    {
       Complex32[] samples = new Complex32[data.Length];
       double[] FFT_abs_1d = new double[data.Length / 2];

       int zaehler = 0;
       foreach(double val in data)
       {
          samples[zaehler] = new Complex32((float)val, 0);
          Fenster[zaehler] = Math.Exp(-0.5 * Math.Pow(((zaehler - (samples.Length - 1) / 2) / (sigma * (samples.Length - 1) / 2)), 2)); // Gauß
          samples[zaehler] = samples[zaehler].Real * (float)Fenster[zaehler];
          zaehler++;
       }       

       MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward(samples, MathNet.Numerics.IntegralTransforms.FourierOptions.Matlab);
    }

出现此错误消息:

错误 7 'MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward(System.Numerics.Complex[], MathNet.Numerics.IntegralTransforms.FourierOptions)' 的最佳重载方法匹配有一些无效参数

有没有人有想法,如何在 .NET 4.0 下解决这个问题?

【问题讨论】:

  • 添加对 System.Numerics 的引用
  • 缺少程序集引用。非常感谢

标签: .net-4.0 fft complextype mathnet-numerics


【解决方案1】:

Hans Passant 的评论是正确的 - 只需添加对 System.Numerics 的引用。从技术上讲,这是在 NuGet 包中声明的,并且应该在重新安装包后自动添加到项目中(这在更改项目的目标框架时是必需的)。

.Net 3.5 中没有 System.Numerics,这就是 Math.NET Numerics 在那里引入自己的实现的原因,但对于 .Net 4.0 和更新版本,它使用 System.Numerics 的内置类型以兼容生态系统。

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多