fft的c语言和matlab对比_傅里叶级数(FS)、傅里叶变换(FT)快速傅里叶变换(FFT)及量子傅里叶变换(QFT)之间推导关系...

1 引言

傅里叶级数 (Fourier Series, FS) 是《高等数学》中遇到的一个重要的级数,它可以将任意一个满足狄利克雷条件的函数为一系列三角级数的和。最早由法国数学家傅里叶在研究偏微分方程的边值问题时提出,极大地推动了偏微分方程理论的发展。根据欧拉公式及其推导式,傅里叶级数又可以推导出《信号与系统》中最重要的傅里叶变换(Fourier Transform, FT)。FT由于可以将信号从时域到频域来回变换,分析信号的成分,从而广泛应用于信号处理领域。在计算机处理中,信号被离散化为采样点,针对离散采样点的傅里叶变换成为了《数字信号处理》中的离散傅里叶变换(Discrete Fourier Transform, DFT)。但是由于DFT计算量过于庞大(计算复杂度高),1965年由J.W.库利和T.W.图基提出了最早版本的快速傅里叶变换(Fast Fourier Transform, FFT),将计算量减少了几个量级,从而使得计算机更加快速地处理信号,从而促进通信、信号处理领域的快速发展。近年来由于量子计算机的兴起,量子傅里叶变换(Quantum Fourier Transform, QFT)更是可以对FFT进行指数级别的加速。

由于这一系列变换出现在不同学科中,老师在讲课时也是各自独立讲解,所以大多数同学(包括我)对其中的似曾相识的公式,一直分不清有什么区别和联系,这篇文章着重于这一系列傅里叶算法的直接的相互推导。

2 一维傅里叶级数(FS)

2.1 周期性

首先写出傅里叶级数的表达式:

其中,

,
是FS的系数,也是我们需要求的参数,若它们确定,则

即可被分解为N阶的FS。

由于

,因此上式可以改写为:

时,
是周期为
的周期函数,也是FS中周期最大的一组分量。我们取周期
,其他分量,在
中应该包含了多个完整的周期。此时有:

2.2 正交性

何为正交?正交是线性代数中的概念,即列向量a, b的内积为0,就称这两向量正交。正交还可以不严谨地理解为这两组向量之间没有关系。

同样地,借鉴这个定义,在连续函数中的正交为:

此时,我们令

,有:

积分是一个线性算符,积分和等于和的积分,上式可以看做两个三角函数分别积分。当

时,无论
还是
均大于等于1,因此它们的周期必然小于等于
。根据前面的结论有:

时,上式变为:

前一项,积分明显为0,后一项为

同理,还可以尝试令

,在此不再赘述,可以得到
结论:在FS中每两个不同的级数之间存在两两正交关系。

2.3 求系数

,

首先看

怎么求。令:

就是把要分解的函数和傅里叶级数同时做了积分,等号右边可以拆为2N+1个积分和,根据前面的周期性可知,除了第一项以外,后面的项的积分均为0。故上式可以化简为:

这里的表达式就说明了

其实是函数的均值。

接着,我们尝试求

,令:

其中,

也是1~N中的一个值,为了便于和
区分开来,方便叙述。

利用上面证明的周期性和正交性,我们可以知道,只有当

时,积分结果才不为0,其余均为0。故上式可以化简为:

故:

同理,我们可以得到正弦分量的系数。最后结果为:

到这里,所有FS的系数就能求出来了。但是这里有个比较诡异的地方,当

时,上式算出的
与我们之前算出的
不等,为了保持k的延续性,通常情况是用
表示FS的第一项。

3 傅里叶变换(FT)

3.1 FT和FS之间的关系

首先,把傅里叶变换的公式写出来:

然后,回到傅里叶级数。

根据欧拉公式

及其一个简单的变形:

代入到傅里叶级数中:

傅里叶级数变为:

变换后的系数

求解方式可以根据上面
求得。

的定义域是
,且
是非周期函数,我们可以对
进行周期延拓,认为它在定义域内为一个周期;而
前所述,在
中最少有1个周期,上式不妨写为:

所以,

时,
间隔很小,可视作连续。

由于

内为一个周期,也可以表示为在
内也是一个周期(周期延拓)。故上式写为

,
替换,
替换就出现了傅里叶变换的公式

3.2离散傅里叶变换

在计算机中,我们不可能令

,这样
仍被当做离散量,这样一来积分号就变成了求和号,上式可以写作:

因此我们就得到了能够被计算机执行的离散傅里叶变换的函数式。

为便于理解,先带个具体数据进去考虑。若采样的数据点为8,频率分量个数也为8。用

来表示这种情况下的DFT函数。

上面这些式子用矩阵表示为,假设有个矩阵

右乘一个时域组成的列向量得到一个频域组成的列向量。

cc49e55ceba6b741224ac0de1a01d1b9.png

将上面的一组求和式翻译成矩阵

fe171652906a5eae4b00e5815db9f00e.png

为了便于观察,令

矩阵中的
。上式可以写为:

264183130304c67164b3fcf788422e18.png

根据

的周期性:
可进一步化简。

04775290ad15ef1fc86cbadd46747d05.png

3.3 快速傅里叶变换

从3.2节,我们知道了,要完成一次DFS需要用一个矩阵去乘以一个时域组成的列向量,而这个矩阵大小与时域上的采样点和频域分量的个数有关。若它们的个数为

,则上面的一个矩阵乘法包含
次数值乘法,这当
较大时,需要消耗大量的计算机资源。好在构成DFS的矩阵有着一定的特殊规律,可以使用分治法,使其只需要大约
次数值乘法,即可完成工作。

仍然以

为例,不难看出
是一个正交对称阵(实际上所有DFS构成的矩阵都是正交对称阵)。交换
偶数列位置提到奇数列前面。

186aa966baeacd193965be1a8f8abbe2.png

只差一个奇偶置换矩阵

e52eb4a45038dc7723af5b24b2dd1237.png

同样地,我们还可以写出

9f436cded5b0cc3088bf994d1a620ef9.png

同样地,令

矩阵中的

值得注意的是

(周期性)

又可以写为:

242008b1218407b8246afda9c26ef9f3.png

左边4列中包含了两个
而右边4列是由系数和
共同组成。因此
又可以被写为:

58e720d5b0e58342fd77414ac8a97e7b.png

其中

为单位阵,
是一个对角阵。

915a8390eebeed02d832d80e6bee853e.png

最后

55edc1648c56212e28f5e9937e89aed4.png

这样一来上面这个矩阵需要多少次乘法呢?由于

是奇偶置换矩阵,在计算机中是只需要移位,不需要做乘法运算,故

555d9be654f9891b698279fcddc724eb.png

显然,主要的计算量在于

,共计
次数值乘法,
是对角阵,
需要额外4次乘法,
是它的相反数,不计入乘法次数。最后我们就将原本需要
次乘法变为了
次乘法。

同理,我们还可以对

进一步拆分为

5995b9db13bec39a44e7de31f86fcb6c.png

带入

4b853baeee4875d7fad1697a6f52f176.png

化简下:

f5d30b578e824b9e0c997aea4712243d.png

此时需要的乘法数量为

推广到更一般的情况,仍然可以使用类似上述的递归方式,最后FFT的计算复杂度变为

4、量子傅里叶变换

如果对量子逻辑门有一定了解的同学,看到上面最终的递归化简式,已经发现和量子逻辑门很像了。比如我们看

65e7c1f46dc1ee181bdef6c883ef6fe3.png

那这不就是

门嘛。

再比如

a331dd66f08685216fdb4ad836abc3b1.png

也可以分解成量子门的形式(中间省略了归一化参数):

f7e4a0dab145d2c9cc9b5a24ed087b7b.png

其中

为哈德玛门,
的单位阵,
为受控S门。

也可以分解成量子门的形式(中间省略了归一化参数):

07f4dd28c2dc9df9b7ae15c2e343c8e1.png

其中,

相当于
的单位阵。

相当于
门。

接着 我们观察置换矩阵

,列出这两个的真值表

5004a40080d4f7e3f77cb579ce45e04f.png

dfa680cc126b579d05fc998d6966391e.png

不难发现

就相当于SWAP门

28d38cba467c489ba86019e54fc77045.png

根据

的递归表达式可以看出,矩阵左乘向量顺序为先
,它们的真值表变换如下

fcd547b736df1818946222164cd23b05.png

列出合并后的真值表,那这不就是1,3 qubit交换位置嘛。

753e72bde27225acf08c170d7ae4fbf4.png

即:

4ae26ecd0208673f4f80472e360e2f12.png

整个

的递归式就可以写成(中间省略了归一化参数):

量子电路如下:

e93ef4026c81a03db8bec002daa241dc.png

有兴趣的可以对比一下与《量子计算与量子信息》书中盒子5.1是否是等价的电路。如果以基本量子门作为计算单元的话,QFT的复杂度则只需

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OraOLEDbpus.dll找不到指定的模块的解决办法

OraOLEDbpus.dll找不到指定的模块的解决办法 使用Oracle Provider for OLE DB 进行数据库连接的时候,报错::OraOLEDbpus.dll 找不到指定的模块在oracle的安装目录下却能找到OraOLEDbpus.dll,应该是其未能找到该路径,打开系统的环境…

LeetCode 1396. 设计地铁系统(map/unordered_map)

1. 题目 请你实现一个类 UndergroundSystem ,它支持以下 3 种方法: checkIn(int id, string stationName, int t) 编号为 id 的乘客在 t 时刻进入地铁站 stationName 。 一个乘客在同一时间只能在一个地铁站进入或者离开。 checkOut(int id, string st…

python中object是什么数据类型_自学Python2.1-基本数据类型-字符串str(object) 上

自学Python2.1-基本数据类型-字符串str(object) 上 字符串是 Python 中最常用的数据类型。我们可以使用引号(或")来创建字符串。 创建字符串很简单,只要为变量分配一个值即可。例如: var1 Hello World! var2 "Python Runoob" 1. Python…

.NET下使用DataAdapter保存数据时,如何生成command语句及使用事务

.NET下使用DataAdapter保存数据时,如何生成command语句及使用事务 在.NET下,运用DATASET对数据进行批量更新时,需要与 DataAdapter配合使用。DataAdapter数据适配器的作用是生成数据更新时所需的insert,delete,update等语句,这些语…

文档智能SOTA被刷爆,DocVQA榜单首次突破90大关

文档智能(DI, Document Intelligence)主要指对于网页、数字文档或扫描文档所包含的文本以及丰富的排版格式等信息,通过人工智能技术进行理解、分类、提取以及信息归纳的过程。文档智能技术广泛应用于金融、保险、能源、物流、医疗等行业&…

react 遍历对象_React 源码系列 | React Children 详解

本文基于 React V16.8.6,本文代码地址测试代码 源码讲解React 中一个元素可能有 0 个、1 个或者多个直接子元素,React 导出的 Children 中包含 5 个处理子元素的方法。map 类似 array.mapforEach 类似 array.forEachcount 类似 array.lengthtoArrayonlyR…

程序员面试金典 - 面试题 16.19. 水域大小(BFS/DFS)

1. 题目 你有一个用于表示一片土地的整数矩阵 land,该矩阵中每个点的值代表对应地点的海拔高度。 若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。 池塘的大小是指相连接的水域的个数。 编写一个方法来计算矩阵中所有池塘的大小,返回值需要从…

自定义组件--创建mxml组件

创建简单的mxml组件 Example components/CountryComboBox.mxml <?xml version"1.0" encoding"utf-8"?> <mx:ComboBox xmlns:mx"http://www.adobe.com/2006/mxml"> <mx:dataProvider> <mx:String>United States</mx…

19位算法工程师总结:机器学习项目成功落地的三条秘诀

文 | 天于刀刀又是一年金九银十&#xff0c;前几天小编刀刀在一次电话面试过程中被HR 的一个问题问得差点闪了腰。当时情况是这样的&#xff0c;在流利地介绍完之前的几个项目后&#xff0c;招聘小姐姐打断了我后续的&#xff08;忽悠&#xff09;节奏&#xff0c;郑重其事地反…

nodejs 获取cpu核心数量_用 NodeJS 充分利用多核 CPU 的资源[每日前端夜话0xCB]

每日前端夜话0xCA每日前端夜话&#xff0c;陪你聊前端。每天晚上18:00准时推送。正文共&#xff1a;1558 字预计阅读时间&#xff1a;7 分钟作者&#xff1a;Nick Major翻译&#xff1a;疯狂的技术宅来源&#xff1a;coderrocketfuel介绍单个 Node.js 程序的实例仅在一个线程上…

程序员面试金典 - 面试题 16.20. T9键盘(数组)

1. 题目 在老式手机上&#xff0c;用户通过数字键盘输入&#xff0c;手机将提供与这些数字相匹配的单词列表。 每个数字映射到0至4个字母。给定一个数字序列&#xff0c;实现一个算法来返回匹配单词的列表。 你会得到一张含有有效单词的列表。映射如下图所示&#xff1a; 示…

胃部不适,原来好辛苦!

这几天胃部都感觉不舒服&#xff0c;那种感觉很难形容&#xff0c;总之就非常辛苦&#xff0c;无胃口&#xff0c;浑身都不舒服&#xff0c;可能是之前几天早餐没吃饱&#xff0c;有几天很晚才入睡空着肚子的缘故吧&#xff0c;原来胃部不适是如此辛苦的&#xff0c;怕怕&#…

重磅!顶级一区期刊官宣:明年起将不再拒稿!

源 | 青塔学术、量子位等颠覆科学出版的“游戏规则”?10月20日&#xff0c;国际著名生物学综合期刊eLife官方宣布了一个重大决定&#xff1a;从2023年1月31日起&#xff0c;所有经过同行评审的文章&#xff0c;eLife都不会作出接受/拒绝的决定&#xff0c;而是直接发布在其网站…

EM(期望极大化)算法及其推广

文章目录1. EM算法2. EM算法收敛3. EM算法应用4. EM算法的推广5. sklearn.mixture.GaussianMixture概率模型有时既有观测变量&#xff08;observable variable&#xff09;&#xff0c;又有隐变量或潜在变量&#xff08;latent variable&#xff09;如果概率模型的变量都是观测…

GridView 中添加删除确认提示框

在GridView中我们可以直接添加一个CommandField删除列来删除某行信息。但为了避免误操作引起的误删除&#xff0c;在删除操作者让操作者再确认下&#xff0c;完后再进行删除。 首先我们给我们的GridView 添加一个模板列&#xff0c;如下&#xff1a; <asp:TemplateField He…

终于有人喊出来:论文一稿多投是作者的合法权利!

文 | 马建平&#xff0c;三峡大学学报编辑源 | 现代出版一稿多投目前已演变为许多作者一种常态化的投稿方式。针对一稿多投现象&#xff0c;舆论似乎是一边倒的反对和谴责之声&#xff0c;认为它浪费了极为稀缺的出版资源&#xff0c;扰乱了报刊社正常的出版秩序&#xff0c;是…

python中pop用法_Python dict pop()用法及代码示例

Python语言为几乎所有容器(无论是列表容器还是集合容器)指定了pop()。这篇特别的文章着重说明Python词典提供的pop()方法。这种方法对于经常处理字典的程序员很有用。 用法&#xff1a;dict.pop(key, def) 参数&#xff1a; key:必须返回并删除其键值对的键。 def:如果指定的键…

桩训日记

2007年2月7日 弄了一天的模拟练习&#xff0c;挺累的&#xff0c;明天估计是练习 起步停车2007年2月8日 上午起步停车&#xff08;年龄挺大的李教练&#xff09;&#xff0c;临近中午开始倒库&#xff08;挺帅的尹教练&#xff09;&#xff0c;下午继续倒库&#xff0c;基本茫然…

LeetCode 912. 排序数组(10种排序)

文章目录1. 题目2. 解题2.1 插入排序2.2 冒泡排序2.3 选择排序2.4 希尔排序2.5 归并排序2.6 快速排序2.7 堆排序2.8 计数排序2.9 桶排序2.10 基数排序3. 复杂度表1. 题目 给你一个整数数组 nums&#xff0c;将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,…