fft算法c语言实现详解 fft程序

Fft程序(fft算法C语言实现细节)09 16:27未来愿景
从Fortran到arXiv.org,计算机程序和平台的进步使得生物学、气候科学和物理学飞速发展 。
【fft算法c语言实现详解 fft程序】2019年,视界望远镜首次向世界揭开了黑洞的神秘面纱 。然而,我们看到的发光环形黑洞的图像并不是直接拍摄的,而是利用美国、墨西哥、智利、西班牙和南极洲的射电望远镜捕捉到的数据 , 通过复杂的数学变换和计算获得的[1] 。在公布成果的同时,团队还公开了实现这一突破性成果的代码,使科学界能够详细了解其实现过程,并在此基础上进一步研究 。
从天文学到动物学,这种研究模式在所有学科中越来越普遍:近代每一个重大科学发现的背后,总有一台计算机 。加州史丹福大学的计算生物学家迈克尔·莱维特,因其在化学结构建模的计算策略方面的杰出贡献 , 分享了2013年诺贝尔化学奖 。他提到,当他在1967年刚开始这项工作时,实验室计算机的内存和计算性能还不到今天笔记本电脑的十分之一 。他说:“尽管我们现在拥有强大的计算资源,但思维的重要性丝毫没有减弱 。」
这需要科学家和程序员 。如果没有能够处理研究问题的软件,没有懂得编写和使用程序的研究人员,计算机再强大也是没有用的 。Neil Chue Hong是总部位于英国爱丁堡的软件可持续发展研究所的负责人,该研究所主要致力于不断改进科学软件的研发和使用 。尼尔说,“现在大多数科学研究都是利用软件进行的,软件已经渗透到研究的方方面面 。」
插图:Pawe Jo ê ca
科学发现应该是媒体的头版 。但在这一期的《自然》杂志中,我们想和读者一起聊聊这些发现背后的故事 , 回顾一下过去几十年中极大改变研究进程的关键代码 。
虽然这个榜单不是绝对的,但在过去的一年里 , 我们调查了大量的研究人员,总结出了不同领域中对科研有重大影响的十大软件工具 。
编程先锋:Fortran编译器(1957)第一台现代电子计算机对用户不友好 。编程需要一个一个手动链接电路来完成 。虽然随后的机器语言和汇编语言的快速发展使得用户可以通过代码进行编程,但仍然需要对计算机体系结构有深刻的理解,这阻碍了许多科学家使用计算机的效率 。
随着50年代符号语言的发展,效率逐渐提高,特别是公式翻译语言Fortran的出现,改变了这种情况 。Fortran语言是由约翰·巴科斯和他在加州圣何塞的IBM团队开发的 。用户可以在Fortran中使用人类可读的指令进行编程 , 比如写出x=3+5的计算公式,然后编译器就可以将其转换成快速高效的机器码 。
CDC 3600计算机于1963年交付给科罗拉多州博尔德的国家大气研究中心 , 它可以借助Fortran编译器进行编程 。
但是编程仍然不是一件容易的事情:早期的程序员使用穿孔卡来输入代码,稍微复杂一点的模拟需要数万张穿孔卡来编写程序 。但是新泽西州普林斯顿大学的气候学家Syukuro Manabe说 , Fortran为非计算机科学家的研究人员提供了一个有效的编程工具 。“第一次,我们可以自己给计算机编程,”Manabe说 。他和他的同事用Fortran语言开发了第一个成功的气候模型 。
如今,Fortran已经进入第八个十年,在气象建模、流体力学、计算化学等需要复杂线性代数和强大计算能力的学科中 , 它仍然被广泛应用 。生成的代码计算效率高,大部分程序员仍然使用Fortran 。中世纪的Fortran代码库仍然活跃在世界各地的超级计算机和实验室中 。“以前的程序员知道他们在做什么,”加州蒙特雷海军研究生院的应用数学家和气候建模专家弗兰克·吉拉尔多说 。“他们很注重记忆,因为以前的记忆很小 。」
信号处理器:快速傅立叶变换(1965)射电天文学家在扫描天空空时,会捕捉到一系列随时间变化的复杂信号 。为了理解这些电波的本质,他们需要看看这些信号转换成频率方程后是什么样子 。研究人员可以使用一种叫做傅立叶变换的数学过程来完成这个过程 。问题是它的效率非常低,一个N大小的数据集需要N2计算 。
但在1965年,美国数学家JamesCooley和John Tukey发明了一种加速这一过程的方法 。利用递归这种“分而治之”的编程方法(算法可以反复调用自身),快速傅里叶变换(FFT)可以将傅里叶变换的计算减少到Nlog2(N)步 。计算速度随着数据集的增加而增加 , 在1000个数据点的情况下增加100倍,在100万个数据点的情况下增加50000倍 。
英国牛津大学数学家尼克·特雷费森(Nick Trefethen)表示,这实际上是一个重复的发现——德国数学家卡尔·弗里德里希·高斯(Carl Friedrich Gauss)在1805年提出了这个算法,但他没有发表 。然而 , Cooley和Tukey为数字信号处理、图像分析、结构生物学等开辟了广泛的应用空 。特雷费森说,“这确实是应用数学和工程领域的一件大事 。代码中多次实现了FFT,最著名的是FFTW(西方最快的傅立叶变换) 。

推荐阅读