傅里叶级数的指数形式
先从数学定义中的三角形式傅里叶级数出发,来讨论这个问题:
f(t)=a02+a1cos(ωt)+b1sin(ωt)+a2cos(2ωt)+b1sin(2ωt)+...=a02+∞∑n=1[ancos(nωt)+bnsin(nωt)]
an=2T∫t0+Tt0f(t)cos(nωt)dtbn=2T∫t0+Tt0f(t)sin(nωt)dt
其中,f(x)要求是周期函数。
若作如下的转换:
c0=1T∫T2−T2f(t)dtcn=an−jbn2=1T∫T2−T2f(t)[cos(nωt)−jcos(nωt)]dt=1T∫T2−T2f(t)e−jnωtdtc−n=c∗n=1T∫T2−T2f(t)ejnωtdt
代入上面的三角形式傅里叶级数后,可得出最终的结果为:
f(t)=c0+∞∑n=1(cnejnωt+c−ne−jnωt)=+∞∑n=−∞cnejnωt
傅里叶级数是根据弦振动理论推导而来的,网络上也有很多人通过麦克劳林级数等其他数学方式来解释。傅里叶级数具体如何而来的这里不作深究。
信号与系统中的傅里叶级数
傅里叶级数定义:
f(x)=+∞∑k=−∞akejk2πTx(2-1)
f(x)是最小周期为2T的函数。以及级数收敛所需的Dirichlet条件:
- f(x)在一个周期内绝对可积
- f(x)在一个周期内只有有限个第一类间断点
- f(x)在一个周期内只有有限个极值点
在实际自然界中,不满足Dirichlet条件的信号几乎是不存在的,仅具有数学上的意义,所以不深入探究。故可以认为信号与系统中所有的周期信号都满足Dirichlet条件,即都可以写作傅里叶级数的形式。
特征函数#
在讨论傅里叶级数之前,再回过头来看看卷积公式,根据卷积的交换律,我们可以将(1-2)式改写为:
y(t)=∫+∞−∞x(t−τ)h(τ)dτ(2-2)
如果拥有一个周期信号,则可以将其展开成如(2-1)所示的傅里叶级数形式,这里用一个简单的频域抽样信号来推导: x(t)=ejkω0t(ω0=2πT) 。将其代入(2-2)后即可化为如下形式:
y(t)=ejkω0t∫+∞−∞e−jkω0τh(τ)dτ(2-3)
令 H(ejkω0)=∫+∞−∞e−jkω0τh(τ)dτ,则有:
y(t)=H(ejkω0)⋅x(t)(2-4)
这里的H函数可以称作系统的特征函数,也可以将其转换到S域上,以便于对于更多系统特性的具体分析。基于上述的推导,不难发现我们已经向傅里叶级数迈进了一步:提供了求解傅里叶系数 的思路。即通过凑出类似上面H函数形式的方法,利用x(t)的积分求解。 在奥本海姆《信号与系统(第二版)》的P119页上对于傅里叶级数有更加详细具体的推导。
傅里叶级数分析公式推导#
对综合公式两端乘以 e−jnω0t ,得出:
x(t)e−jnω0t=+∞∑k=−∞akej(k−n)ω0t
再两端同时对t进行单周期上的积分:
∫Tx(t)e−jnω0tdt=+∞∑k=−∞ak∫Tej(k−n)ω0tdt
Copy
这里应用了积分和求和的互换性质。关于高数知识我后面可能像这样专门写一些。
利用三角函数的正交性:
∫Tej(k−n)ω0tdt={Tfork=n0fork≠n
得到最终推导出的分析公式:
ak=1T∫Tej(k−n)ω0tdt
正交性的说明#
这里对一个小地方做简单说明,书中3.35式 ∫T0ej(k−n)ω0tdt 求得结果为T,原因在于三角函数系的正交性。由于指数形式可以通过欧拉公式转换为三角函数,故正交性质可直接利用。
ej(k−n)ω0t=(coskω0t+jsinkω0t)(cosnω0t−jsinnω0t)(2-5)
很显然,(2-5)式中所有三角函数均隶属于 T=2πω0 的三角函数系,若k不等于n则即它们任意两者之间的乘积在周期T上的积分为0。
三角函数的正交性可如下简述:
- cosx,sinx,cos2x…cosnx,sinnx可视为一三角函数系,这个函数系中任意两不相同三角函数相乘在T=2π上的积分为0。
最终给出周期连续信号傅里叶级数的综合公式和分析公式:
x(t)=+∞∑k=−∞akejkω0t = +∞∑k=−∞akejk2πTtak=1T∫Tx(t)e−jkω0t = 1T∫Tx(t)e−jk2πTt(2-6)
由上面的内容可以看出,我并未考虑傅里叶级数的物理意义,而是从纯粹的数学角度去思考。如果数学基本功尚可,在学习伊始可以将傅里叶级数视作一种新的数学处理方法,而暂且忽略其频域特性相关内容。因为频域本身也是一种概念,而非物理世界真实存在的“域”。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话