我正在尝试使用子程序twofft,该子程序又使用four1书中的子程序(Fortran 中的数字食谱)来计算两个双精度数据数组的 FFT。如果您仔细查看twofft例程,则数组fft1和fft2被声明为复杂的,它们作为参数发送到four1,将相同的两个数组声明为双精度(如果您使用的是真实版本,则为真实的)。
这是允许的吗?我无法为我的数据获取正确的 FFT。任何建议如何解决这个问题?我只想执行快速 FFT 和反卷积,而不必经历理解代码的整个过程。
我正在尝试使用子程序twofft,该子程序又使用four1书中的子程序(Fortran 中的数字食谱)来计算两个双精度数据数组的 FFT。如果您仔细查看twofft例程,则数组fft1和fft2被声明为复杂的,它们作为参数发送到four1,将相同的两个数组声明为双精度(如果您使用的是真实版本,则为真实的)。
这是允许的吗?我无法为我的数据获取正确的 FFT。任何建议如何解决这个问题?我只想执行快速 FFT 和反卷积,而不必经历理解代码的整个过程。
不,这在 Fortran 标准中是非法的,但是只要您通过,大多数编译器都会让您侥幸逃脱(如果未打开调试选项并且提供的正确接口不在调用点的范围内) Double Complex 到双精度,后者的数组大小是前者的两倍,并且同样复杂到真实 - 我这样说是因为在你的问题中你说
数组 fft1 和 fft2 被声明为复数,它们作为参数发送给four1,它将相同的两个数组声明为双精度
这是行不通的-您必须将 DOUBLE 复数传递给双精度。
也就是说,我不会用驳船杆触碰 NR FFT 例程。相反,我会安装 FFTW ( http://www.fftw.org/ ) 并使用它。如果您使用的是 linux,您可能可以 apt-get 它或类似的。