fftw是一个专门用来进行快速离散傅立叶变换的数值计算库。它的使用说明文档内容不多,因为这个库本身就很有针对性,专做Fourier Transfrom,所以内容少。但是内容少并不意味着容易搞清楚怎么使用。当然,如果跑着玩,随便弄些数据,让它去帮助你变换,这是可以的,至少说明你会用这个库,但是你还不清楚更细节的东西,因此也没法明白fftw到底计算了些什么。
这些天做的一个问题,需要用到快速傅立叶变换,fftw当然是首选了。fftw提供了很多类型的变换(参见
说明文当)。
我需要的是3D的从复数变换到实数的这样一种情况,这种变换首先就得注意初始(in data)数据的位置安排,要使得输入数据满足共轭性。这种安排随着数据维度的增加而变得更加复杂。我从1D的情况开始,写了一些简单的code去实现这样一种变换,很顺利;但是在2D的时候,相对复杂些了,不过也还好,还是搞清楚了。最后是3D的,情况更加复杂,不过当我弄明白1D,2D两种情况下如何处理以后,这些就都显得相对容易了。
不过我还有一个不明白的地方,以2D为例:
why the initial numbers in[0][j] and in[i][0] must be zeros?
I tried other values, but failed, the outputs are wrong ...
The FFTW gives real output only when I set in[0][j] and in[i][0] to zero...
===================================================================
Problem Solved!
原来是我程序中一个地方出了些错误,在一个条件判断语句if前少了一个else;
另外,初始化数组时要严格按照共轭条件来。只有少数点会因为自身共轭的原因而应该是实数。
评论