5

Hilbert-Huang 変換、経験的モード分解...

RとMatlabで実装されていることがわかりました。C#/F#/.NET でのオープン ソース実装を見つけたいと思います。

4

2 に答える 2

4

これは、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;
    }
于 2013-09-12T19:36:25.360 に答える
2

.NET 用の高品質のオープン ソース数値コードの量はごくわずかです。ほんの数年前、まともな FFT を見つけるのに苦労しました。したがって、このアルゴリズムの適切な既存の実装が見つかるとは思えません。かなりあいまいなためです。

あなたの最善の策は、FFT に関して Hilbert-Huang Transform を作成することです (私の F# の本や F#.NET Journal の記事のいずれかのようなものです)。

なぜあなたがこれを欲しがるのか、私は興味がありますか?私にはあまり説得力がないように見えます...

于 2010-08-12T22:05:51.020 に答える