虽然之前我的 BlogBlogBlog 里面也有涉及到傅里叶变换的文章,但是都感觉有点零星,今天打算祭出一篇长文,详细地剖析傅里叶变换的本质,从零开始推导傅里叶变换。
文章目录一、从正弦波的合成说起1.1 复傅里叶级数的引入以及求解1.2 到底为什么要引入复数?1.3 复傅里叶级数的意义——频谱二、周期信号的频谱(线谱)三、非周期信号的频谱(连续谱)四、线谱与连续谱的关系4.1 周期信号的连续谱表示4.2 非周期矩形信号的连续谱五、傅里叶变换的引入 一、从正弦波的合成说起说来也真是佩服傅里叶他老先生及其敏锐的洞察力,他认为:所有周期信号都可以用若干个正弦波叠加形成。, 我们看图说话,下面三张图,分别是:y=0.5+0.637.∗cos(x)y=0.5+0.637.∗cos(x)−0.212.∗cos(3∗x)y=0.5+0.637.∗cos(x)−0.212.∗cos(3∗x)+0.127.∗cos(5∗x)
y = 0.5 + 0.637.*cos(x)\\
y=0.5+0.637.*cos(x)-0.212.*cos(3*x)\\
y=0.5+0.637.*cos(x)-0.212.*cos(3*x)+0.127.*cos(5*x)
y=0.5+0.637.∗cos(x)y=0.5+0.637.∗cos(x)−0.212.∗cos(3∗x)y=0.5+0.637.∗cos(x)−0.212.∗cos(3∗x)+0.127.∗cos(5∗x)
我们看看这三个由正弦函数叠加得到的波形长什么样:
我们发现,这些正余弦函数的叠加居然真的慢慢向矩形波的形状靠拢了!
因此,我们给出实傅里叶级数的公式:
f(t)=a02+∑k=1∞(akcoskω0t+bksinkω0t)f(t) = \frac{a_0}{2} + \sum_{k=1}^{∞}(a_kcoskω_0t + b_ksinkω_0t)f(t)=2a0+k=1∑∞(akcoskω0t+bksinkω0t)
实傅里叶级数的表示可能还是不够直观,我们想要一种新的表现方式,这时我们需要用到欧拉公式:cos(kω0t)+jsin(kω0t)=ejkω0t
cos(kω_0t) + jsin(kω_0t) = e^{jkω_0t}cos(kω0t)+jsin(kω0t)=ejkω0t
因此,我们将欧拉公式带入上面的实傅里叶级数:f(t)=a02+∑k=1∞(akcoskω0t+bksinkω0t)=a02+12∑k=1∞[(akejkω0t+ake−jkω0t)−j(bkejkω0t−bke−jkω0t)]=a02+12∑k=1∞(ak−jbk)ejkω0t+12∑k=1∞(ak+jbk)e−jkω0t=∑k=0ak2+12∑k=1∞(ak−jbk)ejkω0t+12∑k=−1−∞(a−k+jb−k)ejkω0t=∑k=−∞+∞ckejkω0t
\begin{aligned}
f(t) &= \frac{a_0}{2} + \sum_{k=1}^{∞}(a_kcoskω_0t + b_ksinkω_0t)\\
&=\frac{a_0}{2} + \frac{1}{2}\sum_{k=1}^{∞}[(a_ke^{jkω_0t} + a_ke^{-jkω_0t})-j(b_ke^{jkω_0t}-b_ke^{-jkω_0t})]\\
&=\frac{a_0}{2} + \frac{1}{2}\sum_{k=1}^{∞}(a_k - jb_k)e^{jkω_0t} + \frac{1}{2}\sum_{k=1}^{∞}(a_k + jb_k)e^{-jkω_0t}\\
&=\sum_{k=0}\frac{a_k}{2} +\frac{1}{2}\sum_{k=1}^{∞}(a_k - jb_k)e^{jkω_0t} + \frac{1}{2}\sum_{k=-1}^{-∞}(a_{-k} + jb_{-k})e^{jkω_0t}\\
&=\sum_{k = -∞}^{+∞}c_ke^{jkω_0t}
\end{aligned}
f(t)=2a0+k=1∑∞(akcoskω0t+bksinkω0t)=2a0+21k=1∑∞[(akejkω0t+ake−jkω0t)−j(bkejkω0t−bke−jkω0t)]=2a0+21k=1∑∞(ak−jbk)ejkω0t+21k=1∑∞(ak+jbk)e−jkω0t=k=0∑2ak+21k=1∑∞(ak−jbk)ejkω0t+21k=−1∑−∞(a−k+jb−k)ejkω0t=k=−∞∑+∞ckejkω0t
因此,我们就得到了复傅里叶级数的表示!
那么,这里有一个未知数 ckc_kck,我们如何求解呢?我们来看看:f(t)=∑k=−∞+∞ckejkω0tf(t)=cmejmω0t+∑k=−∞,k≠m+∞ckejkω0tf(t)e−jmω0t=cm+∑k=−∞,k≠m+∞ckej(k−m)ω0t∫−T2T2f(t)e−jmω0t=∫−T2T2cm+∫−T2T2∑k=−∞,k≠m+∞ckej(k−m)ω0t∫−T2T2f(t)e−jmω0t=Tcm+0cm=1T∫−T2T2f(t)e−jmω0t \begin{aligned} f(t) &= \sum_{k = -∞}^{+∞}c_ke^{jkω_0t}\\ f(t)&=c_me^{jmω_0t}+\sum_{k = -∞,k≠m}^{+∞}c_ke^{jkω_0t}\\ f(t)e^{-jmω_0t} &=c_m+\sum_{k = -∞,k≠m}^{+∞}c_ke^{j(k-m)ω_0t}\\ \int_{-\frac{T}{2}}^{\frac{T}{2}}f(t)e^{-jmω_0t} &= \int_{-\frac{T}{2}}^{\frac{T}{2}}c_m+\int_{-\frac{T}{2}}^{\frac{T}{2}}\sum_{k = -∞,k≠m}^{+∞}c_ke^{j(k-m)ω_0t}\\ \int_{-\frac{T}{2}}^{\frac{T}{2}}f(t)e^{-jmω_0t} &= Tc_m+0\\ c_m &= \frac{1}{T}\int_{-\frac{T}{2}}^{\frac{T}{2}}f(t)e^{-jmω_0t} \end{aligned} f(t)f(t)f(t)e−jmω0t∫−2T2Tf(t)e−jmω0t∫−2T2Tf(t)e−jmω0tcm=k=−∞∑+∞ckejkω0t=cmejmω0t+k=−∞,k=m∑+∞ckejkω0t=cm+k=−∞,k=m∑+∞ckej(k−m)ω0t=∫−2T2Tcm+∫−2T2Tk=−∞,k=m∑+∞ckej(k−m)ω0t=Tcm+0=T1∫−2T2Tf(t)e−jmω0t
1.2 到底为什么要引入复数?刚刚在 1.1 节我们在讨论为什么要用复数的线性叠加来代替原来的信号时,解释得有点牵强。
难道仅仅是因为看起来一堆不同幅度的正弦波可能可以叠加成一些其他新的波形,我们就用正余弦函数来表示、然后又根据欧拉公式,我们就可以用复数的线性叠加来表示信号吗?
说到底,还是没有讲清楚引入复数的意义!
其实,我们考虑用复指数信号来合成信号的原因是:复指数信号具有保真性。也就是说,一个复指数信号经过一个系统,输出的信号依然还是复指数,只不过幅度或频率改变了,我们看看为什么?
首先分析一下连续时间信号,假设我们的输入信号是 x(t)=estx(t) = e^{st}x(t)=est,系统的单位冲激响应是 h(t)h(t)h(t),那么根据我们之前 BlogBlogBlog 中学习的卷积原理,我们可以知道,x(t)x(t)x(t)输入系统得到的输出是:y(t)=∫−∞+∞h(τ)x(t−τ)dτ=∫−∞+∞h(t−τ)es(t−τ)dτ=est∫−∞+∞h(τ)e−sτdτ=estH(s) \begin{aligned} y(t) &= \int_{-∞}^{+∞}h(τ)x(t-τ)dτ\\ &=\int_{-∞}^{+∞}h(t-τ)e^{s(t-τ)} dτ\\ &=e^{st}\int_{-∞}^{+∞}h(τ)e^{-sτ}dτ\\ &=e^{st}H(s) \end{aligned} y(t)=∫−∞+∞h(τ)x(t−τ)dτ=∫−∞+∞h(t−τ)es(t−τ)dτ=est∫−∞+∞h(τ)e−sτdτ=estH(s)
而这个 H(s)H(s)H(s) 是一个复常数,如果信号可以用复指数表示,那么信号经过系统之后的输出表示就非常简单,同样地,对于离散时间信号也是一样,设输入为 :x[n]=znx[n] = z^{n}x[n]=zn
y[n]=∑k=−∞+∞h[k]x[n−k]=∑k=−∞+∞h[k]zn−k=zn∑k=−∞+∞h[k]z−k=znH(z)
\begin{aligned}
y[n] &= \sum_{k=-∞}^{+∞}h[k]x[n-k]\\
&=\sum_{k=-∞}^{+∞}h[k]z^{n-k}\\
&=z^n\sum_{k=-∞}^{+∞}h[k]z^{-k}\\
&=z^nH(z)
\end{aligned} y[n]=k=−∞∑+∞h[k]x[n−k]=k=−∞∑+∞h[k]zn−k=znk=−∞∑+∞h[k]z−k=znH(z)
至此,我们得到了复傅里叶级数的表示方法,以及复傅里叶系数的计算公式。但是,这些有什么用?为什么需要用这样的傅里叶级数形式来表示呢??
1.3 复傅里叶级数的意义——频谱复傅里叶级数最好的用途就是表示信号的频谱!何谓之信号的频谱?那就要牵扯到频域了。
我们平时所接触到的信号,大多是以时域的形式和我们见面的。例如我们常听见的音乐信号,我们可以非常熟悉它时域上的表示:
但是,学过乐器的同学们应该更熟悉音乐信号的另外一种表示形式——音符:
不同的音符,代表着不同的频率成分。我们看看复傅里叶级数的公式:f(t)=∑k=−∞+∞ckejkω0t f(t) = \sum_{k = -∞}^{+∞}c_ke^{jkω_0t}f(t)=k=−∞∑+∞ckejkω0t
所以我们发现,f(t)f(t)f(t) 由不同的频率成分组成 ejkω0te^{jkω_0t}ejkω0t,也就代表了不同的音符,而每种音符所弹奏的声音大小,也就是 ejkω0te^{jkω_0t}ejkω0t 的系数 ckc_kck(ckc_kck可以是复数)
比如我们有这样一个信号:f(t)=ej2ω0t+5ejω0t+6f(t) = e^{j2ω_0t} + 5e^{jω_0t} + 6f(t)=ej2ω0t+5ejω0t+6,那么它的频谱就可以表示成:
也就是说,计算复傅里叶系数的过程,就是计算信号频谱的过程!
二、周期信号的频谱(线谱)我们知道如何计算频谱了,这算是迈出了一大步:因为我们处理信号的能力,从时域扩展到了频域。
我们先来看看下面这个周期为:T0T_0T0,脉冲宽度为 T02\frac{T_0}{2}2T0 的矩形周期信号的频谱:
c0=1T0∫−T02T02f(t)dt=1T0∫−T04T041dt=0.5c_0 = \frac{1}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(t)dt =\frac{1}{T_0}\int_{-\frac{T_0}{4}}^{\frac{T_0}{4}}1dt = 0.5c0=T01∫−2T02T0f(t)dt=T01∫−4T04T01dt=0.5
ck=1T0∫−T02T02f(t)ejkωtdt=1T0∫−T04+T04ejkωtdt=1T0∫−T04+T04(cos(kωt)−jsin(ωt))dt=1T0∫−T04+T04cos(kωt)dt−jT0∫−T04+T04sin(kωt)dt=1T0kω∫−T04+T04cos(kωt)d(kωt)=2sinkωT04Tkω
\begin{aligned}
c_k &= \frac{1}{T_0}\int_{-\frac{T_0}{2}}^{\frac{T_0}{2}}f(t)e^{jkωt}dt\\
&=\frac{1}{T_0}\int_{-\frac{T_0}{4}}^{+\frac{T_0}{4}}e^{jkωt}dt\\
&=\frac{1}{T_0}\int_{-\frac{T_0}{4}}^{+\frac{T_0}{4}}(cos(kωt)-jsin(ωt))dt\\
&=\frac{1}{T_0}\int_{-\frac{T_0}{4}}^{+\frac{T_0}{4}}cos(kωt)dt - \frac{j}{T_0}\int_{-\frac{T_0}{4}}^{+\frac{T_0}{4}}sin(kωt)dt \\
&=\frac{1}{T_0kω}\int_{-\frac{T_0}{4}}^{+\frac{T_0}{4}}cos(kωt)d(kωt)\\
&=\frac{2sin\frac{kωT_0}{4}}{Tkω}\\
\end{aligned}
ck=T01∫−2T02T0f(t)ejkωtdt=T01∫−4T0+4T0ejkωtdt=T01∫−4T0+4T0(cos(kωt)−jsin(ωt))dt=T01∫−4T0+4T0cos(kωt)dt−T0j∫−4T0+4T0sin(kωt)dt=T0kω1∫−4T0+4T0cos(kωt)d(kωt)=Tkω2sin4kωT0
又因为:ω=2ΠT=2ΠT0ω = \frac{2Π}{T} = \frac{2Π}{T_0}ω=T2Π=T02Π,因此:2sinkωT04Tkω=12sinkΠ2kΠ2
\frac{2sin\frac{kωT_0}{4}}{Tkω}=\frac{1}{2}\frac{sin\frac{kΠ}{2}}{\frac{kΠ}{2}}Tkω2sin4kωT0=212kΠsin2kΠ
这里我们引入辛格函数 sinc:sinc(x)=sin(Πx)Πxsinc(x) = \frac{sin(Πx)}{Πx}sinc(x)=Πxsin(Πx) 它长这样:
那么,我们上面那个占空比为 12\frac{1}{2}21 的矩形信号的线谱就可以表示为:X(k)=12sinc(k2)
X(k) = \frac{1}{2}sinc(\frac{k}{2})X(k)=21sinc(2k)
信号与它对应的线谱如下图所示:
如果我们改变占空比,即矩形信号的脉冲宽度不变,还是 T02\frac{T_0}{2}2T0,但是周期变为 T=2T0T = 2T_0T=2T0.即占空比变为 1/4:
我们先看看 c0c_0c0:c0=12T0∫−T0T0f(t)dt=12T0∫−T04T04dt=0.25
\begin{aligned}
c_0 &= \frac{1}{2T_0}\int_{-T_0}^{T_0}f(t)dt\\
&=\frac{1}{2T_0}\int_{-\frac{T_0}{4}}^{\frac{T_0}{4}}dt=0.25
\end{aligned}
c0=2T01∫−T0T0f(t)dt=2T01∫−4T04T0dt=0.25
然后是 ckc_kck:ck=12T0∫−T04T04ejkωtdt=12T0∫−T04T04(cos(kωt)+jsin(kωt))dt=12T01kω2sin(kωT04)=sin(kΠ4)kΠ=14sin(kΠ4)kΠ4=14sinc(k4)
\begin{aligned}
c_k &= \frac{1}{2T_0}\int_{-\frac{T_0}{4}}^{\frac{T_0}{4}}e^{jkωt}dt\\
&=\frac{1}{2T_0}\int_{-\frac{T_0}{4}}^{\frac{T_0}{4}}(cos(kωt)+jsin(kωt))dt\\
&=\frac{1}{2T_0}\frac{1}{kω}2sin(kω\frac{T_0}{4})\\
&=\frac{sin(\frac{kΠ}{4})}{kΠ}\\
&=\frac{1}{4}\frac{sin(\frac{kΠ}{4})}{\frac{kΠ}{4}}\\
&=\frac{1}{4}sinc(\frac{k}{4})
\end{aligned}
ck=2T01∫−4T04T0ejkωtdt=2T01∫−4T04T0(cos(kωt)+jsin(kωt))dt=2T01kω12sin(kω4T0)=kΠsin(4kΠ)=414kΠsin(4kΠ)=41sinc(4k)
同样地,我们再来看看这个占空比为 14\frac{1}{4}41 的矩形波和它对应的线谱:
下面我们直接给出占空比是 18\frac{1}{8}81 的矩形信号和它对应的频谱(大家自己可以推导一下)
归纳一下我们刚刚计算的,不同占空比矩形信号的频谱(线谱)的表达式规律:如果我们设矩形信号的占空比为:1n\frac{1}{n}n1,那么这个矩形周期信号的线谱就可以表示成:X(k)=1nsinc(kn) X(k) = \frac{1}{n}sinc(\frac{k}{n})X(k)=n1sinc(nk)
这个表达式我们发现:占空比越小,ckc_kck的幅度就越小,而且谱线与谱线之间的间隙就越来越小,谱线越密集。
三、非周期信号的频谱(连续谱)从上面的分析发现:随着T的增大,线谱中不同频率的谱线的间距越来越小,数量也越来越多,这样不太利于我们对频率的分析,我们引入了连续谱,或者我们叫做频谱密度曲线
为了更好地理解:频谱密度曲线,我们先来看看概率密度曲线的意义:
红色的曲线就是x的概率密度函数pdf曲线。如果我现在这样问你:P(x = 10) = ?
乍一看,x = 10对应曲线的纵坐标在0.16附近,我们能说x = 10的概率是0.16吗??
答案是:NO!,P(x=10) = 0!
正如我们在生活中所说的当x=10,我们一般会把10.01,10.001,9.99等等这样的数都当作10,我们以x为某地的降雨量为例,你能保证当天降雨的总量刚刚好在10mm,一滴不多一滴不少吗?
我们上面所讨论的问题,都基于一个前提:就是我们的自变量x是一个连续随机变量,在连续随机变量的概率密度曲线中,x准确等于任何一个数的概率都是0!
那么要怎么表示概率呢?我们可以用一个区间,比如说x在[9.9, 10.1]区间的概率是多少。这样就会取得一个确定的概率P. 在微积分的知识里我们知道,在pdf曲线中计算x落在区间[9.9, 10.1]上的概率就应该是曲线在[9.9, 10.1]那段的面积:∫9.910.1f(x)dx \int_{9.9}^{10.1}f(x)dx ∫9.910.1f(x)dx
近似可以看作上图的蓝色矩形的面积。
因此,概率密度曲线中某一x范围[x,x+△x][x, x+△x][x,x+△x]概率,就是曲线在[x,x+△x][x, x+△x][x,x+△x]这一范围下与横轴围成的区域的面积
概率密度函数,频谱密度函数,这两者其实内涵是类似的!
概率密度P(x)P(x)P(x):对应的是概率,那么曲线在[x,x+△x][x, x+△x][x,x+△x]这一范围下与横轴围成的区域的面积就是x在[x,x+△x][x, x+△x][x,x+△x]这一范围下的概率
频谱密度X(f)X(f)X(f):对应的是ckc_kck,那么曲线在[f,f+△f][f, f+△f][f,f+△f]这一范围下与横轴围成的面积就是f在[f,f+△f][f, f+△f][f,f+△f]这一范围下的ckc_kck
而面积可以近似地以矩形的面积代替,那么矩形的底就是△f△f△f,高就是ck△f\frac{c_k}{△f}△fck,如下图:
因此,所有的ck△f\frac{c_k}{△f}△fck就构成了频谱密度曲线
其中,在上图,△f△f△f是信号基波的频率f0f_0f0,和信号的周期T0T_0T0有关
我们在刚刚说了:ck△f\frac{c_k}{△f}△fck就构成了频谱密度曲线,那么知道:ck△f\frac{c_k}{△f}△fck 的表达式就很关键了:
我们从周期矩形信号的 ckc_kck 值入手:ck=1nsinc(kn)
c_k = \frac{1}{n}sinc(\frac{k}{n})ck=n1sinc(nk)
如果设矩形信号的脉冲宽度是:τττ,周期是 T0T_0T0(这里大家注意区分一下:我们现在是令周期不变,就是 T0T_0T0,改变脉冲宽度而改变占空比。我们上文计算周期矩形波时是改变周期,保持脉冲宽度不变)
那么,占空比就是:τT0\frac{τ}{T_0}T0τ
所以,原式变为:ck=τT0sinc(kτT0) c_k = \frac{τ}{T_0}sinc(\frac{kτ}{T_0})ck=T0τsinc(T0kτ)
既然我们现在想找周期信号的连续谱,就意味着我们想计算:ck△f\frac{c_k}{△f}△fck
ck△f=ckf0=ckT0=τsinc(kτf0)(1)
\begin{aligned}
\frac{c_k}{△f} &= \frac{c_k}{f_0} = c_kT_0\\
&=τsinc(kτf_0)\tag{1}
\end{aligned}
△fck=f0ck=ckT0=τsinc(kτf0)(1)
我们看这个式子啊:f0f_0f0 是这个周期信号的基波频率,因为它可以分解成若干个不同频率成分的信号叠加,那么 kf0kf_0kf0 不就相当于我们前面的 ω=kω0ω = kω_0ω=kω0 吗!因此,我们就用 fff 来替换 kf0kf_0kf0
ck△f=τsinc(τf)(2)
\frac{c_k}{△f} = τsinc(τf)\tag{2}△fck=τsinc(τf)(2)
因为(2)式没有 k,而 fff 又是连续的,所以 τsinc(τf)τsinc(τf)τsinc(τf) 是一个连续函数!那么,周期信号的连续谱概率密度函数:τsinc(kτf0)τsinc(kτf_0)τsinc(kτf0) 不就是以采样频率 f0f_0f0 对这个连续信号 τsinc(τf)τsinc(τf)τsinc(τf) 进行采样吗!
我们先看看对占空比 50% 的信号以 f0f_0f0 为采样频率进行采样得到的连续谱长什么样:
同样,对比一下其他占空比的信号的连续谱:
下面这个图我没有把对应的线谱画出来,不然太密了就看不清连续谱的样子了:
4.2 非周期矩形信号的连续谱我们可以发现:
第一张采样得到的连续谱,是周期为 T0T_0T0 的矩形信号对 τsinc(τf)τsinc(τf)τsinc(τf) 以 f0f_0f0的频率采样
第二张采样得到的连续谱,是周期为 2T02T_02T0 的矩形信号对 τsinc(τf)τsinc(τf)τsinc(τf) 以 12T0\frac{1}{2T_0}2T01的频率采样
第三张采样得到的连续谱,是周期为:3T03T_03T0 的矩形信号对 τsinc(τf)τsinc(τf)τsinc(τf) 以 13T0\frac{1}{3T_0}3T01的频率采样
我们发现,随着周期矩形信号的频率不断增大,采样得到的连续谱就越来越接近信号 τsinc(τf)τsinc(τf)τsinc(τf)
所以,我们可以推出:在 T无穷大的时候,也就是非周期矩形信号,它的连续谱就是:τsinc(τf)τsinc(τf)τsinc(τf)
知道了周期信号和非周期信号都可以用连续谱(即频谱密度函数)表示,那么
下面,我们就来看看信号频谱密度的计算:ck△f=ckT0=∫−T02+T02x(t)e−jkω0tdt=∫−T02+T02x(t)e−jk2Πf0tdt=∫−T02+T02x(t)e−j2Πftdt
\begin{aligned}
\frac{c_k}{△f} &=c_kT_0 = \int_{-\frac{T_0}{2}}^{+\frac{T_0}{2}}x(t)e^{-jkω_0t}dt\\
&=\int_{-\frac{T_0}{2}}^{+\frac{T_0}{2}}x(t)e^{-jk2Πf_0t}dt\\
&=\int_{-\frac{T_0}{2}}^{+\frac{T_0}{2}}x(t)e^{-j2Πft}dt\\
\end{aligned}
△fck=ckT0=∫−2T0+2T0x(t)e−jkω0tdt=∫−2T0+2T0x(t)e−jk2Πf0tdt=∫−2T0+2T0x(t)e−j2Πftdt
当T=∞时,就有:X(f)=∫−∞+∞x(t)e−j2Πftdt=∫−∞+∞x(t)e−jωtdt
X(f) = \int_{-∞}^{+∞}x(t)e^{-j2Πft}dt = \int_{-∞}^{+∞}x(t)e^{-jωt}dtX(f)=∫−∞+∞x(t)e−j2Πftdt=∫−∞+∞x(t)e−jωtdt
这就是大名鼎鼎的傅里叶变换公式!!