快速傅里叶变换

Posted point-king

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速傅里叶变换相关的知识,希望对你有一定的参考价值。

关于复数

2次方程的求根公式

$$ax^2+bx+c=0(a eq0)$$
$$x=frac{-bpmsqrt{b^2-4ac}}{2a}$$

3次方程(无2次项)的求根公式

$$x^3=mx+n$$
$$x=sqrt[3]{frac{n}{2}+sqrt{({frac{n}{2}})^2-({frac{m}{3}})^3}}+sqrt[3]{frac{n}{2}-sqrt{({frac{n}{2}})^2-({frac{m}{3}})^3}}$$

复数定义

形如$z=a+bi$的数就是复数
记作:$a=Re(z),b=Im(z)$

复数的计算

技术分享图片

复数的几何形式

复平面,x轴为实轴,y轴为虚轴。
虚数的模,$|z|=sqrt{a^2+b^2}$
极坐标,$z(r, heta)$
极坐标的复数相乘,$(r1, heta1)(r2, heta2)=(r1r2, heta1+ heta2)$

关于DFT

点值表示法

把这个多项式理解成一个函数,用这个函数上的若干个点的坐标来描述这个多项式。
f(x)={(x0,f(x0)),(x1,f(x1)),(x2,f(x2)),...,(xn?1,f(xn?1))}
你会得到n+1个方程,其中x[0~n]和y[0~n]是已知的, a[0~n]是未知的。
n+1的未知数, n+1个方程所组成的方程组为“n+1元一次方程”,因为它是“一次方程”,所以(一般情况下,不考虑无解和无数解)可以通过“高斯消元”解得所有未知数唯一确定的值。
也就是说,用点值表示法可以确定出唯一确定的系数表示法中的每一位的系数。

傅里叶变换

这种把一个多项式转化成“离散的点”表示的方法就叫做“DFT”(离散傅里叶变换)
“离散的点”还原回多项式的方法就叫做“IDFT” (离散傅里叶反变换)

多项式乘法

技术分享图片

单位根

技术分享图片
这里选择单位根(模为1的点的集合)上的点是因为$x^2=1$
技术分享图片
技术分享图片

关于FFT

技术分享图片
这里便是利用奇偶性进行分治,通过下面的公式推导使运算加快。
技术分享图片
技术分享图片
技术分享图片
这是FFT分治的重点,他利用前面提到的单位根的性质,将每次计算的时间变成了一半,这边是FFT分治的关键。
伪代码:

FFT(a)
{
    n=a.length;
    if(n==1)
    {
        return a;
    }
    e=(a[0],a[2],...,a[n-2]);
    o=(a[1],a[3],...,a[n-1]);
    y_e=FFT(e);
    y_o=FFT(o);
    for(int k=0;k<=n/2-1;++k)
    {
        w=e^(2*π*i*k/n);
        y[k]=y_e[k]+w*y_o[k];
        y[k+n/2]=y_e[k]-w*y_o[k];
    }
}

关于IDFT

……(未完待续)





















以上是关于快速傅里叶变换的主要内容,如果未能解决你的问题,请参考以下文章

数学建模由张量模-n展开到高维傅里叶变换(附代码)

傅里叶变换通俗解释及快速傅里叶变换的python实现

关于快速傅里叶变换

快速傅里叶变换(FFT)

OpenCV C++(十)----傅里叶变换

快速傅里叶变换FFT(Fast Fourier Transform)