1.前言
傅里叶变换是很多领域的基础工具,常用来做频域变换。但凭什么傅里叶变换可以转换至频域,又什么是频域。看门见山。
连续傅里叶变换公式:
F
(
w
)
=
<
f
(
t
)
,
e
i
w
t
>
=
∫
−
∞
+
∞
f
(
t
)
e
−
i
w
t
d
t
(1.1)
F(w) = <f(t),e^{iwt}>=\int_{-\infty}^{+\infty}f(t)e^{-iwt}dt\tag{1.1}
F(w)=<f(t),eiwt>=∫−∞+∞f(t)e−iwtdt(1.1)
单单看这个公式确实让人头大。还好鲁迅说过把复杂的问题拆分成各个简单的问题,解决完简单的问题,再和起来,就解决了复杂的问题。
根据上图,我们就可得出,傅里叶变换是
原信号
f
(
t
)
f(t)
f(t)和
e
i
w
t
e^{iwt}
eiwt的内积=
F
(
w
)
F(w)
F(w)(即原信号在角频率w上的分量)
等价于
原信号f(t)与
e
−
i
w
t
e^{-iwt}
e−iwt在所有时间上的积分。
我们现在这里给出最终结论:
傅里叶变换的本质就是内积,而内积的对象是由同频三角函数组成的
e
i
w
t
e^{iwt}
eiwt。通过与
e
i
w
t
e^{iwt}
eiwt的内积(投影),分离出角频率为w的分量,而
∫
−
∞
+
∞
\int_{-\infty}^{+\infty}
∫−∞+∞就是将信号每个时刻的w的分量叠加(即振幅)。
为什么和
e
i
w
t
e^{iwt}
eiwt一参合就到频域上了。我们继续一步步拆开
e
i
w
t
e^{iwt}
eiwt看看它到底意味着什么?
2. e i w t e^{iwt} eiwt的秘密
2.1 从e说起
e是自然常数,等于2.718281828459。好奇心又来了,为什么这个叫自然常数呢,这个2.71828…怎么看都不自然啊?先甩大招:
e的定义式为:
lim
n
→
∞
(
1
+
1
n
)
n
=
e
(2.1.1)
\lim\limits_{n \to \infty}(1+\frac {1} {n})^n=e \tag{2.1.1}
n→∞lim(1+n1)n=e(2.1.1)
公式表明当n趋于无穷大的时候
(
1
+
1
n
)
n
(1+\frac {1} {n})^n
(1+n1)n等于e。哦吼,这有什么特殊含义嘛?
举个栗子,我在银行存了1元钱,年利率100%数学表达式为
(
1
+
100
%
1
)
1
=
2
元
(1+ \frac{100\%}{1})^1=2元
(1+1100%)1=2元
但是一想,好像有点亏,我放了一年就计算一次利息,如果要是每月结一次利息就好了,利滚利就更多了,那就是
(
1
+
100
%
12
)
12
=
2.613
元
(1+ \frac{100\%}{12})^{12} =2.613元
(1+12100%)12=2.613元
让我们更贪婪一点,要是每天算一次,每小时算一次,甚至时时刻刻都算一次,那能拿多少
lim
n
→
∞
(
1
+
1
n
)
n
=
e
\lim\limits_{n \to \infty}(1+\frac {1} {n})^n=e
n→∞lim(1+n1)n=e
哦豁,就是e了。
从每年算一次,到每时每刻算,是从离散到连续的过程。而在大千世界中,事物都是动态连续变化的,系统的此时的变量会参与到下一时刻的变化。
式(2.11)说明一个单位状态量的变化率是固定100%的系统,e代表了在一个单位时间内,连续的翻倍增长所能达到的极限值。
那如果变化率没那么巧,是100%呢?不妨设年利率是x,式(2.1.1)即为
lim
n
→
∞
(
1
+
x
n
)
n
=
lim
n
→
∞
(
(
1
+
1
n
/
x
)
n
/
x
)
x
=
e
x
(2.1.2)
\lim\limits_{n \to \infty}(1+\frac {x} {n})^n=\lim\limits_{n \to \infty}((1+\frac {1} {n/x})^{n/x} )^x=e^x \tag{2.1.2}
n→∞lim(1+nx)n=n→∞lim((1+n/x1)n/x)x=ex(2.1.2)
由上可得,一个单位状态量的变化率是固定值的系统,其状态就可以用自然常数的指数函数来表示。
前面我们考虑的都是单位时间,我们再把时间加入考虑范围,设时间为t,则:
f
(
t
)
=
e
x
t
(2.1.3)
f(t) =e^{xt} \tag{2.1.3}
f(t)=ext(2.1.3)
哈哈哈,好了,我们发现和
e
i
w
t
e^{iwt}
eiwt是令x=iw,让我们继续往下看。
2.2 i复数的几何意义
我们都知道
1
∗
(
−
1
)
=
−
1
;
1
∗
(
−
1
)
∗
(
−
1
)
=
1
1*(-1)=-1;1*(-1)*(-1)=1
1∗(−1)=−1;1∗(−1)∗(−1)=1。引入几何学,画出下图:
可以发现,在上图中,*(-1)在几何中,等价于逆时针旋转180度。那好奇猫肯定要问了,如果我偏要旋转90度呢?
旋转180度等于
∗
(
−
1
)
*(-1)
∗(−1)为已知条件。我们设i为旋转90度需要乘的数。
即我们旋转180度,需要乘2次i,可得
1
∗
i
∗
i
=
−
1
1*i*i =-1
1∗i∗i=−1。
化简得
i
=
−
1
2
(2.2.1)
i=\sqrt[2]{-1}\tag{2.2.1}
i=2−1(2.2.1)
画图得
如此一来,我们构建出了一个2维坐标系,好玩的就变多了。
以前我们表达一个二维平面点需要2个数(x,y),但是现在用上i后,我们发现一个复数就可以表示一个点的位置。
一个数表示原来2个数因此称这个数为复数。
2.3 e i x = c o s ( x ) + i s i n ( x ) e^{ix}=cos(x)+isin(x) eix=cos(x)+isin(x) 欧拉!
前面的文章我们讲到e,i这两个神奇的数字,但并未说明他们有什么关联。历史告诉我们,当世界支离破碎的时候,常常就会天降猛男。同理这时候,欧拉来了,带来了欧拉公式:
e
i
x
=
c
o
s
(
x
)
+
i
s
i
n
(
x
)
(2.3.1)
e^{ix} = cos(x)+isin(x)\tag{2.3.1}
eix=cos(x)+isin(x)(2.3.1)
关于欧拉公式通过泰勒级数的推导,可以看下面的文章
https://baijiahao.baidu.com/s?id=1681031751212927869&wfr=spider&for=pc
下面通过直观的图形化过程进行讲解。
e
i
x
=
lim
n
→
∞
(
1
+
i
x
/
n
)
n
(2.3.2)
e^{i x}=\lim _{n \rightarrow \infty}(1+i x / n)^{n} \tag{2.3.2}
eix=n→∞lim(1+ix/n)n(2.3.2)
通过matlab绘制公式2.3.2图
x = 0:10:1000; %任意值
n = 10000000000; %n趋于无穷大
e_ix =(1+x* i./n).^n; %计算e_ix值
compass(e_ix); %画出罗盘图
得到
由图可得,无论x为任何值,
e
i
x
e^{i x}
eix为单位圆(以原点为圆心,半径为1的圆)上的一点。
由此,我们可以得出下图
同理可得,
c
o
s
(
x
)
+
i
s
i
n
(
x
)
cos(x)+isin(x)
cos(x)+isin(x)为复平面上的一点,或者表示为以0为起点的一个向量。
因此,傅里叶公式中的
e
i
w
t
e^{iwt}
eiwt即等价为
c
o
s
(
w
t
)
+
i
∗
s
i
n
(
w
t
)
cos(wt)+i*sin(wt)
cos(wt)+i∗sin(wt)的向量,模长为1,相位为
w
t
wt
wt。
2.4 <>内积
接着我们继续理解内积的意义。内积用于向量的计算,以向量
a
⃗
=
(
1
,
2
)
,
b
⃗
=
(
1
,
0
)
\vec{a}=(1,2),\vec{b}=(1,0)
a=(1,2),b=(1,0)为例:
<
(
1
,
2
)
,
(
1
,
0
)
>
=
∣
(
1
,
2
)
∣
∗
∣
(
1
,
0
)
∣
∗
c
o
s
(
θ
)
=
1
∗
1
+
2
∗
0
=
1
<(1,2),(1,0)> = |(1,2)|*|(1,0)|*cos(\theta) =1*1+2*0 = 1
<(1,2),(1,0)>=∣(1,2)∣∗∣(1,0)∣∗cos(θ)=1∗1+2∗0=1
其几何含义为向量
a
⃗
\vec{a}
a在向量
b
⃗
\vec{b}
b上的投影,内积的结果即为系数。如果2个向量夹角为90度,则
c
o
s
(
θ
)
=
0
cos(\theta)=0
cos(θ)=0,其内积为0,即2个向量正交。
同理如果将向量扩展至n维,则其内积为
<
a
⃗
,
b
⃗
>
=
a
1
∗
b
1
+
a
2
∗
b
2
.
.
.
+
a
n
∗
b
n
=
∑
i
=
1
n
(
a
i
∗
b
i
)
<\vec{a},\vec{b}> =a_1*b_1+a_2*b_2...+a_n*b_n = \sum_{i=1}^{n}(a_i*b_i)
<a,b>=a1∗b1+a2∗b2...+an∗bn=i=1∑n(ai∗bi)
继续将其扩展至函数,函数是连续的,连续(即dx趋于无穷小)的累加为积分。令
a
=
f
(
x
)
,
b
=
g
(
x
)
a = f(x),b = g(x)
a=f(x),b=g(x)
<
a
,
b
>
=
∫
−
∞
+
∞
f
(
x
)
∗
g
(
x
)
∗
d
x
(2.4.1)
<a,b> =\int_{-\infty}^{+\infty}f(x)*g(x)*dx\tag{2.4.1}
<a,b>=∫−∞+∞f(x)∗g(x)∗dx(2.4.1)
继续扩展至复函数,
i
=
(
−
1
)
0.5
i=(-1)^{0.5}
i=(−1)0.5,复平面上的向量
a
=
1
+
i
a=1+i
a=1+i则
<
a
,
a
>
=
∣
1
+
i
∣
∗
∣
1
+
1
i
∣
∗
c
o
s
(
θ
)
=
1
∗
1
−
i
∗
i
=
1
∗
1
+
i
∗
(
−
i
)
=
2
<a,a> = |1+i|*|1+1i|*cos(\theta) =1*1 - i*i =1*1+i*(-i) =2
<a,a>=∣1+i∣∗∣1+1i∣∗cos(θ)=1∗1−i∗i=1∗1+i∗(−i)=2
由于复平面上
i
=
(
−
1
)
0.5
i=(-1)^{0.5}
i=(−1)0.5,为了保证内积结果为正数,即保证投影的结果为正。内积计算需将虚部部分变为相减,等价于其中一个向量取共轭(
a
⃗
=
1
+
i
\vec{a}=1+i
a=1+i取共轭为
a
‾
=
1
−
i
\overline{a} =1-i
a=1−i)。
同理,推广至复函数,设a,b为复函数,则内积计算为
<
a
,
b
>
=
∫
−
∞
+
∞
f
(
x
)
∗
g
(
x
)
‾
∗
d
x
(2.4.2)
<a,b> =\int_{-\infty}^{+\infty}f(x)*\overline{g(x)}*dx\tag{2.4.2}
<a,b>=∫−∞+∞f(x)∗g(x)∗dx(2.4.2)
因此我们设信号函数为
f
(
t
)
,
g
(
t
)
‾
=
e
i
w
t
f(t),\overline{g(t)}=e^{iwt}
f(t),g(t)=eiwt,则函数内积为
<
f
(
t
)
,
e
i
w
t
>
=
∫
−
∞
+
∞
f
(
t
)
e
−
i
w
t
d
t
(2.4.3)
<f(t),e^{iwt}>=\int_{-\infty}^{+\infty}f(t)e^{-iwt}dt\tag{2.4.3}
<f(t),eiwt>=∫−∞+∞f(t)e−iwtdt(2.4.3)
式2.4.2,如果大家还记得的话,就是文章开头的公式。
我们推导得到了傅里叶变换的含义是信号
f
(
t
)
f(t)
f(t)与
e
i
w
t
e^{iwt}
eiwt的内积。2.3的部分我们得到了
e
i
w
t
=
c
o
s
(
w
t
)
+
i
∗
s
i
n
(
w
t
)
e^{iwt} = cos(wt)+i*sin(wt)
eiwt=cos(wt)+i∗sin(wt),
e
i
w
t
e^{iwt}
eiwt是复平面上的单位向量。
因此,傅里叶公式的直观意义就是信号
f
(
t
)
f(t)
f(t)在复平面上任一单位向量
e
i
w
t
e^{iwt}
eiwt的投影,结果为其系数。
至此,我们关于傅里叶变换的问题变为 为什么选择在
e
i
w
t
e^{iwt}
eiwt上做投影,又为什么和频域挂上钩的?
2.5 三角函数的妙用
三角函数(
s
i
n
,
c
o
s
sin,cos
sin,cos)是完备的正交函数集。什么意思呢?
三角函数系为:
{
s
i
n
(
0
x
)
,
c
o
s
(
0
x
)
,
s
i
n
(
x
)
,
c
o
s
(
x
)
,
s
i
n
(
2
x
)
,
c
o
s
(
2
x
)
,
.
.
.
.
,
s
i
n
(
n
x
)
,
c
o
s
(
n
x
)
}
\{sin(0x),cos(0x),sin(x),cos(x),sin(2x),cos(2x),....,sin(nx),cos(nx)\}
{sin(0x),cos(0x),sin(x),cos(x),sin(2x),cos(2x),....,sin(nx),cos(nx)}
完备的正交函数集的意思为在上述集合中,任选2个元素,其内积为0,即正交。比如:
<
c
o
s
(
0
x
)
,
c
o
s
(
x
)
>
=
∫
−
π
π
c
o
s
(
0
x
)
∗
c
o
s
(
x
)
d
x
=
∫
−
π
π
1
d
x
+
∫
−
π
π
c
o
s
(
x
)
d
x
=
0
<cos(0x),cos(x)> = \int_{-\pi}^{\pi}cos(0x)*cos(x) dx= \int_{-\pi}^{\pi}1dx+ \int_{-\pi}^{\pi}cos(x)dx=0
<cos(0x),cos(x)>=∫−ππcos(0x)∗cos(x)dx=∫−ππ1dx+∫−ππcos(x)dx=0
s
i
n
(
w
t
)
,
c
o
s
(
w
t
)
sin(wt),cos(wt)
sin(wt),cos(wt)函数随着w的变化,频率发生变化。根据上述定义,可得,不同频率的三角函数内积为0,只有频率相等的三角函数做内积时,才不为0。
通过
e
i
w
t
=
c
o
s
(
w
t
)
+
i
∗
s
i
n
(
w
t
)
e^{iwt} = cos(wt)+i*sin(wt)
eiwt=cos(wt)+i∗sin(wt)不难发现,
e
i
w
t
e^{iwt}
eiwt由同频率的三角函数相加组成。至此我们可以直观的看出,信号
f
(
t
)
f(t)
f(t)与
e
i
w
t
e^{iwt}
eiwt的内积,只有信号
f
(
t
)
f(t)
f(t)与
e
i
w
t
e^{iwt}
eiwt同频的分量才会有内积的结果,其余分量内积为0。
傅里叶变换的本质就是内积,而内积的对象是由同频三角函数组成的
e
i
w
t
e^{iwt}
eiwt。通过与
e
i
w
t
e^{iwt}
eiwt的内积(投影),分离出角频率为w的分量,而
∫
−
∞
+
∞
\int_{-\infty}^{+\infty}
∫−∞+∞就是将信号每个时刻的w的分量叠加(即振幅)。
通过选择不同的
e
i
w
t
e^{iwt}
eiwt便可获取信号不同的频率分量。遍历不同的频率,即形成了频谱。
这边还有个小问题,
e
i
w
t
e^{iwt}
eiwt如何与真实的信号频率对应上呢,请看下文。
2.6 傅里叶变换的频率分析
我们通过一个例子来进行讲解。假设我们有个连续信号
f
(
t
)
=
2
∗
s
i
n
(
2
p
i
∗
66.66
∗
t
)
+
3
∗
c
o
s
(
2
p
i
∗
88.88
∗
t
)
f(t) = 2*sin(2pi*66.66*t)+3*cos(2pi*88.88*t)
f(t)=2∗sin(2pi∗66.66∗t)+3∗cos(2pi∗88.88∗t)
频率公式为:
f
=
1
/
T
f = 1/T
f=1/T
以
s
i
n
(
2
p
i
∗
66.66
∗
t
)
sin(2pi*66.66*t)
sin(2pi∗66.66∗t)为例,周期为
T
=
2
p
i
/
w
=
2
p
i
/
(
2
p
i
∗
66.66
)
=
1
/
66.66
T = 2pi/w = 2pi/(2pi*66.66)=1/66.66
T=2pi/w=2pi/(2pi∗66.66)=1/66.66,因此频率为
f
=
1
/
T
=
66.66
h
z
f = 1/T =66.66hz
f=1/T=66.66hz。同理可得
c
o
s
(
2
p
i
∗
88.88
∗
t
)
cos(2pi*88.88*t)
cos(2pi∗88.88∗t)的频率为
88.88
h
z
88.88hz
88.88hz。因此该信号有66.66hz和88.88hz的信号。
接下来进行信号的采集分析。
首先需要设定采样频率,根据奈奎斯特采样定律,采样频率需至少为信号最高频率的2倍。为什么呢,可以直观的理解,根据傅里叶变换可知,获取信号频率的方法,是和
e
i
w
t
=
c
o
s
(
w
t
)
+
i
∗
s
i
n
(
w
t
)
e^{iwt} = cos(wt)+i*sin(wt)
eiwt=cos(wt)+i∗sin(wt)做内积,而在采样时,要确定信号最高频率的
c
o
s
(
w
t
)
,
s
i
n
(
w
t
)
cos(wt),sin(wt)
cos(wt),sin(wt)的信息,至少需要确定2个点的位置。如下图。同理可得,最终得到的频谱中,有效的频率区间为采样频率的一半。
可以通过这个单位圆来理解采样频率,和采样点数。采样频率代表
e
i
w
t
e^{iwt}
eiwt在[0,2pi]代表的频率范围,如采样频率为200HZ,即[0,2pi]对应着0-200HZ。而采样点数就是将这0-2pi分成的份数,对应的就是变换的频率。即采样频率,确定频谱的频率范围,采样点数确定频谱的刻度的精细度。比如一把10cm量程(采样频率)的尺子,最高刻度是1cm,那尺子就是将10cm等分成10份(采样点数)。
至此,设定仿真参数为采样频率200HZ,采样点数设为100,matlab仿真代码如下:
%% 参数设置
fs=200; %采样频率
N=100; %采样总数
n=0:N-1; %采样点
t=n/fs; %采样时间间隔
%% 结果计算
y=2*sin(2*pi*66*t)+3*sin(2*pi*88*t); %时域计算
x=fft(y,N); %傅里叶变换
m=abs(x); %振幅取绝对值
f=n*(fs/N); %实际频率换算
%% 绘制结果图
plot(f,m,'-*');
xlabel('频率/Hz');ylabel('振幅');title('N=100');
通过仿真图就可清晰的明白采样频率,和采样点数的意义。随着采样点的增多,频谱分析逐渐精细,最终成功分辨出66.66,和88.88HZ的频率。
2.7 结语
至此,本人已完成自己的第一篇博客。由于为了尽可能的兼顾直观和严谨,难免存在一些纰漏,希望大家不吝赐教!
如果大家需要详细的数学推导,在此推荐B站dr_can博士的相关视频。