Существует ли .Net (предпочтительно F # или C #) реализация преобразования Гильберта-Хуанга? - PullRequest
5 голосов
/ 12 августа 2010

Преобразование Гильберта-Хуанга, разложение по эмпирическим модам ...

Я нашел его реализованным в R и Matlab.Я хотел бы найти реализацию с открытым исходным кодом в C # / F # /. NET.

Ответы [ 2 ]

4 голосов
/ 12 сентября 2013

Вот моя реализация преобразования Гильберта из Matlab.Я провел несколько сравнений с выводом Matlab, и этот код, похоже, дает идентичные ответы, но я не проводил всестороннего тестирования.

Для этого используется общедоступная библиотека MathNetвыполнить расчеты FFT / iFFT.

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;
    }
2 голосов
/ 13 августа 2010

Количество качественного кода с открытым исходным кодом для .NET ничтожно мало.Я изо всех сил пытался найти приличное БПФ только пару лет назад.Поэтому я серьезно сомневаюсь, что вы найдете достойную существующую реализацию этого алгоритма, потому что он довольно неясен!

Лучше всего вам построить преобразование Гильберта-Хуанга в терминах БПФ (например, одно измои книги по F # или статьи из журнала F # .NET, которые, я думаю, вы делали в MATLAB и R?

Мне любопытно, почему вы этого хотите?Это не выглядит очень убедительным для меня ...

...