2017-02-17 1 views
1

J'ai un problème lors du calcul de la FFT de mon ensemble de données, en utilisant Math.NET avec .NET4.0.FFT avec Math.NET 4.0 - Complex32 [] et Complex []

I utilisé .NET 3.5 avec Math.NET comme celui-ci sans aucune erreur:

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); 
    } 

Maintenant, je veux utiliser .NET 4.0 et complexe [] n'est plus connu - que Complex32. Quand je change maintenant complexe [] pour 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); 
    } 

ce message d'erreur se produit:

Erreur 7 Le match de la meilleure méthode surchargée pour « MathNet.Numerics.IntegralTransforms.Fourier.BluesteinForward (System.Numerics.Complex [], MathNet.Numerics.IntegralTransforms.FourierOptions) » a des arguments invalides

est-ce que quelqu'un a une idée, comment résoudre ce problème dans .NET 4.0?

+1

Ajout d'une référence à System.Numerics –

+0

La référence d'assembly manquait. Merci beaucoup – MomooomoM

Répondre

1

Le commentaire de Hans Passant est correct - il suffit d'ajouter une référence à System.Numerics. Techniquement, ceci est déclaré dans le paquet NuGet et devrait être ajouté automatiquement au projet une fois le paquet réinstallé (ce qui est requis lors de la modification du framework cible d'un projet).

Il n'y a pas System.Numerics dans .Net 3.5, c'est pourquoi Math.NET Numerics y apporte sa propre implémentation, mais pour .Net 4.0 et plus récent, il utilise le type intégré de System.Numerics pour être compatible avec l'écosystème.