.net 4.0 使用Math.NET 4.0进行FFT-Complex32[]与Complex[]

.net 4.0 使用Math.NET 4.0进行FFT-Complex32[]与Complex[],.net-4.0,fft,complextype,mathnet-numerics,.net 4.0,Fft,Complextype,Mathnet Numerics,使用Math.NET和.NET4.0从数据集计算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]

使用Math.NET和.NET4.0从数据集计算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下解决这个问题吗?

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


.Net 3.5中没有System.Numerics,这就是为什么Math.Net Numerics在那里提供了自己的实现,但对于.Net 4.0和更新版本,它使用System.Numerics中的内置类型,以便与生态系统兼容。

添加对System.Numerics的引用程序集引用缺失。谢谢