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