БПФ с Math.NET 4.0 — Complex32[] против Complex[]

У меня проблема с вычислением БПФ из моего набора данных с использованием Math.NET с .NET4.0.

Я использовал .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?


person MomooomoM    schedule 17.02.2017    source источник
comment
Добавьте ссылку на System.Numerics   -  person Hans Passant    schedule 17.02.2017
comment
Отсутствует ссылка на сборку. Большое спасибо   -  person MomooomoM    schedule 18.02.2017


Ответы (1)


Комментарий Ханса Пассана правильный - просто добавьте ссылку на System.Numerics. Технически это объявлено в пакете NuGet и должно автоматически добавляться в проект после переустановки пакета (что требуется при изменении целевой платформы проекта).

В .Net 3.5 нет System.Numerics, поэтому Math.NET Numerics привносит туда свою собственную реализацию, но для .Net 4.0 и новее он использует встроенный тип из System.Numerics для совместимости с экосистемой.

person Christoph Rüegg    schedule 17.02.2017