【问题标题】:AForge FFT2 and matlab FFT2 results dont matchAForge FFT2 和 matlab FFT2 结果不匹配
【发布时间】:2017-12-26 09:02:21
【问题描述】:

我尝试使用Aforge.Math 在二维复数矩阵上进行 FFT2,并在 matlab 上尝试过同样的操作

在 C# 上,对于 AForge:

Complex[,] array2D = new Complex[,] { {  (Complex)1,  (Complex)2 }, {  (Complex)3,  (Complex)4 }, {  (Complex)5, (Complex) 6 }, {  (Complex)7,  (Complex)8 } };
FourierTransform.FFT2(array2D,FourierTransform.Direction.Forward);

在 Mathlab 上:

x =[1 2; 3 4; 5 6; 7 8]
fft2(x)

但不幸的是结果不一样 对于 C#:

数学实验室:

  36.0000 + 0.0000i  -4.0000 + 0.0000i
  -8.0000 + 8.0000i   0.0000 + 0.0000i
  -8.0000 + 0.0000i   0.0000 + 0.0000i
  -8.0000 - 8.0000i   0.0000 + 0.0000i 

我不知道为什么结果不同,顺便说一句,我只能使用工具,不知道有关 FFT2 的详细信息。 更新:AForge 结果根据输入矩阵大小进行缩放!

【问题讨论】:

  • 您的 AForge 看起来不正确。 “复合体”由实数和虚数组成。所以 (Complex)1 只包含一个值而不是两个。
  • @jdweng(Complex)1 进行转换,结果包含虚值和实值
  • 您的数组错误。你得到两个复数而不是一个。请参阅:aforgenet.com/framework/docs/html/…
  • @jdweng (Complex)1 表示新的 Complex(1,0).. 是一回事..
  • 不,不,不! { { (复数)(1,0), (复数)(2,0) }, { (复数)(3,0), (复数)(4,0) }, { (复数)(5,0) , (复数) (6,0) }, { (复数)(7,0), (复数)(8,0) } };

标签: c# matlab fft


【解决方案1】:

要获得与matlab中相同的结果,请将方向更改为Backward

FourierTransform.FFT2(array2D,FourierTransform.Direction.Backward);

【讨论】:

  • 它没有给出相同的输出......你自己试试吧!
  • @Md.SifatulIslam 我在发布答案之前实际上已经尝试过了,它给出的输出与您的问题中的 matlab 完全相同。
  • @Md.SifatulIslam 如果它仍然没有为您产生正确的输出 - 请张贴屏幕截图\它产生的结果。
  • 我已经展示了'forward'的屏幕截图......当我需要将 FFT2 前向结果与 matlab 匹配时,为什么我要将方向更改为向后?
  • @Md.SifatulIslam 因为向后产生你期望的输出?不知道我还能添加什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 2015-10-02
  • 1970-01-01
  • 2011-07-21
相关资源
最近更新 更多