声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3109|回复: 6

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

[复制链接]
发表于 2009-3-26 22:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

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

[ 本帖最后由 zhangnan3509 于 2009-6-9 20:58 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-4-20 14:33 | 显示全部楼层
同问:@) :@) :@) :@)
发表于 2009-6-9 09:20 | 显示全部楼层
real(ifft(fft(A)))
发表于 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 编辑 ]
发表于 2009-6-9 22:27 | 显示全部楼层

道歉

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

评分

1

查看全部评分

发表于 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)。。。

评分

1

查看全部评分

 楼主| 发表于 2009-6-22 10:28 | 显示全部楼层
过了这么久过去了,还有人帮忙回答
谢谢各位
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-18 17:16 , Processed in 0.127266 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表