Hilbert-Huang 変換、経験的モード分解...
RとMatlabで実装されていることがわかりました。C#/F#/.NET でのオープン ソース実装を見つけたいと思います。
Hilbert-Huang 変換、経験的モード分解...
RとMatlabで実装されていることがわかりました。C#/F#/.NET でのオープン ソース実装を見つけたいと思います。
これは、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;
}
.NET 用の高品質のオープン ソース数値コードの量はごくわずかです。ほんの数年前、まともな FFT を見つけるのに苦労しました。したがって、このアルゴリズムの適切な既存の実装が見つかるとは思えません。かなりあいまいなためです。
あなたの最善の策は、FFT に関して Hilbert-Huang Transform を作成することです (私の F# の本や F#.NET Journal の記事のいずれかのようなものです)。
なぜあなたがこれを欲しがるのか、私は興味がありますか?私にはあまり説得力がないように見えます...