傅里叶级数及其推导是数学在现实世界中最迷人的应用之一。
我一直支持那些用数学去解释周围世界的科学家,从使用线性代数设计神经网络,到用混沌理论研究太阳系,再到用弦理论去理解宇宙的基本构建块,数学无处不在。
当然,这些是数学的更复杂和技术性的应用程序。
但是,生活中的应用数学呢?
嗯,也许你在学习时听过双耳节拍。或者你以前做过X光检查。或者你可能见过脑电图(EEG)测试的操作。
无论哪种情况,总是有数学算法来促进它们的使用。
但是哪个算法呢?
嗯,其中一个就是傅里叶级数(及其推导)
傅里叶级数及其推导的核心是数学算法,旨在将信号从时域转换到频域。
时域中的信号是在一定时间内分析的。
频域中的信号是在频率功率谱上分析的。
傅立叶级数通过接收一个信号函数,并将其分解为具有不同频率和不同功率水平的正弦函数的总和来实现这一点。
傅立叶级数的公式表示为:
从傅里叶级数中,我们可以推导出连续傅里叶变换,它可以让我们分离出构成信号的单个频率分量及其相应的功率。
傅立叶级数的可视化:
这种转换非常有用,因为一旦我们将信号从时域转换为频域,我们就可以从信号中去除不需要的频率分量。
例如,假设我们使用EEG记录大脑信号以分析ADHD(注意缺陷多动障碍)。
通常,通过EEG记录的信号非常嘈杂且不可靠——至少原始EEG信号是不可靠的。
我们可以使用傅里叶级数的另一种推导---快速傅里叶变换(FFT),将时域中的原始EEG信号分解为频域。
如下图,时域左,频域右:
上图中,我们可以通过带通、带阻或陷波滤波器,从数据集中移除特定频率或频率范围。你可以清楚地看到EEG数据集的频域中有巨大的尖峰(很可能是来自电力线的干扰),同样的算法也可以应用于其他应用,如音频工程、图像处理、医学诊断和语音识别。
现在,你可能已经注意到我提到了傅里叶级数的不同推导,其中一些是傅里叶变换和快速傅里叶变换。
不同的傅里叶级数推导适用于不同的上下文。有些在实际使用中更实用,有些则更侧重于数学理论。
例如,连续傅里叶变换处理的是无限序列上的连续非周期信号。
连续傅立叶变换公式:
但是计算机无法处理连续信号,而且你很可能需要处理的是信号的更多有限样本。
所以,我们可以使用离散傅里叶变换,它接受N个样本上的有限信号。
离散傅里叶变换公式 :
像这样的推导使我们的生活变得更加轻松。
现在,你可以轻松地从之前的每个变换中数学推导出下一个,它们都是相互关联的。如下图:
Real Fourier series:实数傅立叶级数
Complex Fourier series:复数傅立叶级数
Fourier Transform:傅立叶变换
Discrete Fourier Transform:离散傅立叶变换
Fast Fourier transform:快速傅立叶变换
下面介绍每种变换后的数学。
实数傅里叶级数是其他傅立叶推导的基础。
正如前面提到的,它允许我们表达连续周期信号,即在一段时间内重复的信号,为正弦和余弦的和。
实数傅里叶级数的方程表示:
将函数分解成正弦波允许我们更精确地分析函数,下面我们详细推导上式方程:
假设我们有向量z:
向量z可以通过一组正交向量表示,公式:
表示向量z和向量的内积。
上述方程可以用于函数。
例如,假设我们有函数f和g,它们的乘积是一个积分。这两个函数都是周期为T的周期函数。
通过内积公式,可得函数f和g:
因此实数傅立叶级数通过一组基函数重新表达函数f和g。
基函数bₙ是两组不同函数的组合,fₙ和gₙ,可以写成:
所以让我们将这个应用到一个新函数上,现在我们假设定义一个f的信号,我们可以使用上面展示的基变换,将函数f重写为实数傅立叶级数。
根据上面的介绍,我们定义内积和的推导公式:
当应用于信号及其对应的频率时,n是表示频率分量的索引,t是时间,T是一个完整的周期,系数aₙ和bₙ是不同的频率分量的振幅。
要澄清的是,a₀在实数傅里叶级数的求和之外,因为它代表信号的直流(DC)分量。它是一个常数项,表示一个周期信号在一个周期内的平均值
在实数傅里叶级数中使用这个术语被证明对于设置信号的“中心”或“基线”非常有用。从那里,我们可以更有效地分析交流电(AC)与基线的偏差。
如上图,AC是交流某频率分量的幅值,DC是直流分量,表示周期信号的平均值。
所以最终,实数傅里叶级数是系数aₙ或bₙ与正弦波的乘积之和。
是不是有点茅塞顿开的感觉?我们接着往下介绍。
复数傅里叶级数实际上与实数傅里叶级数相同,至少在它们的目的上是这样。它们都将周期信号表示为正弦波的和。
但关键的区别在它们如何表示一个信号。
复数傅里叶级数不是单独取正弦和余弦的和然后将它们加在一起(实数傅立叶变换),而是在单一的复指数下表示它们。
复指数公式:
系数aₙ和bₙ也可以用单一的变量cₙ所表示:
所以,复数傅里叶级数是实数傅里叶级数更简洁的表示。
如上节介绍的实数傅立叶级数
n表示频率分量的索引
t表示时间
T表示信号周期
下面开始推导复数傅立叶级数。
欧拉公式:
j是复数的虚部单元。
w是角频率,有:
欧拉公式表示两个正弦波的和一个复指数之间的等价性,通过欧拉公式,我们可以使用指数表示正弦和余弦的三角恒等式。
因此给定实数傅立叶变换:
通过欧拉公式,写成复指数形式:
合并得到下式:
上式第二个表达式是负数的复指数,将-n替换n,得:
因此可以得到f(t):
为了简化上式,我们可以用新的系数cₙ来重写包含系数aₙ和bₙ的内部表达式。
有:
如上式,系数和系数{c_{-n}}实际上代表了从负无穷到正无穷的所有可能的复系数,我们不需要将方程表示为分开的表达式之和,我们可以使用系数cn将它们合并成一个求和的表达式,就是我们要得到的复数傅立叶级数。
系数的表示可以通过复数傅立叶级数来推导,这个推导使我们能够在不求解和的情况下得到。
推导:
即复数傅立叶变换的公式:
复数傅立叶变换的到对应实数傅立叶变换的周期T
到目前为止,你可能在问:这些推导之间有什么差异?
差异在于它们如何应用以及应用场景。
实数傅立叶变换和复数傅立叶变换都是为连续周期信号设计的,意味着信号的长度是无限的。
如下图的连续周期性无限长信号:
连续傅立叶变换用于连续且无限但非周期的信号。
如下图的连续非周期性无限长信号:
下面深入推导下连续傅立叶变换。
如上节所介绍的复数傅立叶级数,系数:
为了得到连续傅里叶变换,我们取cₙ趋向于无穷极限,将其从离散变量转变为连续变换。因此,我们可以推导上述方程,并取从负无穷到正无穷的极限
接着上面的推导:
其中X(jw)表示某特定频率下的功率。
连续傅立叶变换将连续且非周期的信号x(t)从时域转换到频域X(jw)。
但是请注意,虽然这个变换是非周期的,并且看起来可能越来越有用,但有一个前提是信号必须是连续的。
计算机是基于二进制0和1处理连续数据,因此离散傅立叶变换应运而生。
离散傅里叶变换为采样和用计算机转换实际数据奠定了基础。
让我们以脑电图(EEG)为例。
在EEG中,数据以特定间隔的离散值被采集,这取决于采样率。鉴于此,计算机很容易处理这些数据,因为它是基于离散值运作的。
离散傅里叶变换将允许我们使用在EEG中收集的离散数据,并将该数据从时域转换到频域,以便在计算机上进行更好的分析。
为了推导离散傅里叶变换,我们引入连续傅里叶变换。
连续傅立叶变换:
我们以一定的采样间隔共采样N个样本数据,等价于:
根据上面的变量定义,有:
将上式带入离散傅立叶变换公式:
我们进一步推导上式,以便更好的理解离散傅立叶变换。
我们假设:
因此离散傅立叶变换可写成:
我们对上式进行展开:
对于每一个频率,我们都要计算N个信号长度与权重的乘积求和。
比如:
k=1时,
由上式推导可知,每个频率计算都需要每个信号的参与,且共有N个频率。
因此复杂度
随着信号的增加,计算量成指数级增加。
如下图:
因此,快速傅立叶变换解决复杂运算的问题。
记得读大学时候,为了搞懂快速傅立叶变换,花了一周的时间去看《数字信号处理》的快速傅立叶变换的章节,看懂了,但过一段时间又忘记了。
我不建议大家去花大量时间去看这个,只需要知道通过蝶形算法简化运算,算法复杂度从降低到。
matlab和python都有直接进行FFT的函数计算,直接用就好。
若了解傅立叶变换原理,可以很快的理解信号滤波、小波变换、PCA和SVD等基础算法,思想都是相通的,希望这篇文章能够解除你疑惑。
欢迎扫码关注: