Oct*_*ane 5 matlab signal-processing fft c#-4.0 mathnet-numerics
我有点卡在这里。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);
Run Code Online (Sandbox Code Playgroud)
原始信号
(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
傅里叶逆傅里叶变换(ans)
5.0000 6.0000 1.0000 2.0000 5.0000
有任何想法我在这里做错了吗?
关于缩放和指数,存在多种FFT约定。Math.NET Numerics使用的默认约定是对称缩放在科学和教育(以及Maple)中通常使用的约定。但是,MATLAB使用非对称缩放。为了获得MATLAB的行为和数值结果,请添加FourierOptions.Matlab作为第二个参数,即
Transform.FourierForward(samples, FourierOptions.Matlab);
Transform.FourierInverse(samples, FourierOptions.Matlab);
Run Code Online (Sandbox Code Playgroud)