avatar
[转载] 做FFT的陷阱# Computation - 科学计算
r*y
1
【 以下文字转载自 Science 讨论区 】
【 原文由 rossby 所发表 】
个人体会,也许对上面的那个问题有用。用过几次fft,发现一不小心还真爱出
错,估计是我水平太不照了。
1。 for real function f(x), ifft(fft(f(x))) != f(x), only
real(ifft(fft(f(x)))) = f(x), 计算中的round off errors很容易
产生很小的虚数项,~1e-14 to 1e-12.
1。 for f(x), ifft(fft(f(x)))= f(x), 这个没问题。但是要是你想通过
fft做微分,就得小心。比如用matlab, suppose你的数据是128个点,
y = fft(f, 128)
所得到的y还是128个值,前65个对应wavenumber 0, 1, 64, 后面的对应
-63, -62, ..., -1. 你要是以为后面的对应65, 66, 127,做微分的就会出错,
avatar
y*a
2
hehe, 第二条我也曾费了好大工夫才搞清楚怎么回事。
还是fftw简单好用,还快好多。

【在 r****y 的大作中提到】
: 【 以下文字转载自 Science 讨论区 】
: 【 原文由 rossby 所发表 】
: 个人体会,也许对上面的那个问题有用。用过几次fft,发现一不小心还真爱出
: 错,估计是我水平太不照了。
: 1。 for real function f(x), ifft(fft(f(x))) != f(x), only
: real(ifft(fft(f(x)))) = f(x), 计算中的round off errors很容易
: 产生很小的虚数项,~1e-14 to 1e-12.
: 1。 for f(x), ifft(fft(f(x)))= f(x), 这个没问题。但是要是你想通过
: fft做微分,就得小心。比如用matlab, suppose你的数据是128个点,
: y = fft(f, 128)

avatar
r*y
3

nod nod, strongly recommend fftw.
I heard the professor who taugh me signal processing said that,
at 1960s, the guys who invented fft can actually patent it. But they did not.
If they did, they should be much richer than Bill Gates now.


【在 y**********a 的大作中提到】
: hehe, 第二条我也曾费了好大工夫才搞清楚怎么回事。
: 还是fftw简单好用,还快好多。

avatar
g*e
4
is fftn & ifftn OK in matlab? It seems mathworks use fftw for fftn and ifftn?
Is that right?

【在 r****y 的大作中提到】
: 【 以下文字转载自 Science 讨论区 】
: 【 原文由 rossby 所发表 】
: 个人体会,也许对上面的那个问题有用。用过几次fft,发现一不小心还真爱出
: 错,估计是我水平太不照了。
: 1。 for real function f(x), ifft(fft(f(x))) != f(x), only
: real(ifft(fft(f(x)))) = f(x), 计算中的round off errors很容易
: 产生很小的虚数项,~1e-14 to 1e-12.
: 1。 for f(x), ifft(fft(f(x)))= f(x), 这个没问题。但是要是你想通过
: fft做微分,就得小心。比如用matlab, suppose你的数据是128个点,
: y = fft(f, 128)

avatar
a*r
5

fftshit??这名字起的。。

【在 r****y 的大作中提到】
: 【 以下文字转载自 Science 讨论区 】
: 【 原文由 rossby 所发表 】
: 个人体会,也许对上面的那个问题有用。用过几次fft,发现一不小心还真爱出
: 错,估计是我水平太不照了。
: 1。 for real function f(x), ifft(fft(f(x))) != f(x), only
: real(ifft(fft(f(x)))) = f(x), 计算中的round off errors很容易
: 产生很小的虚数项,~1e-14 to 1e-12.
: 1。 for f(x), ifft(fft(f(x)))= f(x), 这个没问题。但是要是你想通过
: fft做微分,就得小心。比如用matlab, suppose你的数据是128个点,
: y = fft(f, 128)

avatar
r*y
6

fftshift, a typo. hoho.

【在 a***r 的大作中提到】
:
: fftshit??这名字起的。。

avatar
a*r
7
ft了。。我说呢

【在 r****y 的大作中提到】
:
: fftshift, a typo. hoho.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。