从信号与系统角度看 OI/XCPC 中的傅里叶变换运用
2025/5/30
本文最后修改于 16 天前,请注意文章内容的时效性。
在 OI/XCPC 赛场上,快速傅里叶变换(FFT)算法已被广为运用。然而,在算法竞赛中,对傅里叶变换的讲解大多将其作为点值多项式/系数多项式之间的变换理解。本文将从信号与系统角度入手,提供一个新的理解角度,分析一些算法竞赛中常见的傅里叶变换运用。
前置知识
- 微积分基础
- 级数相关
- 复数基础知识
一些关于表述的约定
- 与数学上常用的不同,在本文中,以
表示虚数单位。 - 在叙述傅里叶变换时,通常用小写字母表示信号的时域表达,如
,用大写字母表示其对应的傅里叶变换,如
信号与时域表示
既然要从信号与系统的角度入手,首先我们应当考虑什么是信号。
在《信号与系统》的课程中,通常将信号定义为表示消息的物理量。
根据信号在时间上是否连续,我们可将其分为连续时间信号/离散时间信号。
对于连续时间信号,我们常用信号取值与时间的函数
而对于离散时间信号,则可以对应的用一个数列
实际上,我们可以将更多的事物当作信号进行处理。例如,一个多项式
以上两种信号表示方法都着重于通过信号某时刻的取值刻画信号,因此我们也称其为信号的时域表示。对时域表示信号进行分析的方法称为信号的时域分析。
卷积
在信号的处理中,常常需要用到卷积运算。如信号
当然,本文主要着重于算法竞赛领域,因此以上介绍读者不必理解,感兴趣的读者可以自行查阅相关资料了解。
在此,我们分别对连续时间信号与离散时间信号定义卷积运算
卷积运算满足线性性、交换律、结合律、分配律。
时域表示的不足
虽然信号的时域表示通常更符合直觉,但并非在所有情况下,时域分析都能很容易地对所有信号进行处理。例如如下信号:
如果要将
频域分析:从傅里叶级数到连续时间傅里叶变换
1807 年,傅里叶(Baron Jean Baptiste Joseph Fourier)在论文《热的传播》中提出了一项新理论,认为可以将任一周期函数表示为无穷多个三角函数之和。后来,在 1829 年,狄利克雷(Johann Peter Gustav Lejeune Dirichlet)进行了严格的推导,提出了狄利克雷条件,证明了满足该条件的周期函数都可以采用傅里叶的方法进行展开。
狄利克雷条件的内容主要包括三条:
- 在一周期内,函数连续,或只有有限个第一类间断点。
- 在一周期内,函数至多有有限个极大值、极小值。
- 在一周期内,函数绝对可积(即绝对值的积分存在且不为无穷)。
今天,我们将傅里叶的展开方法称为函数的傅里叶展开,而上述条件为可采用傅里叶展开的充分不必要条件。
对于可采用傅里叶展开的函数
其中有
其中
考虑到三角函数的辅助角公式,可以将原式化简为:
根据欧拉公式
代入即可得到复指数形式的傅里叶级数:
那么,这个傅里叶级数有什么用呢?
我们以
可以看到,函数周期
这种将信号用不同频率分量之和表示的方法,称为信号的频域表示,对频域表示信号的分析方法称为频域分析。
直到现在,我们的傅里叶变换都还是建立在周期信号的基础上。那么,该如何处理非周期信号呢?
一个很自然的想法是,将非周期信号视为一个周期
将
我们惊喜的发现,上式正符合积分的定义,因此我们将求和和极限转换为积分形式:
这里标记
同样的,对
以上即为非周期信号的连续时间傅里叶变换/反变换公式,其中
连续时间傅里叶变换有许多优良的性质,在此挑几条接下来会用到/比较重要的性质列出(证明略,如果有感兴趣的读者可以自行查阅信号与系统相关资料进行了解)。
- 线性性:
- 时域卷积定理:
- 频域卷积定理:
由此我们可以发现一条非常有趣的结论,时域上的卷积运算对应频域上的乘法运算,反之亦然。
抽样:从连续时间傅里叶变换到离散时间傅里叶变换
现在我们有了对连续时间信号进行频域分析的方法,但是在实际工程中,计算机处理的信号往往是数字信号,也即离散时间、离散取值的信号。因此,我们需要对连续时间傅里叶变换进行一些拓展,得到对离散时间信号进行频域分析的方法。
首先,我们研究一个较为简单的离散时间信号
因此,我们可以通过抽样,将连续时间傅里叶变换转变为离散时间傅里叶变换。
首先我们引入单位冲激信号
- 积分特性:
(积分区间需包含零点) - 抽样特性:
- 采样特性:
- 卷积延时特性:
工程上一种可用的定义为,令
同样的,在离散时间信号中,有单位样值信号:
定义单位冲激串
我们对连续时间信号
作连续时间傅里叶变换,得到
当抽样间隔
显然,
此时我们自然可以想到,
我们写出
此处交换积分与求和的顺序,得到:
根据单位冲激信号的抽样特性,可以得到:
我们定义数字角频率
令
同样的,可得到其逆变换为:
注意到
与连续时间傅里叶变换类似,离散时间傅里叶变换也有一些优良的性质,一些接下来会用到/比较重要的性质如下(证明略)。
- 线性性:
- 时域卷积定理:
周期延拓:离散时间傅里叶变换的工程化
到此为止,我们已经能够对离散时间信号进行傅里叶变换,求取其频谱密度函数了。但是,我们发现得到的频谱密度函数仍然是连续的,不便于在计算机中处理。这是因为我们实际考虑的信号序列长度仍然是无穷大,导致频谱密度函数的采样间隔无穷小。
既然要在计算机中处理,那么我们的傅里叶变换后的结果也应当是一个离散、有限长度的序列。有限长度这一条暂且放到一边,我们先来回想一下,有什么与傅里叶变换相关,同时输出结果是离散的呢?
对!就是我们最开头使用的傅里叶级数展开!对一个连续时间周期信号作傅里叶级数展开,可以得到一个离散的频谱序列。
由此我们可以自然联想,如果我们输入的离散信号序列也是周期的,那得到的频谱密度函数会不会也是离散的呢?换而言之,就像连续时间傅里叶变换中时域-频域之间卷积-乘法运算的对称性一样,信号与频谱密度函数之间会不会有周期性-离散性的对称呢?
我们假设
类比单位冲激串,定义单位样值序列
我们则可以构造如下的式子:
作傅里叶变换,得到:
由离散时间傅里叶反变换,得到:
记
上式即为离散时间周期序列
类似的,有:
易得
在工程上,常从实际信号序列中截取一段序列,作为
应用
在算法竞赛中,傅里叶变换的主要应用点为加速卷积。
例如,某些题目中需计算的式子呈现出两个序列卷积的形式,但直接计算卷积往往有
朴素的离散时间傅里叶级数展开计算显然是
在此不讨论 FFT 的实现细节,仅从思路上对 FFT 题目的解答作出一种新的解释。
洛谷 P1919 【模板】高精度乘法 | A*B Problem 升级版
本题要求计算两个长整数相乘的结果,直接写运算复杂度
此处设两个整数分别为
例题待补充
后记
本文写作过程中,来自 Luogu Furry Club 的小伙伴提供了大量帮助。在此感谢 Untitled_unrevised 对初稿的审阅和建设性意见!
加载评论中……