matla图像b傅里叶逆变换_快速傅里叶变换(FFT)

快速傅里叶变换:

快速傅里叶变换 (fast Fourier transform),即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

FFT(Fast Fourier Transformation) 是离散傅氏变换(DFT)的快速算法。即为快速傅氏变换。它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。

多项式的两种表达方法:

1.系数表达法:

7a34b39a69a8bacafeece1ef431e1202.png

e125b094e80358d2ae9e01edc6e27c8c.png
是这个多项式每一项的系数,所以这是多项式的系数表示法

2.点值表达法:

在函数图像中,F[x]这个多项式可以被n个点唯一确定,即代入n个点作为x,分别解出对应的 y,得到n个式子。把这n条式子联立起来成为一个有n条方程的n元方程组,每一项的系数都可以解出来.(可类比二元一次方程) 也就是说,使用

就可以完整描述出这个多项式,这就是多项式的点值表示法.

多项式相乘

设两个多项式分别为f(x),g(x),我们要把这两个多项式相乘 (即求卷积)。

如果用系数表示法: 我们要枚举f的每一位的系数与g的每一位的系数相乘,多项式乘法时间复杂度

这也是我们所熟知的高精度乘法的原理。

如果用点值表示法:

我们可以发现,如果两个多项式取相同的x,得到不同的y值,那么只需要y值对应相乘就可以了!复杂度只有枚举x的O(n)。那么问题转换为将多项式系数表示法转化成点值表示法。

系数转点值的算法叫DFT(离散傅里叶变换),优化后为FFT(快速傅里叶变换),点值转系数的算法叫IDFT(离散傅里叶逆变换),优化后为IFFT(快速傅里叶逆变换)。

FFT加速多项式乘法

由于多项式乘法用点值表示比用系数表示快的多,所以我们先要将系数表示法转化成点值表示法相乘,再将结果的点值表示法转化为系数表示法的过程。
第一个过程叫做FFT(快速傅里叶变换),第二个过程叫IFFT(快速傅里叶逆变换)
在讲这两个过程之前,首先了解一个概念:

单位根

复数

满足
,称
是n次单位根

怎么找单位根?

单位圆:圆心为原点、1为半径的圆

把单位圆n等分,取这n个点(或点表示的向量)所表示的复数(即分别以这n个点的横坐标为实部、纵坐标为虚部,所构成的虚数),即为n次单位根。当n=8时,所有的8次单位根,分别记为

从点(1,0)开始(即

),逆时针将这n个点从0开始编号,第k个点对应的虚数记作
由复数相乘法则:模长相乘幅角相加​ 可得:

根据每个复数的幅角,可以计算出所对应的点/向量。

对应的点/向量是
,即为复数

单位根的性质

f341ec3e49bd209a06401e9fbd2c79c9.png
单位根的性质

DFT(离散傅里叶变换)

对于任意多项式系数表示转点值表示,例如

,可以随便取任意n个x值代入计算,但这样时间复杂度是
所以伟大数学家傅里叶取了一些特殊的点代入,从而进行优化。他规定了点值表示中的n个x为n个模长为1的复数。这n个复数不是随机的,而是单位根。把上述的n个复数(单位根)
代入多项式,能得到一种特殊的点值表示,这种点值表示就叫DFT(离散傅里叶变换)。

FFT(快速傅里叶变换)

虽然DFT能把多项式转换成点值但它仍然是代入n个数,复杂度仍然是O(n2),所以它只是快速傅里叶变换的朴素版。所以我们要考虑利用单位根的性质,加速我们的运算,得到FFT(快速傅里叶变换)

对于多项式

将A(x)的每一项按照下标的奇偶分成两部分:

设两个多项式

,令:

显然,

假设k<n,代入

(n次单位根):

考虑

分别在
的点值表示已经求出,就可以O(n)求出A(x)在
处的点值表示。这个操作叫蝴蝶变换

是规模缩小了一半的子问题,所以不断向下递归分治。当n=1的时候返回。这个过程一定要求每层都可以分成两大小相等的部分,所以多项式最高次项一定是2的幂,不是的话直接在最高次项补零。时间复杂度

IFFT(快速傅里叶逆变换)

一个重要结论

把多项式A(x)的离散傅里叶变换结果作为另一个多项式B(x)的系数,取单位根的倒数(单位根的倒数其实就是它的共轭复数 。)即

作为x代入B(x),得到的每个数再除以n,得到的是A(x)的各项系数,这就实现了傅里叶变换的逆变换了。相当于在FFT基础上再做一次FFT。

优化:迭代FFT

在进行FFT时,我们要把各个系数不断分组并放到两侧,一个系数原来的位置和最终的位置的规律如下。

初始位置:

第一轮后:

第二轮后:

第三轮后:

“|”代表分组界限

把每个位置用二进制表现出来。位置x上的数,最后所在的位置是“x二进制翻转得到的数”,例如4(100)最后到了1(001)5(101)最后不变为5(101),3(011)最后到了6(110)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值