目录
简介
傅里叶变换
信号的时域与频域
卷积
低通滤波
高通滤波
带通滤波
Hodrick Prescott 滤波
卡尔曼滤波
滤波的应用对比
简介
在研究宏观问题时,经常使用滤波算法,用来平滑掉一些短期的波动,获得长期的趋势或周期。本文主要对常见的滤波算法进行整理。常见的滤波算法有低通滤波、高通滤波、带通滤波、Hodrick Prescott 滤波和卡尔曼滤波。需要指出的是,卡尔曼滤波与其他滤波算法不一样,其实是一种预测算法,因其在预测中过滤掉了噪音,所以大家习惯的称其为卡尔曼滤波。在介绍这些滤波时,我们需要先介绍两个概念,一是傅里叶变换,二是信号的时域和频域。
傅里叶变换
傅里叶变换是大多数滤波算法的核心,要想彻底搞清楚滤波算法,就需要先搞清傅里叶变换。下面我们先介绍傅里叶级数,再介绍傅里叶积分,再介绍傅里叶变换,最后再介绍傅里叶变换的一些性质。
傅里叶级数
对于一个复杂的函数,人们总是希望用一些初等函数来线性表示。例如函数的泰勒展开式,我们使用多项式函数对我们研究的函数进行逼近。然而并不是所有的函数都可以泰勒展开,泰勒展开式要求函数在某一点上具有一定阶数的可微性,所以,人们想找一个更一般的展开方式,对任何函数都适用,都可以表示成一系列初等函数的线性组合。
这个问题一直困扰着18实际的数学家,最终在19世纪初,傅里叶在研究热传导问题时,给出了解决方案。傅里叶使用的初等函数并不是幂函数,而是三角函数。其认为任何函数都可以用一系列的三角函数的线性组合来表示,这个线性组合就是傅里叶级数。这一结论傅里叶并没有完整的给出证明。其想当然的认为任何函数都适用。很可惜的是,并不是所有函数都使用,但是其对目标函数的要求远远弱于泰勒展开对函数的要求,且实际问题里面我们遇到的数据和信号都可以展开成傅里叶级数。19世纪,狄利克雷严格的证明出,满足狄利克雷条件的函数,才可以展开成傅里叶级数。下面详细给出傅里叶级数展开公式和狄利克雷条件。
对于一个满足狄利克雷条件的周期函数( 必须为周期函数),存在如下展开式:
其中:
怎么理解这个公式,借助信息学的含义,如果将看作一个信号,那么C就可以看作一个直流分量,k就代表第k个余弦谐波分量, 就是余弦谐波分量的振幅,就是余弦谐波分量的相位偏移。就是余弦谐波分量的频率(滤波算法本质就是通过这个频率去过滤余弦谐波分量,把频率不满条件的余弦谐波分量删除)。
对公式(1),我们可以使用余弦的和差角公式化简,得到更简介的表达式,也就是教科书中经常使用的表达式:
其中:
这里我们只得到了的三角级数展开形式,没有得到具体的系数,我们下面推导出公式中的系数:、、(为已知等于)
先求C,我们对(2)式左右取的定积分,有:
所以:
再求,对(2)式两边乘以,左右取的定积分,有:
有:
有:
同理有:
至此,我们就得到了任一周期函数的傅里叶级数展开。
傅里叶级数的物理意义
对一个周期函数进行傅里叶级数展开,直观上看起来公式变复杂了,但是解决了两个问题,一是可以用解析式表示出来了,因为在展开前都不一定能用解析式表示,二是(2)的右式虽然变的复杂,但是公式是统一的,是一系列同类别初等函数的和。
对于任意形如以下表达式的曲线,都是一个余弦曲线,大家不一样的就是振幅、相位偏移、频率。
如果我们将这些余弦曲线相加,就可以拟合出一个我们想要的曲线,如下图。
所以, 傅里叶级数的物理意义很明显了,就是将一个周期函数,看作是一堆不同振幅、相位偏移、频率的周期函数的和。这样我们就可以使用傅里叶级数合成出任意的符合狄利克雷条件的周期函数。
狄利克雷条件
狄利克雷给出并不是所有的周期函数都可以展开成傅里叶级数,只有同时满足以下三个条件的函数才可以。(这里大家可以方向使用,因为这些条件在现实的问题中一般都会满足,都是数学中构造的一些极端情况)。
1、函数在一个周期内,如果存在间断点,则间断点的数量有限。
2、函数在一个周期内,极大值点和极小值点的数量是有限的。
3、函数在一个周期内,绝对可积。
傅里叶积分
上面我们得到能被傅里叶级数表示的函数必须是周期函数,如果一个函数不是周期函数应该怎么办?这里对于一个非周期函数,我们可以认为此函数的周期为无穷大。
则有C=0,但却不是零,二者也相应的变成了积分形式,得到的傅里叶积分如下:
其中:
自此,我们得到了非周期函数的傅里叶积分。
傅里叶积分的物理意义
与傅里叶级数一样,傅里叶积分是对非周期函数的一个分解。但由于这个分解是一个积分的形式,不是一个求和的形式,很难去理解。我们可以看作是有无穷多个连续的余弦谐波分量加在一起构成了目标函数。与傅里叶级数不同的一点是,这里的无穷多个余弦谐波分量的是连续的。也就是可以取到任意的值。
我们最好还是将(3)式化只含一个三角函数的形式,如下:
有:
设
则:
所以:
所以,目标函数分解成余弦谐波分量的的振幅为,余弦谐波分量的角速度为。对目标函数上任意一点是由无穷多个谐波分量合成的,我们关心的是这些谐波分量的振幅与周期。而这里我们已经确定了这些谐波分量的振幅和周期,所以我们只需要计算与即可完成我们的分解。不需要计算这个积分,也就是下面我们要介绍的傅里叶变换。实际上与式就是实数域上的傅里叶变换。只不过大家更喜欢使用复数域上的傅里叶变换,下面推导复数域上的傅里叶变换。
傅里叶变换
对于上面(3)式,这里使用欧拉公式继续化简:
有:
有:
上式右面的第二部分,使用 代替 积分不变, 有:
我们将记作,有:
而:
所以:
所以:
所以我们得到了下面两个公式:
至此,我们推出了复数域上的傅里叶积分和傅里叶变换。(4)式称为傅里叶积分,也被称为傅里叶逆变换,(5)式称为傅里叶变换。
信号的时域与频域
通过上面的推导,我们可以把一个目标函数分解成一堆(对连续)谐波余量的积分(和)。而傅里叶变换得到的就是这些谐波余量。的模长就是对应谐波余量的振幅。有了这些知识,我们先给出时域的概念,在利用傅里叶变换给出频域的概念。
信号的时域
时域(Time domain)是描述数学函数或物理信号对时间的关系。例如一个信号的时域波形可以表达信号随着时间的变化。我们平常见到的目标函数
、时间序列、信号都是时域上的一种呈现形式。在直观感触这些函数、信号、时间序列时,时域上的观测非常方便直接,可以直接得到函数、信号、时间序列和时间的关系。但这种观测方式虽然直观,但是却很难发现数据背后的本质或者驱动(合成)因素。所以人们又引入了频域的概念,在频域上观测这些函数、信号、时间序列。频域上观测可以清晰的看到数据背后的本质或者驱动(合成)因素。
信号的频域
频域即频率域,自变量是频率,即横轴是频率,纵轴是该频率信号的幅度,也就是通常说的频谱图。频域上观测数据,我们可以看到每一个数据点是怎么合成的,也就是其驱动因素是什么。
而连接时域和频域的桥梁就是傅里叶变换与傅里叶逆变换,傅里叶变换将时域信息映射到频域信息上,傅里叶逆变换将频域信息映射到时域信息上
我们可以看下面最经典的一张图:
这张图其实是傅里叶级数的图,但是非常清晰的给出了时域和频域的问题,如果我们非要严谨的给出傅里叶变换将时域变成频域应该是下面这张图,对频域图像的横坐标应该是连续的,如下图
卷积
通过傅里叶变换可以引出一个非常重要的概念,那就是卷积。卷积作为一种数学运算,在初中学多项式乘以多项式时,其实我们已经接触过了,只不过那是没有人告诉你,我们使用的方式就是卷积,所以导致我们对卷积这一概念既陌生又熟悉。下面就从傅里叶变换引出卷积的定义和卷积的作用。
对于两个周期函数,我们现在想求得,我们如果知道两者的解析式,那么很好办,直接解析式相乘即可。但是当我们不知道两者的解析式时,我们怎么办?此时我们就会把进行傅里叶展开。如下:
这里使用了傅里叶级数的复数形式,其和(2)式等价。式中由周期确定。
我们现在要求,直接将和的傅里叶级数相乘就可以。
我们在相乘的过程中会发现一个规律,即乘完之后,的系数存在一个规律,即:
这一规律我们在初中学习多项式乘以多项式时经常用到,只不过不知道其实这就是卷积。
我们就把这个形式的运算定义成序列与序列的卷积,从形式上,卷积也可以看作以序列为权重,对序列进行加权。这就是卷积神经网络的用法。用一个卷积核去对数据进行加权,其目的达到滤波的效果。
使用(6)式,对于上面,得到如下结果:
这样我们就用卷积得到了两个函数乘积的傅里叶级数。更一般和常用的情况是下面的时域傅里叶卷积定理和频域傅里叶卷积定理。
时域傅里叶卷积定理
时域卷积定理:对于函数,,的卷积的傅里叶变换等与各自傅里叶变换的乘积.
下面只给出非周期函数的证明,我们用表示的卷积.有:
所以:
所以:
所以:
所以定理得证,的卷积的傅里叶变换等与各自傅里叶变换的乘积.
频域傅里叶卷积定理
频域卷积定理:对于函数,,的乘积的傅里叶变换等于各自傅里叶变换的卷积除以.
下面只给出非周期函数的证明,我们用表示的卷积.有:
有:
则有:
所以:
所以:
所以定理得证,的乘积的傅里叶变换等于各自傅里叶变换的卷积除以.
所以,我们计算两个函数的乘积时,可以先对他们进行傅里叶变换,再将他们的傅里叶变换做卷积,再求这个卷积的傅里叶逆变换.
低通滤波
有了上面傅里叶变换的介绍,低通滤波其实很简单,即只允许频率低的信息通过的滤波算子就是低通滤波.
傅里叶变换指出,目标函数(信息)可以分解成一堆连续的频率()的谐波余量的和(积分).那么我们对这些余量进行截断处理,即设置一个频率的上界,当这些谐波分量的频率()在之外时,我们将这些谐波余量设置成0,只保留频率在之内的谐波余量.
也就是说对于一个目标函数,设置频率的上界,低通滤波后得到的函数g(x)为:
其中:
在实际操作中,上式中的积分不会从积到,二是设置一个值K,从-K积到K,这个K被称为阶数,也是很多编程中经常用到的一个参数。
高通滤波
与低通滤波相反,当谐波分量的频率()在之内时,我们直接把谐波分量设置成0。保留频率()在之外的分量。
对于一个目标函数,设置频率的上界,高通滤波后得到的函数g(x)为:
带通滤波
带通滤波结合了高通滤波和低通滤波,对于谐波分量的频率(),在区间之外时,我们直接把谐波分量设置成0,其余不变。
对于一个目标函数,设置频率的上界,下界,带通滤波后得到的函数g(x)为:
Hodrick-Prescott 滤波
10年前商业周期理论学者最喜欢的滤波工具是 Hodrick 与Prescott ( 1980)提出的 ,甚至现在仍然有许多人偏爱这种技术。 Hodrick-Prescott 滤波的出发点和上面的三种滤波不一样,Hodrick-Prescott 滤波不是来自傅里叶变换,不是将时域的数据映射到频域上去用频率截取。而是来自以下优化问题。
设经济时间序列为,现在我们要将这个时间序列分解成两部分,趋势项和周期项其中n为样本容量.所以有以下等式:
我们需要构造算法,去求解上面的。构造以下优化问题:
上面优化问题的第一部分很好理解,就是使得估计的数据和原始数据的欧式距离最小,也就是最小二乘法。第二部分刻画了序列的平滑程度。为一个调节参数,可调节两部分对目标最优化的权重占比。
我们求得趋势部分,也就得到了周期部分.
通过上面Hodrick-Prescott滤波推导,我们可以看出,保留的是一些高频的周期项,趋势项约等于低频项。所以我们可以把Hodrick-Prescott 滤波看作一种高通滤波。
卡尔曼滤波
上面介绍的所有滤波都会有一个公共的缺点,那就是必须用到以往所有的数据,不适用于实时处理。为了克服这一缺点,60 年代 卡尔曼把状态空间模型引入滤波理论,并导出了一套递推估计算法,后人称之为卡尔曼滤波理论。其特点是在线性状态空间表示的基础上对有噪声的输入和观测信号进行处理,求取系统状态或真实信号。
卡尔曼滤波是以最小均方误差为准则,其基本思想是:采用信号与噪声的状态空间模型,利用前一时刻的估计值和现在的观测值来更新对状态变量的估计,求现在的估计值。它适合于实时处理和计算机运算。
值得注意的是,卡尔曼滤波与上边介绍的滤波有个本质的区别,那就是卡尔曼滤波是一个预测算法,或者估计算法。之所以叫做卡尔曼滤波是因为其预测或者估计过程中剔除了噪音。
卡尔曼滤波的出发点或者说本质是最小均方误差。在回归方程模型中我们知道,我们只要保证估计值和真实值的差的平方和最小,就能得到最优解,也就是所谓的最小二乘法。即我们只需要最小化以下损失函数:
其中:为第i个样本点的真实值,为第i个样本点的线性估计值。
卡尔曼滤波和最小二乘法非常像,也是最小化估计值和真实值的差的平方和,即最小均方误。公式表达如下:
与上面线性回归不一样的地方为,这里的估计值不是使用线性方程去估计,而是使用一种递归的算法来完成。因为是递归算法去计算估计值,所以,我们估计第k个点的数据时,并不需要用到以往所有的数据。实际上我们把以往所有数据的信息存储在一个协方差矩阵中,通过这个协方差矩阵将以往的信息传递给第k个点。
具体的递归算法如何实现,卡尔曼滤波分为两步:
第一步为预测,我么使用k-1点的状态数据,加上此时的状态转移信息和状态控制信息,以及状态控制向量,就可以轻松得到k点的状态数据,但是由于我们k-1点的数据也是使用估计数据,所有k-1点的数据本质是一个分布,我们将卡尔曼滤波中涉及的分布全部假设成正态分布,所以k-1点的状态数据服从:
所以,通过状态转移方程.
可以得到k点的状态数据也是一个高斯分布, ,这个分布为:
正常模型到这里已经结束,因为已经推导出了下一个点的分布,但卡尔曼滤波第一步预测到这里并没有结束,而是为第二步做准备,因为第二步中,还要进一步的滤波,使得预测结果更准确,这里我们的得到状态数据的分布后,我们要将这一分布映射到一个可测量的指标上,假设映射矩阵为,那么:最后这个可测量指标的估计值的分布为:
第二步为修正,我们对第k点也会有一个测量数据,此测量数据也是一个分布,记作如下:
那么我们对第k点的估计值得到了两个分布,一个是我们第一步预测的分布,一个是我们第二步通过测量值测量的数据,这两个数据都是对真实值的估计,卡尔曼滤波要做的就是结合这两个分布,推导出一个比两个分布都更加准确的一个分布。
这个分布就是将两个分布相乘得到的分布,我们可以证明,两个高斯分布的乘积还是一个高斯分布,这样,我们就得到了新的更准确地估计分布:
其中:
称为卡尔曼增益。
我们得到的最后这个高斯分布就是第k个点的最终估计值。我们不停的重复上面两个过程,就可以得到所有点卡尔曼滤波的估计值。
滤波的对比应用
我们以宏观CPI数据为例,对其进行各种滤波处理,查看各滤波的效果对比如下图:
可以看到,对CPI的刻画,带通滤波位于高通滤波和低通滤波之间,兼顾了波动性和平滑性,使用高通滤波的话,如果设置的频率阈值太大,则会出现如图中所示,起不到剔除噪音的效果,使用低通滤波的话,如果设置的频率阈值太小,则会出现如图中所示,波动太过平缓,找不到数据周期性的规律。所有一般推荐使用带通滤波处理数据。但是并不是低通和高通滤波就不好,我们可以通过调整参数,来拟合滤波效果。
上图中也画出了HP滤波,HP滤波整体和高通滤波很像,HP滤波属于高通滤波的一种,相比带通滤波,其平滑性较差了点。但这也不是绝对的结论,因为我么可以调节参数,来拟合滤波效果。