「学习笔记」Fast Fourier Transform 快速傅里叶变换

本文详细介绍了快速傅里叶变换(FFT)的基础知识,包括复数、单位根及其性质,以及DFT和IDFT的概念。通过递归和迭代优化的方法,阐述了如何在O(nlogn)的时间复杂度内完成多项式乘法。文章适合对OI和多项式运算感兴趣的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

快速傅里叶变换( Fast Fourier Transform,FFT \text{Fast Fourier Transform,FFT} Fast Fourier Transform,FFT )是一种能在 O ( n log ⁡ n ) O(n \log n) O(nlogn)的时间内完成多项式乘法的算法,在 O I OI OI中的应用很多,是多项式相关内容的基础。下面从头开始介绍 FFT \text{FFT} FFT

前置技能:弧度制、三角函数、平面向量。

多项式

形如 f ( x ) = a 0 + a 1 x + a 2 x 2 + . . . + a n x n f(x)=a_0+a_1x+a_2x^2+...+a_nx^n f(x)=a0+a1x+a2x2+...+anxn的式子称为 x x x n n n次多项式。其中 a 0 , a 1 , . . . , a n a_0,a_1,...,a_n a0,a1,...,an称为多项式的系数。

系数表达法

上面定义中的表示就是系数表达法。其系数可看成 n + 1 n+1 n+1维向量 a ⃗ = ( a 0 , a 1 , . . . , a n ) \vec a=(a_0,a_1,...,a_n) a =(a0,a1,...,an)

点值表达法

把多项式看成一个函数,点值表示就用它图像上的 n + 1 n+1 n+1个不同的点 ( x 0 , y 0 ) , . . . , ( x n , y n ) (x_0,y_0),...,(x_n,y_n) (x0,y0),...,(xn,yn)来确定这个多项式。多项式有不止一个点值表示,可以证明每个点值表示确定唯一的系数表达多项式。

复数

虚数单位

i i i被称为虚数单位。规定 i = − 1 i=\sqrt {-1} i=1

复平面

复数的平面由 x , y x,y x,y轴组成。 x x x轴称为实轴, y y y轴称为虚轴。平面内的每一个从原点到某个点 ( a , b ) (a,b) (a,b)的向量 a ⃗ = ( a , b ) \vec a=(a,b) a =(a,b)表示复数 a + b i a+bi a+bi.

复数的模长: a 2 + b 2 \sqrt {a^2+b^2} a2+b2 .实轴到复数向量的转角 θ \theta θ称为幅角。

复数的基本运算

  • 复数的加(减)法: ( a + b i ) + ( c + d i ) = ( a + c ) + ( b + d ) i (a+bi)+(c+di)=(a+c)+(b+d)i (a+bi)+(c+di)=(a+c)+(b+d)i

  • 复数的乘法: ( a + b i ) ( c + d i ) = ( a c - b d ) + ( b c + a d ) i (a+bi)(c+di)=(ac-bd)+(bc+ad)i (a+bi)(c+di)=(acbd)+(bc+ad)i

  • 一个结论:复数乘法,模长相乘,幅角相加

共轭复数

a + b i a+bi a+bi a − b i a-bi abi互为共轭复数。

单位根

n n n次单位根是满足 z n = 1 z^n=1 zn=1 n n n个复数,它们均分复平面的单位圆(如图)。

这些复数满足模长为 1 1 1,幅角的 n n n倍是 2 π 2\pi 2π的倍数

根据欧拉公式:

欧拉公式 e x i = cos ⁡ x + i sin ⁡ x e^{xi}=\cos x+i \sin x exi=cosx+isinx,其中 e e e为自然对数的底数, i i i为虚数单位。

可得 n n n次单位根为 e 2 π k i n , k ∈ [ 0 , n − 1 ] e^{\frac{2\pi ki}{n}},k\in [0,n-1] en2πki,k[0,n1]

得:记 ω n = e 2 π i n , \omega_n=e^{\frac{2\pi i}{n}}, ωn=en2πi, n n n次单位根为 ω n 0 , . . . , ω n n − 1 \omega_n^0,...,\omega_n^{n-1} ωn0,...,ωnn1

单位根的性质

性质 1 1 1:根据定义得到: ω 2 n 2 k = ω n k \omega_{2n}^{2k}=\omega_{n}^{k} ω2n2k=ωnk(消去定理的特殊情形)

性质 2 2 2 ω n n 2 + k = − ω n k \omega_{n}^{\frac{n}{2}+k}=-\omega_n^k ωn2n+k=ωnk

证明:

ω n n 2 = e 2 π i n n 2 = e π i = cos ⁡ π + i sin ⁡ π = − 1 \omega_{n}^{\frac{n}{2}}=e^{\frac{2\pi i}{n} \frac{n}{2}}=e^{\pi i}=\cos \pi+i \sin \pi=-1 ωn2n=en2πi2n=eπi=cosπ+isinπ=1

ω n n 2 + k = ω n n 2 ω n k = − ω n k \omega_{n}^{\frac{n}{2}+k}=\omega_{n}^{\frac{n}{2}}\omega_{n}^{k}=-\omega_n^k ωn2n+k=ω

快速傅里叶变换Fast Fourier Transform, FFT)是一种高效的算法,用于计算离散傅里叶变换及其逆变换。FFT通过分治策略显著减少了传统DFT所需的计算量[^1]。 以下是有关快速傅里叶变换的一些核心概念以及如何制作或查找相关内容的建议: ### 关于快速傅里叶变换的核心知识点 #### 1. 傅里叶变换的基础理论 傅里叶变换可以将时间域信号转换到频率域表示形式。它揭示了一个信号由哪些频率成分组成。对于连续函数 \( f(t) \),其傅里叶变换定义如下: \[ F(\omega) = \int_{-\infty}^{\infty} f(t)e^{-j\omega t}\,dt \] 而对于离散情况,则有离散傅里叶变换 (Discrete Fourier Transform, DFT)[^2]。 #### 2. 快速傅里叶变换的工作原理 FFT 是一种优化后的 DFT 实现方法,利用了旋转因子 \( W_N^{kn} = e^{-j\frac{2\pi}{N} kn} \) 的周期性和对称性来减少冗余运算。常见的实现方式包括基-2 径向蝶形算法和分裂步法等[^3]。 ```python import numpy as np def fft(x): N = len(x) if N <= 1: return x even = fft(x[0::2]) odd = fft(x[1::2]) factor = np.exp(-2j * np.pi * np.arange(N) / N) return np.concatenate([even + factor[:N//2]*odd, even + factor[N//2:] * odd]) ``` 上述代码展示了基于递归思想的一个简单版本的 FFT 函数实现过程[^4]。 #### 3. 应用领域 FFT 广泛应用于音频处理、图像压缩、通信工程等领域。例如,在频谱分析中,可以通过观察不同频率下的幅值大小了解声音文件的主要构成;在 JPEG 图像编码过程中也涉及到了类似的变换操作[^5]。 ### 如何获取高质量 PPT 资料? 为了找到适合教学使用的讲解型 PPT 文件,可以从以下几个方面入手: - **学术资源网站**:访问 IEEE Xplore Digital Library 或 ScienceDirect 这样的平台检索相关论文附带的教学材料; - **开源课程项目**:Coursera 和 edX 提供了许多大学开设的免费在线课程,其中可能包含详细的幻灯片下载链接; - **技术社区分享**:GitHub 上有许多开发者上传了自己的学习笔记或者演示文档,搜索关键词 “fft ppt” 即可发现不少成果; - **教育机构官网**:部分高校会公开他们的授课讲义给公众查阅,比如 MIT OpenCourseWare 就提供了大量优质内容可供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值