提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
这里我尽量的用图像来讲解,尽可能地避免用公式来描述。如果只是了解一下这些名词或者是这些方法都是处理什么场景的问题,不涉及具体的运算,那么不用太在意具体的公式。但是如果想了解的更深一点,那还是要了解一下公式,我也尽量用最直观的方式来说。本文讲的内容不深,重在理解,希望对大家有帮助。若有不足之处,还请大家批评指正。
一、总结
首先,我们先给一个总结性的结果,如图0所示,然后我们再逐个详细的分析。图0表达的意思是:
1、如果时域信号是周期的,那么它的频谱就是离散的。
2、如果时域信号是非周期的,那么它的频谱就是连续的。
3、如果时域信号是离散的,那么它的频谱就是周期的。
4、如果时域信号是连续的,那么它的频谱就是非周期的。
如果将周期非周期,离散非离散进行组合,时域信号就会有四种组合,1、周期连续2、非周期连续3、非周期离散4、周期离散。
但是你可能注意到了图0我写了五种组合,其中红框圈的并不在这四种里面。它就是我们常说的离散傅里叶变换(DFT)。按道理它是不应该有的,为什么他能出现呢?那是因为我们的计算机只能处理离散信号,而且时域和频域都得是连续的。而上面的四种组合都不满足。
下面我们就详细的讲解一下这五种情况。
二、具体的分析
1.傅里叶级数(FS)
应用场景:时域周期连续信号(对应频谱非周期离散)
傅里叶提出,连续的周期信号
f
(
t
)
f(t)
f(t)都可以用三角函数的线性组合来表示,形式如下
f
(
t
)
=
∑
n
=
0
∞
a
n
cos
(
n
t
)
+
∑
n
=
0
∞
b
n
sin
(
n
t
)
(
1
)
f(t) = \sum\limits_{n = 0}^\infty {{a_n}\cos \left( {nt} \right)} + \sum\limits_{n = 0}^\infty {{b_n}\sin \left( {nt} \right)} ~~~~~~~~~~~~ (1)
f(t)=n=0∑∞ancos(nt)+n=0∑∞bnsin(nt) (1)
其中(1)式一般默认信号的周期为
2
π
2\pi
2π,如果信号的周期为
T
1
~T_1
T1,我们常写为:
f ( t ) = ∑ n = 0 ∞ a n cos ( 2 π n T 1 t ) + ∑ n = 0 ∞ b n sin ( 2 π n T 1 t ) = ∑ n = 0 ∞ a n cos ( n ω 1 t ) + ∑ n = 0 ∞ b n sin ( n ω 1 t ) ( 2 ) \begin{array}{l} ~~f(t) &= \sum\limits_{n = 0}^\infty {{a_n}\cos \left( {\frac{{2\pi n}}{{{T_1}}}t} \right)} + \sum\limits_{n = 0}^\infty {{b_n}\sin \left( {\frac{{2\pi n}}{{{T_1}}}t} \right)} \\ &= \sum\limits_{n = 0}^\infty {{a_n}\cos \left( {n{\omega _1}t} \right)} + \sum\limits_{n = 0}^\infty {{b_n}\sin \left( {n{\omega _1}t} \right)} \end{array} ~~~~~~~~ (2) f(t)=n=0∑∞ancos(T12πnt)+n=0∑∞bnsin(T12πnt)=n=0∑∞ancos(nω1t)+n=0∑∞bnsin(nω1t) (2)
其中
ω
1
=
2
π
T
1
~\omega_1=\frac{2\pi}{T_1}
ω1=T12π,可以看出,
f
(
t
)
f(t)~
f(t) 可以由这无限多个频率离散
(
0
,
ω
1
,
2
ω
1
,
3
ω
1
…
)
(0,\omega_1,{2\omega}_1,{3\omega}_1\ldots)
(0,ω1,2ω1,3ω1…)的正弦和余弦函数组成的。因此连续的周期信号频谱就是离散的,而且是频域是没有周期的。举例来说,比如
f
(
t
)
=
cos
(
ω
t
)
+
cos
(
2
ω
t
)
f\left(t\right)=\cos(\omega t)+\cos(2\omega t)
f(t)=cos(ωt)+cos(2ωt),它是时域周期的,而且它只有两个频率成分
ω
,
2
ω
\omega,2\omega
ω,2ω。
一般我们习惯用复数形式展开,因为以复数形式展开在某些场景中会使计算非常的方便。利用欧拉公式,
f
(
t
)
f\left(t\right)~
f(t) 展开为复数形式的傅里叶级数
F
(
n
ω
1
)
=
1
T
1
∫
−
T
1
2
T
1
2
f
(
t
)
e
−
i
n
ω
1
t
d
t
f
(
t
)
=
∑
n
=
−
∞
∞
F
(
n
ω
1
)
e
i
n
ω
1
t
(
3
)
\begin{array}{l} F(n{\omega _1}) = \frac{1}{{{T_1}}}\int_{ - \frac{{{T_1}}}{2}}^{\frac{{{T_1}}}{2}} {f(t)} {e^{ - in{\omega _1}t}}dt\\ f(t) = \sum\limits_{n = - \infty }^\infty {F(n{\omega _1})} {e^{in{\omega _1}t}} \end{array}~~~~~~~~ (3)
F(nω1)=T11∫−2T12T1f(t)e−inω1tdtf(t)=n=−∞∑∞F(nω1)einω1t (3)
F ( n ω 1 ) F(n\omega_1) F(nω1)就是频谱,我们再来举一个例子,看一下周期性方波的频域,如图1所示。图1(a)是时域波形,图1(b)是频域波形(只有离散的频率分量)。需要注意的是,图1(a)中没有强度的地方并不是没信号,而是信号为0,整个波形是连续的。
2.傅里叶变换(FT)
应用场景:时域非周期连续信号(对应频谱非周期连续)
如果我们遇到一个非周期连续的信号,傅里叶级数看起来似乎就不能用了(因为傅里叶级数处理的是周期的连续信号)。此时,我们就采取了这么一个思路:我们认为这个非周期信号其实也是一个周期信号,只不过我这个信号的周期趋于无穷大(即 T 1 ~T_1~ T1 趋于正无穷),相当于是傅里叶级数的推广,因此我们还能用傅里叶级数展开。但是此时我们式子需要进行一些变化,也就是需要考虑极限的情况了,因为一些离散的量慢慢就变得连续起来(比如公式(3)中的 ω 1 ~\omega_1 ω1,求和也得变成积分了)。傅里叶变换的变换对如下
F ( ω ) = ∫ − ∞ ∞ f ( t ) e − i ω t d t f ( t ) = 1 2 π ∫ − ∞ ∞ F ( ω ) e i ω t d ω ( 4 ) \begin{array}{l} F(\omega ) = \int_{ - \infty }^\infty {f(t)} {e^{ - i\omega t}}dt\\ f(t) = \frac{1}{{2\pi }}\int_{ - \infty }^\infty {F(\omega )} {e^{i\omega t}}d\omega \end{array}~~~~~~~~ (4) F(ω)=∫−∞∞f(t)e−iωtdtf(t)=2π1∫−∞∞F(ω)eiωtdω (4)
这里我们也不进行推导,只需要知道,他是从(3)式过渡而来的。对比(3)式和(4)式,我们发现,频率由原来的
n
ω
1
~{n\omega}_1
nω1变成了
ω
~\omega
ω,也就是从离散的变成了连续的了,正是因为
T
1
~T_1~
T1 趋于正无穷导致的(因为
ω
1
=
2
π
T
1
)
~\omega_1=\frac{2\pi}{T_1})
ω1=T12π)。我们以矩形脉冲为例,来看一下它的频谱。矩形脉冲它相当于是一个周期内的方波信号,如图2(a)所示,它的傅里叶变换就是图2(b)。可以看出,频谱变得连续了,如果我们对比图1(b)和图2(b),还能够发现图2(b)是图1(b)的包络(可以认为是轮廓)。
3.离散时间傅里叶变换(DTFT)
应用场景:时域非周期离散信号(对应频谱周期连续)
现在我们已经解决了时域上周期连续信号、非周期连续信号的问题,但是生活中也有一些时域是离散的信号,而且计算机处理的都是离散信号,因此我们还需要去分析离散信号。首先我们来分析非周期离散信号。非周期离散信号 f s ( t ) ~f_s(t) fs(t)(如图3(e)所示)最简单的获取方式就是将非周期连续信号 f ( t ) ~f(t) f(t) (如图3(a)所示)在时域乘上采样函数 p ( t ) ~p(t) p(t) (如图3( c)所示)(也有的课本将采样函数叫它抽样函数,本质上就是无穷多 δ ~\delta~ δ 函数等间距的排列组合),关于采样函数,这里我们不进行过多描述,仅说一下基本性质,采样函数的频谱还是采样函数(这一结论可以通过求采样函数傅里叶级数和傅里叶变化给出);如果在时域上采样函数的脉冲间隔若为 T s ~{T}_{s} Ts,那么它的频域(圆频率)脉冲间隔为 ω s = 2 π T s ~{\omega}_{s}=\frac{2\pi}{T_{s}} ωs=Ts2π。另外我们还需要一个知识点,就是:时域相乘运算等于频域卷积运算。它的数学形式可以表示为:
f s ( t ) = f ( t ) p ( t ) F s ( ω ) = 1 2 π F ( ω ) ∗ P ( ω ) ( 5 ) \begin{array}{l} {f_s}(t) = f(t)p(t)\\ {F_s}(\omega ) = \frac{1}{{2\pi }}F(\omega ) * P(\omega ) \end{array}~~~~~~~~ (5) fs(t)=f(t)p(t)Fs(ω)=2π1F(ω)∗P(ω) (5)
图3(b)是图3(a)的频谱,图3(d)是图3( c)的频谱。图3(f)是图3(e)的频谱,可以看出图3(f)就是图3(b)和图3(d)卷积运算的结果(一个函数和
δ
~\delta~
δ 函数卷积,相当于把它搬移到
δ
~\delta~
δ 函数所在的位置。而采样函数有无穷多个
δ
~\delta~
δ 函数,相当于把它搬移到每一个位置)。可以看到,非周期离散信号
f
s
(
t
)
f_s(t)
fs(t)的频谱是周期连续的,其中周期是因为采样的导致的,连续是非周期连续函数导致的。
这里,我们也写一下离散时间傅里叶变换的变换式
X ( ω ) = ∑ n = − ∞ ∞ x ( n ) e − i ω n x ( n ) = 1 2 π ∫ − π π X ( ω ) e i ω n d ω ( 6 ) \begin{array}{l} X(\omega ) = \sum\limits_{n = - \infty }^\infty {x(n){e^{ - i\omega n}}} \\ x(n) = \frac{1}{{2\pi }}\int_{ - \pi }^\pi {X(\omega ){e^{i\omega n}}} d\omega \end{array}~~~~~~~~ (6) X(ω)=n=−∞∑∞x(n)e−iωnx(n)=2π1∫−ππX(ω)eiωndω (6)
为了下一节陈述的方便,我们将(6)式中的圆频率 ω ~\omega~ ω 用频率 f {f} f替换,时域采样间隔调为 T s {T}_{s} Ts,结果如式(7)所示
X ( f ) = ∑ n = − ∞ ∞ x ( n T s ) e − i 2 π f n T s x ( n T s ) = 1 f s ∫ − f s 2 f s 2 X ( f ) e i 2 π f n T s d f ( 7 ) \begin{array}{l} X(f) = \sum\limits_{n = - \infty }^\infty {x(n{T_s}){e^{ - i2\pi fn{T_s}}}} \\ x(n{T_s}) = \frac{1}{{{f_s}}}\int_{ - \frac{{{f_s}}}{2}}^{\frac{{{f_s}}}{2}} {X(f){e^{i2\pi fn{T_s}}}} df \end{array}~~~~~~~~ (7) X(f)=n=−∞∑∞x(nTs)e−i2πfnTsx(nTs)=fs1∫−2fs2fsX(f)ei2πfnTsdf (7)
f
s
=
1
T
s
f_s=\frac{1}{T_s}
fs=Ts1是频域的重复周期(时域采样间距的倒数,就是频域的一个周期长度)。这里我们可以看到,正变换式为级数求和,逆变换式是求积分。这也表明时域是离散的,频域是连续的。
4.离散傅里叶级数(DFS)
应用场景:时域周期离散信号(对应频谱周期离散)
考虑到这我们发现,计算机还是处理不了,因为离散时间傅里叶变换(DTFT)的频域不仅是周期的,而且还都是连续的。如果想让时域和频域都是离散的(满足计算机的要求),那就必须得让时域和频域都是周期的。这样一来似乎又矛盾了,计算机不是处理不了这种周期的信号么?现在大家留住这个疑问。我们先来分析时域是周期离散的信号,看它能不能带给我们什么思路。
现在我们简单的来回顾一下前面所讲的,如图4所示
图4中每个小图的左边的是时域信号,右边的是频域信号。图4(a)是时域周期连续的信号,它的频谱是非周期离散的;图4(b)是时域非周期连续的信号,它的频谱是非周期连续的;图4( c)是时域非周期离散的信号,它的频谱是周期连续的,就是上一小节我们刚说的;图4(d)是我们这一节要考虑的,时域周期离散,频域也周期离散的情况。从图形上看,图4(d)的时域信号相当于是图4( c)时域信号的周期延拓(简单一点就是复制,然后平移)。图4(d)的频域信号相当于图4( c)频域信号的和一个频域间隔为
f
1
f_1
f1的采样函数相乘。
下面我们从公式的角度来分析,这里我们把公式(7)进行适当的修改,就能够得到这里需要的变换对。图4(d)中由于时域也变得有周期了,所以频域就是离散的(因此要把(7)式中的用
f
f
f,用
k
f
1
~kf_1~
kf1 去替代。其中
f
1
f_1
f1是离散频率函数的间隔),同时求和的项应在一个周期内(可以参照公式(3)中上面的式子,那里积分区间也是在一个周期内),从
0
0
0到
N
−
1
N-1
N−1(我们一般默认一个周期内有
N
N
N个采样)。这时公式(7)中上面的式子将变为:
X ( k f 1 ) = ∑ n = 0 N − 1 x ( n T s ) e − i 2 π n T s k f 1 ( 8 ) X(k{f_1}) = \sum\limits_{n = 0}^{N - 1} {x(n{T_s})} {e^{ - i2\pi n{T_s}k{f_1}}}~~~~~~~~ (8) X(kf1)=n=0∑N−1x(nTs)e−i2πnTskf1 (8)
由于频谱也是离散的,因此表示时域函数的时候应该将积分变为求和 ( ∫ − f s 2 f s 2 → ∑ k = 0 N − 1 ) (\int_{-\frac{f_s}{2}}^{\frac{f_s}{2}}\rightarrow\sum_{k=0}^{N-1}\ ) (∫−2fs2fs→∑k=0N−1 ),同时 d f ~df df变为 f 1 f_1 f1,其中 f 1 = f s N f_1=\frac{f_s}{N} f1=Nfs,这样公式(7)中下面的式子将变为:
x ( n T s ) = 1 N ∑ k = 0 N − 1 X ( k f 1 ) e i 2 π n T s k f 1 ( 9 ) x(n{T_s}) = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {X(k{f_1}){e^{i2\pi n{T_s}k{f_1}}}} ~~~~~~~~ (9) x(nTs)=N1k=0∑N−1X(kf1)ei2πnTskf1 (9)
对照着图4(d)来看,这里,离散时间函数的时间间隔 T s ~T_s~ Ts 与频率函数的重复周期 f s ~f_s~ fs 之间满足 f s = 1 T s ~f_s=\frac{1}{T_s} fs=Ts1;而离散频率函数的间隔 f 1 ~f_1~ f1 与时间函数周期 T 1 ~T_1~ T1 的关系是 f 1 = 1 T 1 ~f_1=\frac{1}{T_1} f1=T11。在时域、频域各自的一个周期内都是 N N N个采样点,即 T 1 T s = N , f s f 1 = N ~\frac{T_1}{T_s}=N,\frac{f_s}{f_1}=N TsT1=N,f1fs=N,因此有关系 T s f 1 = 1 N ~T_sf_1=\frac{1}{N} Tsf1=N1,把这个关系带到公式(8)和公式(9)中,可得
X ( k f 1 ) = ∑ n = 0 N − 1 x ( n T s ) e − i ( 2 π N ) n k , k ∈ ( − ∞ , ∞ ) x ( n T s ) = 1 N ∑ k = 0 N − 1 X ( k f 1 ) e i ( 2 π N ) n k , n ∈ ( − ∞ , ∞ ) ( 10 ) \begin{array}{l} X(k{f_1}) = \sum\limits_{n = 0}^{N - 1} {x(n{T_s})} {e^{ - i\left( {\frac{{2\pi }}{N}} \right)nk}},k \in ( - \infty ,\infty )\\ x(n{T_s}) = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {X(k{f_1})} {e^{i\left( {\frac{{2\pi }}{N}} \right)nk}},n \in ( - \infty ,\infty ) \end{array}~~~~~~~~ (10) X(kf1)=n=0∑N−1x(nTs)e−i(N2π)nk,k∈(−∞,∞)x(nTs)=N1k=0∑N−1X(kf1)ei(N2π)nk,n∈(−∞,∞) (10)
公式(10)就是离散傅里叶级数变换对。注意,这里我们专门把 k , n ~k,n~ k,n 的取值范围也标注出来了,表示它们是无穷长的。
4.离散傅里叶变换(DFT)
应用场景:时域非周期离散信号(对应频谱非周期离散)
从4(d)中我们能够注意到,其实周期性无穷长的序列实际上只有一个周期内 N N N个值有信息。也就是说,只要知道了一个周期的内容,其余时刻的全部情况即可掌握。这正是离散傅里叶级数向离散傅里叶变换过渡的关键。为了后面便于区分,我们把(10)式写成这样的形式
X p ( k ) = ∑ n = 0 N − 1 x p ( n ) e − i ( 2 π N ) n k , k ∈ ( − ∞ , ∞ ) x p ( n ) = 1 N ∑ k = 0 N − 1 X p ( k ) e i ( 2 π N ) n k , n ∈ ( − ∞ , ∞ ) ( 11 ) \begin{array}{l} {X_p}(k) = \sum\limits_{n = 0}^{N - 1} {{x_p}(n)} {e^{ - i\left( {\frac{{2\pi }}{N}} \right)nk}},k \in ( - \infty ,\infty )\\ {x_p}(n) = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {{X_p}(k)} {e^{i\left( {\frac{{2\pi }}{N}} \right)nk}},n \in ( - \infty ,\infty ) \end{array}~~~~~~~~ (11) Xp(k)=n=0∑N−1xp(n)e−i(N2π)nk,k∈(−∞,∞)xp(n)=N1k=0∑N−1Xp(k)ei(N2π)nk,n∈(−∞,∞) (11)
(11)式和(10)式一模一样,这里的下标
p
~p~
p 表示序列是无线长的。如果要利用计算机实现运算,就必须得是有限长的。大家也可能猜到了,这个有限长的序列,就是一个周期内
N
N
N 个数据。
现在我们给出离散傅里叶变换的定义。设有限长序列
x
(
n
)
~x(n)
x(n)长度为
N
N
N(在
0
≤
n
≤
N
−
1
0\le n\le N-1
0≤n≤N−1范围内),它的离散傅里叶变换
X
(
k
)
X(k)
X(k)仍然是一个长度为
N
N
N(在
0
≤
k
≤
N
−
1
0\le k\le N-1
0≤k≤N−1范围内)的频域有限长序列,正逆变换的关系式为:
X ( k ) = ∑ n = 0 N − 1 x ( n ) e − i ( 2 π N ) n k , k ∈ [ 0 , N − 1 ] x ( n ) = 1 N ∑ k = 0 N − 1 X ( k ) e i ( 2 π N ) n k , n ∈ [ 0 , N − 1 ] ( 12 ) \begin{array}{l} X(k) = \sum\limits_{n = 0}^{N - 1} {x(n)} {e^{ - i\left( {\frac{{2\pi }}{N}} \right)nk}},k \in \left[ {0,N - 1} \right]\\ x(n) = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {X(k)} {e^{i\left( {\frac{{2\pi }}{N}} \right)nk}},n \in \left[ {0,N - 1} \right] \end{array}~~~~~~~~ (12) X(k)=n=0∑N−1x(n)e−i(N2π)nk,k∈[0,N−1]x(n)=N1k=0∑N−1X(k)ei(N2π)nk,n∈[0,N−1] (12)
可以看出,除了 k , n ~k,n~ k,n 的取值范围变了以外,(12)式和(11)式一模一样。实际上离散傅里叶级数(DFS)是按傅里叶分析严格定义的,而我们规定的离散傅里叶变换(DFT)是一种“借用”的形式,这样作的目的正是为了使傅里叶分析可以计算机实现。