关于这么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 编辑 ] 同问:@) :@) :@) :@) real(ifft(fft(A))) 本帖最后由 wdhd 于 2016-9-18 14:54 编辑
原帖由 010510630 于 2009-3-26 22:19 发表
“由于在MATLAB中是有限字长的运算,会引入误差"。。。。。。
什么意思?
我们知道在计算机运算中,有定点法,有浮点法,浮点法中有单精度,双精度,4精度等。现在普遍都不采用定点法,而常用的双精度运算,应该说计算误差是极小的,所以用复数计算,FFT再IFFT还应该是能还原的(有极小的误差),我自编的程序就能实现这一点。当然MATLAB计算大了N倍要考虑。
[ 本帖最后由 hcharlie 于 2009-6-9 20:17 编辑 ]
道歉
没有看清问题就瞎说,真抱歉用复数计算FFT再IFFT是能还原的(应该会有极小的误差吧) 本帖最后由 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)。。。 过了这么久过去了,还有人帮忙回答
谢谢各位
页:
[1]