6

私はここで少し立ち往生しています。MathNet Numerics による Forward Fourier の結果は、MATLAB による結果の半分以下のようです。

WindowsPhone 8 の MathNet.Numerics

Complex[] samples = { new Complex(5, 0), new Complex(6, 0), new Complex(1, 0), new Complex(2, 0), new Complex(5, 0) };
MathNet.Numerics.IntegralTransforms.Transform.FourierForward(samples);
MathNet.Numerics.IntegralTransforms.Transform.FourierInverse(samples);

元の信号

(5, 0) (6, 0) (1, 0) (2, 0) (5, 0)

フォワードフーリエ

( 8.4970583144992 , 4.96506830649455E-16) ( 2.67082039324994 , -0.162459848116454) ( -1.32917960675006 , -0.688190960235587) ( -1.32917960675006 , 0.688190960235586) ( 2.67082039324994 , 0.162459848116454)

逆フーリエ

(5, -1.24126707662364E-15) (6, 0) (1, 1.78742459033804E-15) (2, 9.93013661298909E-16) (5, 7.94410929039127E-16)

Matlab FFT および IFFT

元の信号

x=[5,6,1,2,5]

フォワードフーリエ fft(x)

ans = 19.0000 5.9721 - 0.3633i -2.9721 - 1.5388i -2.9721 + 1.5388i 5.9721 + 0.3633i

逆フーリエ ifft(ans)

5.0000 6.0000 1.0000 2.0000 5.0000

ここで私が間違っていることはありますか?

4

1 に答える 1

6

スケーリングと指数に関して複数の FFT 規則があります。Math.NET Numerics で使用される既定の規則は、科学と教育 (および Maple など) で一般的に使用されている、対称スケーリングを使用するものです。ただし、MATLAB は非対称スケーリングを使用します。MATLAB の動作と数値結果を取得するにはFourierOptions.Matlab、2 番目のパラメーターとして追加します。

Transform.FourierForward(samples, FourierOptions.Matlab);
Transform.FourierInverse(samples, FourierOptions.Matlab);
于 2014-04-04T09:31:51.250 に答える