5 Stimmen

Gibt es eine .Net-Implementierung (vorzugsweise F# oder C#) der Hilbert-Huang-Transformation?

Hilbert-Huang-Transformation, Empirische Modenzerlegung...

Ich habe es in R und Matlab implementiert gefunden. Ich würde gerne eine Open-Source-Implementierung in C#/F#/.NET finden.

4voto

Dave Anderson Punkte 49

Hier ist meine Implementierung der Hilbert-Transformation von Matlab. Ich habe einige Vergleiche mit der Ausgabe von Matlab angestellt, und dieser Code scheint identische Antworten zu liefern, aber ich habe keine umfangreichen Tests durchgeführt.

Dabei wird die öffentlich verfügbare MathNet-Bibliothek für die FFT/iFFT-Berechnungen verwendet.

public static Complex[] MatlabHilbert(double[] xr)
    {
        var fft = new MathNet.Numerics.IntegralTransforms.Algorithms.DiscreteFourierTransform();
        var x = (from sample in xr select new Complex(sample, 0)).ToArray();
        fft.BluesteinForward(x, FourierOptions.Default);
        var h = new double[x.Length];
        var fftLengthIsOdd = (x.Length | 1) == 1;
        if (fftLengthIsOdd)
        {
            h[0] = 1;
            for (var i = 1; i < xr.Length / 2; i++) h[i] = 2;
        }
        else
        {
            h[0] = 1;
            h[(xr.Length / 2)] = 1;
            for (var i = 1; i < xr.Length / 2; i++) h[i] = 2;
        }
        for (var i = 0; i < x.Length; i++) x[i] *= h[i];
        fft.BluesteinInverse(x, FourierOptions.Default);
        return x;
    }

2voto

J D Punkte 47190

Die Menge an qualitativ hochwertigem numerischen Open-Source-Code für .NET ist winzig. Ich kämpfte, um eine anständige FFT nur vor ein paar Jahren zu finden. Ich bezweifle also ernsthaft, dass Sie eine anständige bestehende Implementierung dieses Algorithmus finden werden, weil er ziemlich obskur ist!

Am besten ist es, eine Hilbert-Huang-Transformation in Form einer FFT zu erstellen (wie die aus einem meiner F#-Bücher oder den F#.NET Journal-Artikeln), was Sie wohl in MATLAB und R gemacht haben?

Ich bin allerdings neugierig, warum Sie das wollen? Es sieht für mich nicht sehr überzeugend aus...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X