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)

答案= 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为第二个参数,即

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