010510630 发表于 2009-3-26 22:19

关于这么ifft(fft(A)),如果A不是实数,怎么才能还原?

“由于在MATLAB中是有限字长的运算,会引入误差,这就使ifft(fft(A))同A不一样。如果A是实数时,一般是取A=real(ifft(fft(A)))。”
一位前辈这么说过

那么如果A不是实数,是复数
应该怎么才能是A=ifft(fft(A))

[ 本帖最后由 zhangnan3509 于 2009-6-9 20:58 编辑 ]

ingsnow 发表于 2009-4-20 14:33

同问:@) :@) :@) :@)

jidianwangliang 发表于 2009-6-9 09:20

real(ifft(fft(A)))

hcharlie 发表于 2009-6-9 20:13

本帖最后由 wdhd 于 2016-9-18 14:54 编辑

原帖由 010510630 于 2009-3-26 22:19 发表
“由于在MATLAB中是有限字长的运算,会引入误差"。。。。。。
什么意思?
我们知道在计算机运算中,有定点法,有浮点法,浮点法中有单精度,双精度,4精度等。现在普遍都不采用定点法,而常用的双精度运算,应该说计算误差是极小的,所以用复数计算,FFT再IFFT还应该是能还原的(有极小的误差),我自编的程序就能实现这一点。当然MATLAB计算大了N倍要考虑。

[ 本帖最后由 hcharlie 于 2009-6-9 20:17 编辑 ]

jidianwangliang 发表于 2009-6-9 22:27

道歉

没有看清问题就瞎说,真抱歉
用复数计算FFT再IFFT是能还原的(应该会有极小的误差吧)

hcharlie 发表于 2009-6-10 07:29

本帖最后由 wdhd 于 2016-9-18 14:54 编辑

原帖由 010510630 于 2009-3-26 22:19 发表
“由于在MATLAB中是有限字长的运算,会引入误差,这就使ifft(fft(A))同A不一样。如果A是实数时,一般是取A=real(ifft(fft(A)))。”
一位前辈这么说过

那么如果A不是实数,是复数
应该怎么才能是A=ifft(fft(A))
B=IFFT(FFT(A))
不管A,B是实数还是复数,这叫还员,因有误差,哪怕是极小的误差,不可能完全相等。
简单的说,数A取对数再取指数等于B,应该还原,将A,B两个数打出来应该非常接近而不容易完全相等。
所以这种情况下,用电脑判断它们是否相等:if(A==B)往往要失败;
只能判断它们之间的差是不是极小:if(abs(A-B)<0.00001*A)。。。

010510630 发表于 2009-6-22 10:28

过了这么久过去了,还有人帮忙回答
谢谢各位
页: [1]
查看完整版本: 关于这么ifft(fft(A)),如果A不是实数,怎么才能还原?