@TangWill
2019-10-25T21:45:01.000000Z
字数 14276
阅读 1729
大创
本文无论是cos还是sin,都统一用“正弦波”(Sine Wave)一词来代表简谐波。
从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会随着时间发生改变。这种以时间作为参照来观察动态世界的方法我们称其为时域分析。而我们也想当然的认为,世间万物都在随着时间不停的改变,并且永远不会静止下来。但如果我告诉你,用另一种方法来观察世界的话,你会发现世界是永恒不变的,你会不会觉得我疯了?我没有疯,这个静止的世界就叫做频域。
先举一个公式上并非很恰当,但意义上再贴切不过的例子
在你的理解中,一段音乐是什么呢?
这是我们对音乐最普遍的理解,一个随着时间变化的震动。但我相信对于乐器小能手们来说,音乐更直观的理解是这样的:
上图是音乐在时域的样子,而下图则是音乐在频域的样子。所以频域这一概念对大家都从不陌生,只是从来没意识到而已。
现在我们可以回过头来重新看看一开始那句痴人说梦般的话:世界是永恒的。
将以上两图简化:
在时域,我们观察到钢琴的琴弦一会上一会下的摆动,就如同一支股票的走势;而在频域,只有那一个永恒的音符。
所以你眼中看似落叶纷飞变化无常的世界,实际只是躺在上帝怀中一份早已谱好的乐章。
傅里叶告诉我们,任何周期函数,都可以看作是不同振幅,不同相位正弦波的叠加。在第一个例子里我们可以理解为,利用对不同琴键不同力度,不同时间点的敲击,可以组合出任何一首乐曲。而贯穿时域与频域的方法之一,就是传中说的傅里叶分析。傅里叶分析可分为傅里叶级数(Fourier Serie)和傅里叶变换(Fourier Transformation),我们从简单的开始谈起。、
如果我说我能用前面说的正弦曲线波叠加出一个带90度角的矩形波来,你会相信吗?你不会,就像当年的我一样。但是看看下图:
随着正弦波数量逐渐的增长,他们最终会叠加成一个标准的矩形,大家从中体会到了什么道理?
随着叠加的递增,所有正弦波中上升的部分逐渐让原本缓慢增加的曲线不断变陡,而所有正弦波中下降的部分又抵消了上升到最高处时继续上升的部分使其变为水平线。一个矩形就这么叠加而成了。但是要多少个正弦波叠加起来才能形成一个标准90度角的矩形波呢?不幸的告诉大家,答案是无穷多个。
不仅仅是矩形,你能想到的任何波形都是可以如此方法用正弦波叠加起来的。这是没有接触过傅里叶分析的人在直觉上的第一个难点,但是一旦接受了这样的设定,游戏就开始有意思起来了。
还是上图的正弦波累加成矩形波,我们换一个角度来看看:
在这几幅图中,最前面黑色的线就是所有正弦波叠加而成的总和,也就是越来越接近矩形波的那个图形。而后面依不同颜色排列而成的正弦波就是组合为矩形波的各个分量。这些正弦波按照频率从低到高从前向后排列开来,而每一个波的振幅都是不同的。一定有细心的读者发现了,每两个正弦波之间都还有一条直线,那并不是分割线,而是振幅为0的正弦波!也就是说,为了组成特殊的曲线,有些正弦波成分是不需要的。这里,不同频率的正弦波我们成为频率分量。
如果我们把第一个频率最低的频率分量看作“1”,我们就有了构建频域的最基本单元。对于我们最常见的有理数轴,数字“1”就是有理数轴的基本单元。时域的基本单元就是“1秒”,如果我们将一个角频率为的正弦波看作基础,那么频域的基本单元就是。
有了“1”,还要有“0”才能构成世界,那么频域的“0”是什么呢就是一个周期无限长的正弦波,也就是一条直线!所以在频域,0频率也被称为直流分量,在傅里叶级数的叠加中,它仅仅影响全部波形相对于数轴整体向上或是向下而不改变波的形状。
正弦波就是一个圆周运动在一条直线上的投影。所以频域的基本单元也可以理解为一个始终在旋转的圆
介绍完了频域的基本组成单元,我们就可以看一看一个矩形波,在频域里的另一个模样了:
这就是矩形波在频域的样子,是不是完全认不出来了?教科书一般就给到这里然后留给了读者无穷的遐想,以及无穷的吐槽,其实教科书只要补一张图就足够了:频域图像,也就是俗称的频谱,就是——
再清楚一点:
当然,我们也可以通过一个动图来更直观的感受一下:
可以发现,在频谱中,偶数项的振幅都是0,也就对应了图中的彩色直线。振幅为0的正弦波。
我们回顾一下刚刚的这个例子究竟意味着什么。记得前面说过的那句“世界是静止的”吗?估计好多人对这句话都已经吐槽半天了。想象一下,世界上每一个看似混乱的表象,实际都是一条时间轴上不规则的曲线,但实际这些曲线都是由这些无穷无尽的正弦波组成。我们看似不规律的事情反而是规律的正弦波在时域上的投影,而正弦波又是一个旋转的圆在直线上的投影。那么你的脑海中会产生一个什么画面呢?
我们眼中的世界就像皮影戏的大幕布,幕布的后面有无数的齿轮,大齿轮带动小齿轮,小齿轮再带动更小的。在最外面的小齿轮上有一个小人——那就是我们自己。我们只看到这个小人毫无规律的在幕布前表演,却无法预测他下一步会去哪。而幕布后面的齿轮却永远一直那样不停的旋转,永不停歇。这样说来有些宿命论的感觉。
上一章的关键词是:从侧面看。这一章的关键词是:从下面看。
在这一章最开始,我想先回答很多人的一个问题:傅里叶分析究竟是干什么用的?
先说一个最直接的用途。无论听广播还是看电视,我们一定对一个词不陌生——频道。频道频道,就是频率的通道,不同的频道就是将不同的频率作为一个通道来进行信息传输。下面大家尝试一件事:
先在纸上画一个,接下去画一个的图形。若前提是你不知道这个曲线的方程式,现在需要你把从图里拿出去,看看剩下的是什么。这基本是不可能做到的。
但是在频域呢?则简单的很,无非就是几条竖线而已。
所以很多在时域看似不可能做到的数学操作,在频域相反很容易。这就是需要傅里叶变换的地方。尤其是从某条曲线中去除一些特定的频率成分,这在工程上称为滤波,是信号处理最重要的概念之一,只有在频域才能轻松的做到。
再说一个更重要,但是稍微复杂一点的用途——求解微分方程。求解微分方程却是一件相当麻烦的事情。因为除了要计算加减乘除,还要计算微分积分。而傅里叶变换则可以让微分和积分在频域中变为乘法和除法。
下面我们继续说相位谱:
通过时域到频域的变换,我们得到了一个从侧面看的频谱,但是这个频谱并没有包含时域中全部的信息。因为频谱只代表每一个对应的正弦波的振幅是多少,而没有提到相位。基础的正弦波中,振幅,频率,相位缺一不可,不同相位决定了波的位置,所以对于频域分析,仅仅有频谱(振幅谱)是不够的,我们还需要一个相位谱。那么这个相位谱在哪呢?我们看下图,这次为了避免图片太混论,我们用7个波叠加的图。
鉴于正弦波是周期的,我们需要设定一个用来标记正弦波位置的东西。在图中就是那些小红点。小红点是距离频率轴最近的波峰,而这个波峰所处的位置离频率轴有多远呢?为了看的更清楚,我们将红色的点投影到下平面,投影点我们用粉色点来表示。当然,这些粉色的点只标注了波峰距离频率轴的距离,并不是相位。
这里需要纠正一个概念:时间差并不是相位差。如果将全部周期看作2或者360度的话,相位差则是时间差在一个周期中所占的比例。我们将时间差除周期再乘2,就得到了相位差。
在完整的立体图中,我们将投影得到的时间差依次除以所在频率的周期,就得到了最下面的相位谱。所以,频谱是从侧面看,相位谱是从下面看。
注意到,相位谱中的相位除了0,就是。因为,所以实际上相位为的波只是上下翻转了而已。对于周期方波的傅里叶级数,这样的相位谱已经是很简单的了。另外值得注意的是,由于,所以相位差是周期的,和,,都是相同的相位。人为定义相位谱的值域为,所以图中的相位差均为。
最后来一张大集合:
相信通过前面三章,大家对频域以及傅里叶级数都有了一个全新的认识。但是文章在一开始关于钢琴琴谱的例子我曾说过,这个栗子是一个公式错误,但是概念典型的例子。所谓的公式错误在哪里呢?
傅里叶级数的本质是将一个周期的信号分解成无限多分开的(离散的)正弦波,但是宇宙似乎并不是周期的。曾经在学数字信号处理的时候写过一首打油诗:
往昔连续非周期,
回忆周期不连续,
任你ZT、DFT,
还原不回去。
在这个世界上,有的事情一期一会,永不再来,并且时间始终不曾停息地将那些刻骨铭心的往昔连续的标记在时间点上。但是这些事情往往又成为了我们格外宝贵的回忆,在我们大脑里隔一段时间就会周期性的蹦出来一下,可惜这些回忆都是零散的片段,往往只有最幸福的回忆,而平淡的回忆则逐渐被我们忘却。因为,往昔是一个连续的非周期信号,而回忆是一个周期离散信号。
是否有一种数学工具将连续非周期信号变换为周期离散信号呢?抱歉,真没有。
比如傅里叶级数,在时域是一个周期且连续的函数,而在频域是一个非周期离散的函数。而在我们接下去要讲的傅里叶变换,则是将一个时域非周期的连续信号,转换为一个在频域非周期的连续信号。
或者我们也可以换一个角度理解:傅里叶变换实际上是对一个周期无限大的函数进行傅里叶变换。
所以说,钢琴谱其实并非一个连续的频谱,而是很多在时间上离散的频率,但是这样的一个贴切的比喻真的是很难找出第二个来了。
因此在傅里叶变换在频域上就从离散谱变成了连续谱。那么连续谱是什么样子呢?
你见过大海么?
为了方便大家对比,我们这次从另一个角度来看频谱,还是傅里叶级数中用到最多的那幅图,我们从频率较高的方向看。
以上是离散谱,那么连续谱是什么样子呢?尽情的发挥你的想象,想象这些离散的正弦波离得越来越近,逐渐变得连续……直到变得像波涛起伏的大海:
原来离散谱的叠加,变成了连续谱的累积。所以在计算上也从求和符号变成了积分符号。
虚数这个概念大家在高中就接触过,但那时我们只知道它是-1的平方根,可是它真正的意义是什么呢?
这里有一条数轴,在数轴上有一个红色的线段,它的长度是1。当它乘以3的时候,它的长度发生了变化,变成了蓝色的线段,而当它乘以-1的时候,就变成了绿色的线段,或者说线段在数轴上围绕原点旋转了180度。
我们知道乘-1其实就是乘了两次使线段旋转了180度,那么乘一次呢——答案很简单——旋转了90度。
同时,我们获得了一个垂直的虚数轴。实数轴与虚数轴共同构成了一个复数的平面,也称复平面。这样我们就了解到,乘虚数的一个功能——旋转。
现在,就有请宇宙第一耍帅公式欧拉公式隆重登场——
这个公式在数学领域的意义要远大于傅里叶分析,但是称它为宇宙第一耍帅公式是因为它的特殊形式——当等于的时候。
经常有理工科的学生为了跟妹子表现自己的学术功底,用这个公式来给妹子解释数学之美:”石榴姐你看,这个公式里既有自然底数,自然数1和0,虚数还有圆周率,它是这么简洁,这么美丽啊!
这个公式关键的作用,是将正弦波统一成了简单的指数形式。我们来看看图像上的涵义:
欧拉公式所描绘的,是一个随着时间变化,在复平面上做圆周运动的点,随着时间的改变,在时间轴上就成了一条螺旋线。如果只看它的实数部分,也就是螺旋线在左侧的投影,就是一个最基础的余弦函数。而右侧的投影则是一个正弦函数。
有了欧拉公式的帮助,我们便知道:正弦波的叠加,也可以理解为螺旋线的叠加在实数空间的投影。而螺旋线的叠加如果用一个形象的栗子来理解是什么呢?
光波
高中时我们就学过,自然光是由不同颜色的光叠加而成的,而最著名的实验就是牛顿师傅的三棱镜实验:
所以其实我们在很早就接触到了光的频谱,只是并没有了解频谱更重要的意义。但不同的是,傅里叶变换出来的频谱不仅仅是可见光这样频率范围有限的叠加,而是频率从0到无穷所有频率的组合。
这里,我们可以用两种方法来理解正弦波:
将以上两式相加再除2,得到:
这个式子可以怎么理解呢?我们刚才讲过,可以理解为一条逆时针旋转的螺旋线,那么则可以理解为一条顺时针旋转的螺旋线。而则是这两条旋转方向不同的螺旋线叠加的一半,因为这两条螺旋线的虚数部分相互抵消掉了!举个例子的话,就是极化方向不同的两束光波,磁场抵消,电场加倍。
这里,逆时针旋转的我们称为正频率,而顺时针旋转的我们称为负频率(注意不是复频率)。
好了,刚才我们已经看到了大海——连续的傅里叶变换频谱,现在想一想,连续的螺旋线会是什么样子:
这个图形在时域是的样子是:
顺便说一句,那个像大海螺一样的图,为了方便观看,我仅仅展示了其中正频率的部分,负频率的部分没有显示出来。如果你认真去看,海螺图上的每一条螺旋线都是可以清楚的看到的,每一条螺旋线都有着不同的振幅(旋转半径),频率(旋转周期)以及相位。而将所有螺旋线连成平面,就是这幅海螺图了。
好了,讲到这里,相信大家对傅里叶变换以及傅里叶级数都有了一个形象的理解了,我们最后用一张图来总结一下:
拉格朗日等数学家发现某些周期函数可以由三角函数的和来表示,比如下图中,黑色的斜线就是周期为的函数,而红色的曲线是三角函数之和,可以看出两者确实近似:
而让·巴普蒂斯·约瑟夫·傅里叶男爵(1768-1830)猜测任意周期函数都可以写成三角函数之和。
假设是周期为的函数,傅里叶男爵会怎么构造三角函数的和,使之等于?
对于 这样的常数函数:
根据周期函数的定义,常数函数是周期函数,周期为任意实数。所以,分解里面得有一个常数项。
首先,是周期函数,进行合理的加减组合,结果可以是周期函数。其次,它们的微分和积分都很简单。然后,是奇函数,即:
从图像上也可以看出,关于原点对称,是奇函数:
而奇函数与奇函数加减只能得到奇函数,即:
其中,是奇函数。
而是偶函数,即:
从图像上也可以看出,关于轴对称,是偶函数:
同样的,偶函数与偶函数加减只能得到偶函数,即:
其中,是偶函数。
但是任意函数可以分解和奇偶函数之和:
所以同时需要。
之前说了,是周期为的函数,我们怎么保证组合出来的函数周期依然为呢?
比如下面这个函数的周期为:
很显然,的周期也是:
的周期也是,虽然最小周期是:
很显然, 的周期都是:
更一般的,如果的周期为,那么:
这些函数的周期都为,将这些函数进行加减,就保证了得到的函数的周期也为。
现在我们有一堆周期为的函数了,比如说:
通过调整振幅可以让它们慢慢接近目标函数,比如看起来处处都比目标函数低一些:
把它的振幅增加一倍:
有的地方超出去了,从周期为的函数中选择一个,减去一点:
调整振幅,加加减减,我们可以慢慢接近目标函数:
综上,构造出来的三角函数之和大概类似下面的样子:
这样就符合之前的分析:
之前的分析还比较简单,后面开始有点难度了。即怎么确定这三个系数:
直接不好确定,要迂回一下,先稍微介绍一下什么是:
看到类似于这种就应该想到复平面上的一个夹角为的向量:
那么当不再是常数,而是代表时间的变量的时候:
随着时间的流逝,从0开始增长,这个向量就会旋转起来,秒会旋转一圈,也就是:
根据欧拉公式,有:
所以,在时间轴上,把向量的虚部(也就是纵坐标)记录下来,得到的就是:
在时间轴上,把向量的虚部记录下来,得到的就是:
如果在时间轴上,把的实部(横坐标)记录下来,得到的就是的曲线:
更一般的我们认为,我们具有两种看待的角度:
这两种角度,一个可以观察到旋转的频率,所以称为频域;一个可以看到流逝的时间,所以称为时域:
假设有这么个函数:
是一个的函数:
如果转到频域去,那么它们是下面这个复数函数的虚部
先看看,其中是常数,很显然这是两个向量之和:
现在让它们动起来,把变成流逝的时间,并且把虚部记录下来:
我们令:
这里用大写的来表示复数函数。
刚才看到了,和都是向量,所以上式可以写作:
这里就是理解的重点了,从线性代数的角度
是的虚部,所以取虚部,很容易得到:
即是基的线性组合。
那么的系数,实际上是在基下的坐标了。
有了这个结论之后,我们如何求坐标?我们来看个例子,假设:
其中,
通过点积:
可知这两个向量正交,是正交基。图示如下:
通过点积可以算出的系数(对于正交基才可以这么做):
在这里抛出一个结论(可以参考无限维的希尔伯特空间),函数向量的点积是这么定义的:
其中,是函数向量,是基,是的周期。
那么对于:
其中,是向量,是基,周期。
根据刚才内积的定义:
以是正交基,那么根据刚才的分析,可以这么求坐标:
对于我们之前的假设,其中周期为:
可以改写为这样:
也就是说向量的基为:
那么可以得到:
也可以通过点积来表示,最终我们得到:
其中:
傅立叶级数是针对周期函数的,为了可以处理非周期函数,需要傅立叶变换。先看下思路:
非周期函数,比如下面这个函数可以写出傅立叶级数吗?
这并非一个周期函数,没有办法写出傅立叶级数。不过可以变换一下思维,如果刚才的方波的周期:
那么就得到了这个函数:
在这样的思路下,就可以使用三角级数来逼近这个函数:
观察下频域,之前说了,对于周期为的函数,其基为
刚才举的方波,对应的基就为(没有余弦波):
按照刚才的思路,如果不断变大,比如让,对应的基就为(没有余弦波):
和刚才相比,频率更加密集,可以想象,如果真的,这些频率就会变得稠密,直至连续,变为一条频域曲线:
傅立叶变换就是,让求出上面这根频域曲线。
之前说了,傅立叶级数是:
通过欧拉公式,可以修改为复数形式
其中:
复数形式也是向量,可以如下解读:
周期推向无穷的时候可以得到:
上面简化了一下,用代表频率。
大致是这么得到的:
就是傅立叶变换,得到的就是频域曲线。
下面两者称为傅立叶变换对,可以相互转换:
傅立叶变换是我们所熟悉的,它把我们所要分析的信号从时间域变换到了频率域,这样最大的好处是能让我们看的更清楚信号是由哪些些基本的“原子”所组成的。这些“原子”其实就是三角级数,或者说是我们所熟悉的:,这样的变换能够告诉我们原始信号的频谱,这无疑是非常好的工具。但我们现在来看个例子:
在matlab的命令窗口中输入xpsound我们观察其中的任意一个信号都会发现,尽管我们能够从时间上一眼看处声音的频率其实是在一个局部有一个固定的频率而在另外的一个局部又有另外一个固定的频率。然而在其中我们看每一个信号的幅度谱(或者能量谱)都无法看处这一点。
我们再来说的更形象一些,如果一个美妙的音乐片段,它是在不同的时间由不同的音符所组成的,我们清楚地知道在不同位置(时间)有不同的音符(频率)。然而我们却不能够通过傅里叶变换的手段来轻松获得这一分析。原因正是因为我们取得的时间片段太长了,以至于这些不同频率的内容都混杂在了一起所以不能够区分开来。那么解决的办法也很简单,就是把原来的片段“切成”每个音符的大小(假定每个音符持续的时间都一样)的小片段,再在每个小片段上做傅里叶变换。这样我们能够直接定位到频率随时间的变化。这种想法和思路实际上就是加窗傅立叶变换。从傅立叶变换到加窗傅立叶变换就是这样过度过来的。
我们还是从傅立体叶变换(FT)出发来导出WFT的表达式,在FT中我们熟悉它的表达式是
根据上面所说的WFT的由来,其实我们是不难推出它的表达式的。
首先,待分析的信号是它的意思就是说是一个能量有限的信号,窗函数也是能量有限的信号。我们记是窗函数的共轭(这里我们可以先把窗理解成是一个实函数,它的共轭和它本身是一回事儿,写成共轭形式对于一会儿另外一个概念有用)。
那么WFT的思路就是,先用窗的不同的时移去截取信号,即
再对截取的信号取傅里叶变换,我们把变换的结果记为则变换结果为(这里的频率单位是Hz,并且我们还是记为,下同)
这样我们可以想象得来此时的是一个二维信号,并且它能够从频率和时间两个维度去刻画一个信号。而且一个直观的感受是,我们所说的“窗”如果取得越细密,那么好像可以刻画出信号的刻画的更加完美,但实际上一个极端特例就是“窗”细的不能更细,变成了一个冲击,那么不就变成了连续不断的采样?这么来说在t这个维度上看,每个t都是一个白谱,那么WFT也就失去了意义。这告诉我们,显然不可以把这个时间的“窗”开的很细,否则频率域去看会是很大一片(分辨率极低),这也从另一个角度刻画了时间和频率只能折衷,而不能二者都取得性能极佳!
实际上从数学的表达式上,也可以去刻画上面我们所描述的时频分辨率这一特性。 我们先定义两个概念:时间的“重心”和频率的“重心”。
对于窗函数以及它对应的傅里叶变换分别有如下的定义:
窗一般来说都是有一个能量聚集中心,不可能是像噪声那样不规则分布的,所以有一个指标就很重要了,它能够从某种角度说明“分辨率”这个概念,它就是标准差。直观的想如果标准差越大,那么在这个维度上它的能量是分散,所以分辨率自然也不会高,反之亦然。
时间和频率的标准差分别如下 :
下面这个图叫时频盒子图,它形象地用图像的形式给出了描述了上述的时间和频率分辨率的方法。
显然我们都希望在时间和频率的分辨率都能够越高越好,但是瓶颈在于我们已经知道不可能达到两者的分辨率都很好,所以我们试图去折衷。
如果能够让尽可能的小,那么我们就认为达到了目的。已经证明了,当窗函数中所谓的高斯窗的形式时,能够让尽可能的小,譬如他满足能量的归一化,即。在这种情况下,并且对于其他形式的窗函数,。这也正是我们窗函数为什么要选择高斯窗的原因。
信号截断时,只能截取一定长度,哪怕原始信号是无限长的,因此,好像是用一个“窗”(确切地说更像个“框”)去作这样的截取了。如下图所示,原始信号是周期信号,时间很长,截取时用红色的“窗”去截取这个周期信号,截取得到的信号如图中下部所示。
当然这个“窗”是一个单位权重的加权函数,称为“矩形窗”。这个“窗”外的信号是看不到的,只能看到窗内的信号,这就好比通过窗户看外面的世界,世界很大也很精彩,您能看到的只是位于窗内的世界,而窗外的世界,您是看不到的。因此,这就是为什么这样的加权函数被称为窗函数的真正原因。这样称呼,更为直观形象。
上图中用于截取信号的时域截取函数(就是上图中红色的那个“窗”)就称为窗函数,,它是一种计权函数,不同的窗函数计权是不一样的。也就是说,可以用不同的截取函数(窗函数)来做信号截取。到底用何种窗函数基于信号类型和分析目的。常用的窗函数有矩形窗、汉宁窗、平顶窗、指数窗等。
>