快速傅里叶变换学习笔记
Part 0 复数的指数函数
0.1 指数函数的定义
这是一个普通的指数函数
现在我们要把它的定义域扩展
第一步,我们知道所有这样的指数函数都可以写成这样:
又因为
所以如果我们想计算复指数函数的话,我们只需要先定义出
怎么定义呢?我们翻开高等数学,发现里面提到了这个东西
把这里的实数
接下来我们从得数的模长和辅角入手,将这个式子化简。
0.2 欧拉公式
首先是模长,我们知道复数相乘就是“模长相乘辐角相加”。
接下来令新的
然后令
观察到,最外层指数位置和底数位置上的两个极限各自分别都是收敛的,我们可以拆开来计算
没错!
有
根据基础的微积分知识,我们知道
即,
于是,我们得到了这么一个结论:
接下来我们把它转回直角坐标表示
给指数加上实部,就是著名的欧拉公式
0.3 转圈圈
考虑这个函数
根据刚刚导出的欧拉公式,无论自变量
更进一步,如果把函数值视作复平面中的点,那么随着
指数函数在复数域中变成了周期函数
举个例子,如果
相信这个东西大家都见过
再举个例子,我们令
如果随便挑一个复数
根据模长相乘辐角相加准则,不难看出,这个相乘的操作相当于把复平面上的
然后,我们开拓一下思路,不断把
用公式表达出来,是这样的
没错,我们刚刚求出了方程
单位根
我们把方程
稍加思索,形如
的值都会在
不过需要注意的是,
的值都是
这些单位根中
于是,方程
简而言之,
次单位根就是从 开始,把单位圆周平均分成 段的 个点。
由于单位根特殊的周期性,它具有如下的几个性质:
第一条:一个单位根旋转一整圈之后还是他自己
第二条:【一次走一步,每步走
米】和【一次迈 步,每步走一米】是等价的 第三条:一个单位根转过半圈相当于取他的相反数
Part 1 傅里叶变换
用不到的 傅里叶变换(FT)
傅里叶变换是对某一个连续函数(信号)进行的一种变换,可以表示某个频率的正弦/余弦波形在原信号中“占据”的“比重”。
傅里叶变换及其逆变换一般写作下面的形式:
注意这其中
关于这个东西的更多细节,可以去看看 3Blue1Brown 的视频。
离散傅里叶变换(DFT)
在OI中,用到的一般是傅里叶变换的离散版本
OI中最常见的写法会将上下两式的正负号颠倒一下,变成这样
我也不知道为什么要这么做,但是大家都是这么写的
接下来简单介绍一下一下离散傅里叶逆变换的公式的来历。因为傅里叶变换是一个线性变换,所以它可以写成矩阵的形式,如下:
为了方便起见,上式中的
,指数位置的第一个参数为 ,第二个参数为 .
现在只需要求出它的逆矩阵就能得到逆变换的公式了!根据基础的线性代数知识,这是一个范德蒙德矩阵,它的逆阵就是它的每一个位置取倒数并乘上
似乎完全没有解释清楚呢
不过这部分不重要
快速傅里叶变换(FFT)
终于到重头戏了!我们观察一下 DFT 的式子,会发现强行计算他会用掉我们
首先对比一下
然后,注意到式子里面的
正好就是在 Part 0 中提到的
利用单位根的性质3,做出如下变换:
现在可以看出,这两个
此处施工中
Part 2 卷积
用不到的 普通卷积
卷积是对两个函数进行的一种运算,可以得到另一个函数,定义如下:
当然在 OI 中我们用到的一般是卷积的离散版本
离散卷积
只需要把上面式子中的
我们可以把它改成另一种形式
其中
此处施工中
Part 3 数论变换
原根与单位根的对称性
我们知道如果模数为一个质数
此处施工中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?